FlexCAN RM0046
560/936 Doc ID 16912 Rev 5
22.4 Functional description
22.4.1 Overview
The FlexCAN module is a CAN protocol engine with a very flexible mailbox system for
transmitting and receiving CAN frames. The mailbox system is composed by a set of as
many as 32 Message Buffers (MB) that store configuration and control data, time stamp,
message ID and data (see Section 22.3.2, “Message buffer structure). The memory
corresponding to the first eight Message Buffers can be configured to support a FIFO
reception scheme with a powerful ID filtering mechanism, capable of checking incoming
frames against a table of IDs (as many as 8 extended IDs or 16 standard IDs or 32 eight-bit
ID slices), each one with its own individual mask register. Simultaneous reception through
FIFO and mailbox is supported. For mailbox reception, a matching algorithm makes it
possible to store received frames only into MBs that have the same ID programmed on its ID
field. A masking scheme makes it possible to match the ID programmed on the MB with a
range of IDs on received CAN frames. For transmission, an arbitration algorithm decides the
prioritization of MBs to be transmitted based on the message ID (optionally augmented by 3
local priority bits) or the MB ordering.
Before proceeding with the functional description, an important concept must be explained.
A Message Buffer is said to be “active” at a given time if it can participate in the matching
and arbitration algorithms that are happening at that time. An Rx MB with a 0000 code is
inactive (refer to Table 2 6 8). Similarly, a Tx MB with a 1000 or 1001 code is also inactive
(refer to Ta ble 269 ). An MB not programmed with 0000, 1000, or 1001 will be temporarily
deactivated (will not participate in the current arbitration or matching run) when the CPU
writes to the C/S field of that MB (see Section , “Message Buffer deactivation).
22.4.2 Transmit process
In order to transmit a CAN frame, the CPU must prepare a Message Buffer for transmission
by executing the following procedure:
1. If the MB is active (transmission pending), write an ABORT code (‘1001’) to the Code
field of the Control and Status word to request an abortion of the transmission, then
read back the Code field and the IFLAG register to check if the transmission was
aborted (see Section , “Transmission abort mechanism). If backwards compatibility is
desired (AEN in MCR negated), just write ‘1000’ to the Code field to inactivate the MB
but then the pending frame may be transmitted without notification (see Section ,
“Message Buffer deactivation).
2. Write the ID word.
3. Write the data bytes.
4. Write the Length, Control and Code fields of the Control and Status word to activate the
MB.
Once the MB is activated in the fourth step, it will participate into the arbitration process and
eventually be transmitted according to its priority. At the end of the successful transmission,
the value of the Free Running Timer is written into the Time Stamp field, the Code field in
the Control and Status word is updated, a status flag is set in the Interrupt Flag Register and
an interrupt is generated if allowed by the corresponding Interrupt Mask Register bit. The
new Code field after transmission depends on the code that was used to activate the MB in
step 4 (see Table 2 68 and Table 2 69 in Section 22.3.2, “Message buffer structure). When
the Abort feature is enabled (AEN in MCR is asserted), after the Interrupt Flag is asserted
for a MB configured as transmit buffer, the MB is blocked, therefore the CPU is not able to