I am getting the following error: *** ERROR L125: INTERRUPT NUMBER NOT DEFINED SYMBOL: XP0INT I am not sure why because the symbol is a standard interrupt vector for CAN. Here is my code:
void CAN_vIsr(void) interrupt XP0INT { if (XP0IR) { if (CAN_OBJ[1].MCR & 0x0300 == 0x0200) { if(CAN_OBJ[1].MCR & 0x0c00 == 0x0800) { for(i=0;i=7;i++) { CAN_OBJ[0].Data[i] = CAN_OBJ[1].Data[i]; can_data[i] = CAN_OBJ[1].Data[i]; } } CAN_OBJ[1].MCR = 0xF5FD; } } XP0IR = 0; RTCvalue = (can_data[0]*3600) + (can_data[1]*60); currentRT(); }
The DAVE code (a GUI tool by Keil to develop files the user can then modify) uses the same interrupt vector.
Looks like the define cannot be found?
#define XP0INT 0x40
Chris, appreciate your response. I still get the following errors: CAN_2.C(104): error C25: syntax error near ';' CAN_2.C(107): error C103: 'XP0IR': illegal function definition (missing ';' ?) Bit XP0IR has been defined in a .h file. Even if i try to include that file I continue getting the same error.
I ma back to basic debugging skills which apparently I lack. I changed the code a bit and now am exposed to problems whose solutions are not being obvious to me. Code:
//********************************************* // CAN transmit code //********************************************* #include "main.h" #include "reg164.h" int i; unsigned int can_data[8]; extern RTCvalue; extern struct { int daysa; int daysb; int hour; int minute; int seconds; int day; int month; int year1; int year2; }time; //extern XP0INT; void CANinit(void) { //initializing CAN control registers C1CSR = 0x41; // initializes CAN controller C1BTR = 0x3453; //50Kb baudrate BFLD(DP4,0x0020,0x0000); BFLD(DP4,0x0040,0x0040); C1GMS = 0xE0FF; // enabling interrupts from the CAN module XP0IC = 0x69; //GLVL = 01, ILVL = 10. XP0IE = 1; //initializing CAN messgae object and registers CAN_OBJ[0].MCR = 0x5695; CAN_OBJ[0].UAR = 0x60D0;//ID=0x683 (NQS_TIME&DATE) CAN_OBJ[0].LAR = 0x0000; CAN_OBJ[0].MCFG = 0x68; //DLC=6,DIR=1(TX), StdId //initializing data for CAN_OBJ[0] CAN_OBJ[0].Data[0] = 0x00; CAN_OBJ[0].Data[1] = 0x00; CAN_OBJ[0].Data[2] = 0x00; CAN_OBJ[0].Data[3] = 0x00; CAN_OBJ[0].Data[4] = 0x00; CAN_OBJ[0].Data[5] = 0x00; CAN_OBJ[0].Data[6] = 0x00; CAN_OBJ[0].Data[7] = 0x00; //end of data bytes //initializing CAN_OBJ[1] for NIT_Time_Date CAN_OBJ[1].MCR = 0x5695; CAN_OBJ[1].UAR = 0xE0DA; //ID of 0x6D7 CAN_OBJ[1].LAR = 0x0000; CAN_OBJ[1].MCFG = 0x60; //DLC = 6, DIR=0(RX), StdID CAN_OBJ[1].Data[0] = 0x00; CAN_OBJ[1].Data[1] = 0x00; CAN_OBJ[1].Data[2] = 0x00; CAN_OBJ[1].Data[3] = 0x00; CAN_OBJ[1].Data[4] = 0x00; CAN_OBJ[1].Data[5] = 0x00; CAN_OBJ[1].Data[6] = 0x00; CAN_OBJ[1].Data[7] = 0x00; //end of initializing CAN_OBJ[1] //Following data objects are not used but still must be initialized. byte MSGVAL is set to invalid CAN_OBJ[2].MCR = 0x5555;//message object invalid CAN_OBJ[3].MCR = 0x5555;//message object invalid CAN_OBJ[4].MCR = 0x5555;//message object invalid CAN_OBJ[5].MCR = 0x5555;//message object invalid CAN_OBJ[6].MCR = 0x5555;//message object invalid CAN_OBJ[7].MCR = 0x5555;//message object invalid CAN_OBJ[8].MCR = 0x5555;//message object invalid CAN_OBJ[9].MCR = 0x5555;//message object invalid CAN_OBJ[10].MCR = 0x5555;//message object invalid CAN_OBJ[11].MCR = 0x5555;//message object invalid CAN_OBJ[12].MCR = 0x5555;//message object invalid CAN_OBJ[13].MCR = 0x5555;//message object invalid CAN_OBJ[14].MCR = 0x5555;//message object invalid // Resetting the CSR otherwise the module would get into an initialization loop C1CSR = 0x0000; RTCinit(); } void CAN_NQS_time_date(void) { CAN_OBJ[0].Data[0] = time.hour; CAN_OBJ[0].Data[1] = time.minute; CAN_OBJ[0].Data[2] = time.day; CAN_OBJ[0].Data[3] = time.month; CAN_OBJ[0].Data[4] = time.year1; CAN_OBJ[0].Data[5] = time.year2; CAN_OBJ[0].Data[6] = 0x00; CAN_OBJ[0].Data[7] = 0x00; CAN_OBJ[0].MCR = 0xe7ff; } void CAN_viIsr(void) interrupt XP0INT { for(i=0; i<=7; i++) { CAN_OBJ[0].Data[i] = CAN_OBJ[1].Data[i]; } CAN_OBJ[1].MCR = 0xF5FD; for(i=0; i<=2; i++) { can_data[i] = CAN_OBJ[1].Data[i]; } XP0IR = 0; RTCvalue = (can_data[0]*3600) + (can_data[1]*60); }
Errors: CAN_2.C(104): error C25: syntax error near ';' CAN_2.C(107): error C25: syntax error near '=' CAN_2.C(107): error C25: syntax error near '<=' CAN_2.C(107): error C25: syntax error near '++' CAN_2.C(109): error C25: syntax error near 'struct' CAN_2.C(109): error C25: syntax error near ')' CAN_2.C(109): error C109: illegal constant expression CAN_2.C(109): error C144: 'array': initialization needs curly braces CAN_2.C(110): error C25: syntax error near '}' CAN_2.C(111): error C25: syntax error near 'struct' CAN_2.C(111): error C25: syntax error near ')' CAN_2.C(112): error C25: syntax error near 'for' CAN_2.C(112): error C25: syntax error near '=' CAN_2.C(112): error C7: compilation aborted
It always helps if you mark which lines are mentioned in the error messaes.
It seems like the compiler goes wrong at the XP0INT keyword and complains about a ';' character. Have you somewhere in any header file played with the XP0INT define, and somewhere added a ';' in the #define?
You should think about pre-processing the source and look at the result after all #define has been expanded. Then it will be obvious why the compiler complains.