Gast
#623429
Ich verwende den Mikrocontroller XC888 von Infineon.
In der ISR kann ich maximal 3 Message Objekte empfangen.
void SHINT_viXINTR5Isr(void) interrupt XINTR5INT
{
CAN_pushAMRegs(); // Push the CAN Access Mediator Registers
IRCON2 &= ~(ubyte)0x01; // Clear CANSRC0
CAN_vWriteCANAddress(CAN_MSPND0); //Addressing CAN_MSPND0
CAN_DATA0 = ~(0x2E); // clear message pending register
CAN_vWriteEN(D0_VALID); // bitposition ? (message object 1 2 5)
CAN_vWriteCANAddress(CAN_MOCTR1); // Addressing CAN_MOCTR1
CAN_DATA0 = 0x09; // Reset RxPND and NEWDAT flag for object 1
CAN_vWriteEN(D0_VALID);
CAN_vWriteCANAddress(CAN_MOCTR2); // Addressing CAN_MOCTR2
CAN_DATA0 = 0x09; // Reset RxPND and NEWDAT flag for object 2
CAN_vWriteEN(D0_VALID);
CAN_vWriteCANAddress(CAN_MOCTR5); // Addressing CAN_MOCTR5
CAN_DATA0 = 0x09; // Reset RxPND and NEWDAT flag for object 5
CAN_vWriteEN(D0_VALID);
CAN_popAMRegs(); // restore the CAN Access Mediator Registers
CAN_vGetMsgObj(1,&stCAN);
....
CAN_vGetMsgObj(2,stCAN);
...
CAN_vGetMsgObj(5,stCAN);
...
} // End of function SHINT_viXINTR5Isr
Muss ich überhaupt in diesem Fall das Message Pending Register
zurücksetzen oder nicht? Wenn ja woher weiss ich welches Bit ich genau
zurücksetzen sollte? Das RxPND und das NEWDAT Flag sollte man dies auch
immer wieder zurücksetzen.