Rainbow Electronics AT91CAP9S250A User Manual

Page 685

Advertising
background image

685

6264A–CAP–21-May-07

AT91CAP9S500A/AT91CAP9S250A

Figure 39-3. Message Acceptance Procedure

If a mailbox is dedicated to receiving several messages (a family of messages) with different
IDs, the acceptance mask defined in the CAN_MAMx register must mask the variable part of
the ID family. Once a message is received, the application must decode the masked bits in the
CAN_MIDx. To speed up the decoding, masked bits are grouped in the family ID register
(CAN_MFIDx).

For example, if the following message IDs are handled by the same mailbox:

ID0 101000100100010010000100 0 11 00b

ID1 101000100100010010000100 0 11 01b

ID2 101000100100010010000100 0 11 10b

ID3 101000100100010010000100 0 11 11b

ID4 101000100100010010000100 1 11 00b

ID5 101000100100010010000100 1 11 01b

ID6 101000100100010010000100 1 11 10b

ID7 101000100100010010000100 1 11 11b

The CAN_MIDx and CAN_MAMx of Mailbox x must be initialized to the corresponding values:

CAN_MIDx = 001 101000100100010010000100 x 11 xxb

CAN_MAMx = 001 111111111111111111111111 0 11 00b

If Mailbox x receives a message with ID6, then CAN_MIDx and CAN_MFIDx are set:

CAN_MIDx = 001 101000100100010010000100 1 11 10b

CAN_MFIDx = 00000000000000000000000000000110b

If the application associates a handler for each message ID, it may define an array of pointers
to functions:

void (*pHandler[8])(void);

When a message is received, the corresponding handler can be invoked using CAN_MFIDx
register and there is no need to check masked bits:

unsigned int MFID0_register;

MFID0_register = Get_CAN_MFID0_Register();

// Get_CAN_MFID0_Register() returns the value of the CAN_MFID0 register

pHandler[MFID0_register]();

CAN_MIDx

CAN_MAMx

Message Received

&

&

==

Message Accepted

Message Refused

No

Yes

CAN_MFIDx

Advertising