Figure 39-14 – Rainbow Electronics AT91CAP9S250A User Manual

Page 702

Advertising
background image

702

6264A–CAP–21-May-07

AT91CAP9S500A/AT91CAP9S250A

Figure 39-14. Chaining Three Mailboxes to Receive a Buffer Split into Four Messages

39.7.3.2

Transmission Handling

A mailbox is in Transmit Mode once the MOT field in the CAN_MMRx register has been con-
figured. Message ID and Message Acceptance mask must be set before Receive Mode is
enabled.

After Transmit Mode is enabled, the MRDY flag in the CAN_MSR register is automatically set
until the first command is sent. When the MRDY flag is set, the software application can pre-
pare a message to be sent by writing to the CAN_MDx registers. The message is sent once
the software asks for a transfer command setting the MTCR bit and the message data length
in the CAN_MCRx register.

The MRDY flag remains at zero as long as the message has not been sent or aborted. It is
important to note that no access to the mailbox data register is allowed while the MRDY flag is
cleared. An interrupt is pending for the mailbox while the MRDY flag is set. This interrupt can
be masked depending on the mailbox flag in the CAN_IMR global register.

It is also possible to send a remote frame setting the MRTR bit instead of setting the MDLC
field. The answer to the remote frame is handled by another reception mailbox. In this case,
the device acts as a consumer but with the help of two mailboxes. It is possible to handle the
remote frame emission and the answer reception using only one mailbox configured in Con-
sumer Mode. Refer to the section

”Remote Frame Handling” on page 703

.

Several messages can try to win the bus arbitration in the same time. The message with the
highest priority is sent first. Several transfer request commands can be generated at the same
time by setting MBx bits in the CAN_TCR register. The priority is set in the PRIOR field of the
CAN_MMRx register. Priority 0 is the highest priority, priority 15 is the lowest priority. Thus it is
possible to use a part of the message ID to set the PRIOR field. If two mailboxes have the
same priority, the message of the mailbox with the lowest number is sent first. Thus if mailbox

MMI

(CAN_MSRx)

MRDY

(CAN_MSRx)

CAN BUS

Message s1

Reading CAN_MSRx, CAN_MSRy and CAN_MSRz

Writing MBx MBy MBz in CAN_TCR

Reading CAN_MDH & CAN_MDL for mailboxes x, y and z

MMI

(CAN_MSRy)

MRDY

(CAN_MSRy)

MMI

(CAN_MSRz)

MRDY

(CAN_MSRz)

Message s2

Message s3

Buffer split in 4 messages

Message s4

Advertising