Hello All,
Iam implementing a CAN Driver in CW5.1. Configured project in Processor Expert .WhenI try to assign canTransmitISR to vector number 0x58 as shown below
static const tIsrFunc _InterruptVectorTable[] @0xFF10U = { /* Interrupt vector table */
/*lint -restore Enable MISRA rule (1.1) checking. */
/* ISR name No. Address Pri XGATE Name Description */
&Cpu_Interrupt, /* 0x08 0xFF10 - - ivVsi unused by PE */
&Cpu_Interrupt, /* 0x09 0xFF12 1 no ivReserved119 unused by PE */
&Cpu_Interrupt, /* 0x0A 0xFF14 1 no ivReserved118 unused by PE */
&Cpu_Interrupt, /* 0x0B 0xFF16 1 no ivReserved117 unused by PE */
&Cpu_Interrupt, /* 0x0C 0xFF18 1 no ivReserved116 unused by PE */
&Cpu_Interrupt, /* 0x0D 0xFF1A 1 no ivReserved115 unused by PE */
&Cpu_Interrupt, /* 0x0E 0xFF1C 1 no ivReserved114 unused by PE */
&Cpu_Interrupt, /* 0x55 0xFFAA 1 no ivVcan1rx unused by PE */
&Cpu_Interrupt, /* 0x56 0xFFAC 1 no ivVcan1err unused by PE */
&Cpu_Interrupt, /* 0x57 0xFFAE 1 no ivVcan1wkup unused by PE */
&canTransmitISR, /* 0x58 0xFFB0 0 no ivVcan0tx unused by PE */
&Cpu_Interrupt, /* 0x59 0xFFB2 1 no ivVcan0rx unused by PE */
&Cpu_Interrupt, /* 0x5A 0xFFB4 1 no ivVcan0err unused by PE */
&Cpu_Interrupt, /* 0x5B 0xFFB6 1 no ivVcan0wkup unused by PE */
&Cpu_Interrupt, /* 0x5C 0xFFB8 1 no ivVflash unused by PE */
&Cpu_Interrupt, /* 0x5D 0xFFBA 1 no ivVeeprom unused by PE */
&Cpu_Interrupt, /* 0x68 0xFFD0 1 no ivVatd1 unused by PE */
&Cpu_Interrupt, /* 0x69 0xFFD2 1 no ivVatd0 unused by PE */
&Cpu_Interrupt, /* 0x6A 0xFFD4 1 no ivVsci1 unused by PE */
&Cpu_Interrupt, /* 0x6B 0xFFD6 1 no ivVsci0 unused by PE */
&Cpu_Interrupt, /* 0x6C 0xFFD8 1 no ivVspi0 unused by PE */
&Cpu_Interrupt, /* 0x6D 0xFFDA 1 no ivVtimpaie unused by PE */
&Cpu_Interrupt, /* 0x6E 0xFFDC 1 no ivVtimpaaovf unused by PE */
&Cpu_Interrupt, /* 0x6F 0xFFDE 1 no ivVtimovf unused by PE */
&Cpu_Interrupt, /* 0x70 0xFFE0 1 no ivVtimch7 unused by PE */
&Cpu_Interrupt, /* 0x71 0xFFE2 1 no ivVtimch6 unused by PE */
&Cpu_Interrupt, /* 0x72 0xFFE4 1 no ivVtimch5 unused by PE */
&Cpu_Interrupt, /* 0x73 0xFFE6 1 no ivVtimch4 unused by PE */
&Cpu_Interrupt, /* 0x74 0xFFE8 1 no ivVtimch3 unused by PE */
&Cpu_Interrupt, /* 0x75 0xFFEA 1 no ivVtimch2 unused by PE */
&Cpu_Interrupt, /* 0x76 0xFFEC 1 no ivVtimch1 unused by PE */
&Cpu_Interrupt, /* 0x77 0xFFEE 1 no ivVtimch0 unused by PE */
&Cpu_Interrupt, /* 0x78 0xFFF0 1 no ivVrti unused by PE */
&Cpu_Interrupt, /* 0x79 0xFFF2 1 no ivVirq unused by PE */
&Cpu_Interrupt, /* 0x7A 0xFFF4 - - ivVxirq unused by PE */
&Cpu_Interrupt, /* 0x7B 0xFFF6 - - ivVswi unused by PE */
&Cpu_Interrupt /* 0x7C 0xFFF8 - - ivVtrap unused by PE */
};
I get this Linker Error.
Link Error : L1907: Fixup overflow in _InterruptVectorTable, to canTransmitISR type 1, at offset 0xA0
Can anybody suggest a solution for this.
Thanks
Vijay
Hello Vijay,
First, may I suggest including the name of the derivative you are targeting in your messages ? I suspect that your issue is that you are placing canTransmitISR in a banked segment (either explicitly or implicitly by using the banked memory model). For S12/S12X the interrupt vector table contains 16-bit entries. As your routine is placed in banked memory, its address is 24-bit wide, hence it will not fit in the table entry. You should place your function in non-banked memory:
#pragma push#pragma CODE_SEG __NEAR_SEG my_near_segment/* code for canTransmitISR */#pragma pop
Also, make sure you properly place my_near_segment in the PRM file. Something like (just using my very limited memory, I don't have CW installed at this time):
PLACEMENT my_near_segment INTO NON_BANKED;END
Hello Navidad,
Thank you for ur reply. I was out of office for a while so could'nt get back to u.
I found a solution with which it is working fine.but the problem is; i need to edit in Vectors.c when i open the project next time. It says that Vectors.c is modified and it ask whether to reload it. when I say Ok for loading theres no need to edit but it does'nt go to the ISR. Here is my implementation.:
#pragma CODE_SEG __NEAR_SEG NON_BANKED
/* code for canTransmitISR */
#pragma CODE_SEG DEFAULT
and include &canTransmitISR, /* 0x58 0xFFB0 1 no ivVcan0tx unused by PE */ in Vectors.c
2) i tried with ur solution but it shows error as:
Error :L1009: Segment Name NON_BANKED unknown