Hello together,
I'm using the DEVKIT S12ZVC and want to use the MSCAN. By debugging my code I get the error message "No source available for "0x000001 (0x000001)()". The failure occours only when CAN0TIER is et to 0x01.
Does anyone know what the problem could be here?
Thank you in advance.
Hello,
It sound like to MCU reset and the debugger is disconnected.
Can you please share a test code? So that I can test it on my side.
Thanks,
Daniel
I can't share the complete code but after this function I have the error "No source available for "0x000001 (0x000001)()".
typedef struct {
UBYTE IDR0; // Identifier Register 0
UBYTE IDR1; // Identifier Register 1
UBYTE Data0; // Data Segment Register 0
UBYTE Data1; // Data Segment Register 1
UBYTE Data2; // Data Segment Register 2
UBYTE Data3; // Data Segment Register 3
UBYTE Data4; // Data Segment Register 4
UBYTE Data5; // Data Segment Register 5
UBYTE Data6; // Data Segment Register 6
UBYTE Data7; // Data Segment Register 7
UBYTE DLC; // Data Length Register
UBYTE Req; // Request for transmit
} CAN_TX;
CAN_TX TX_QUEUE[3];
//Planned is that this function queues a message in the transmit buffer and then enables transmit interrupts so that it gets sent.
Void TxMessage(UBYTE *data, UBYTE length) {
UWORD id;
id = 0x862;
TX_QUEUE[Msg].IDR0 = (id >> 3) & 0xFF; //upper 8 bits of 11-bit Identifier;
TX_QUEUE[Msg].IDR1 = (id << 5) & 0xFF; //lower 3 bits of 11-bit Identifier
TX_QUEUE[Msg].Data0 = data[0];
TX_QUEUE[Msg].Data1 = data[1];
TX_QUEUE[Msg].Data2 = data[2];
TX_QUEUE[Msg].Data3 = data[3];
TX_QUEUE[Msg].Data4 = data[4];
TX_QUEUE[Msg].Data5 = data[5];
TX_QUEUE[Msg].Data6 = data[6];
TX_QUEUE[Msg].Data7 = data[7];
TX_QUEUE[Msg].DLC = length;
TX_QUEUE[Msg].ReqXMT = 0x01;
Msg++;
if (Msg >= 3) {
Msg = 0;
}
CAN0TIER = 0x01
}
}
Hi,
Did you implemented CAN0TX ISR?
It should trigger the interrupt.
Thanks,
Daniel
Hi,
Yes that's my code.
regards,
Christina
__interrupt void isrVcantx(void){
/* Write your interrupt code here ... */
CAN_TX_Scanner();
// Load message response into selected XMT buffer, called by CAN transmit interrupt -> Extracts the next message from the MCB queue and transmits it.
}
/* ISR prototype */
typedef void (*const tIsrFunc)(void);
/* Pack 3 byte pointers as 4 byte Interrupt Vector Table entries */
typedef struct
{
//byte padding;
tIsrFunc address;
} InterruptTableEntry;
#ifndef UNASSIGNED_ISR
#define UNASSIGNED_ISR 0xFFFF /* unassigned interrupt service routine */
#endif
const InterruptTableEntry _InterruptVectorTable[123] @0x00FFFE10U = { /* Interrupt vector table */
/*lint -restore Enable MISRA rule (1.1) checking. */
/*ISR name No. Address Priority Name Description */
_VECTOR, /* 0x04 0x00FFFE10 1 ivVReserved123 Unassigned */
_VECTOR, /* 0x05 0x00FFFE14 1 ivVReserved122 Unassigned */
.
.
.
isrVcantx, /* 0x54 0x00FFFF50 1 ivVcan0tx
isrVcanrx, /* 0x55 0x00FFFF54 1 ivVcan0rx
.
.
.
_VECTOR, /* 0x7E 0x00FFFFF8 - ivVspare Unassigned */
_Startup /* - 0x00FFFFFC - ivVreset Reset handler*/
};
Hi,
I think there must be some problem with the interrupt handler.
Does it trigger machine exception? If so, please check MMC registers from the exception handler.
Have you referred to MSCAN on the MagniV (AN4975)?
Regards,
Daniel
No I didn't refer to AN4975
Regards,
Christina