The RXFIFO can store up to 64 RX CAN messages that are received and optionally filtered. RX messages that pass any of the acceptance filters are stored in the RXFIFO. When no acceptance filter is selected, all received messages are stored in the RXFIFO. The software reads these messages as described in Read Messages from RXFIFO.
A timestamp is added to each successfully stored RX message. A free running 16-bit counter is clocked using CAN_REF_CLK. The rules for time stamping an RX message are as follows.
•The counter rolls over. No status bit indicates that a roll-over condition occurred. At certain bit rates, the choice of the reference clock frequency is constrained by the roll-over clock.
•The timestamp included when an RX message is successfully collected. The sampling of the counter takes place at the last bit of EOF.
•The counter is cleared when can.SSR [CEN] = 0 or when software writes a 1 to the can.TCR register.
Software must read all four registers of an RX message in the RXFIFO, regardless of how many data bytes are in the message. The first word is read using the RXFIFO_ID register and contains the received message standard and extended IDs, [IDH], and [IDL], respectively. The second word is read using the RXFIFO_DLC register and contains the 16-bit timestamp and data length code [DLC] field. The third and fourth words contain data word 1 (RXFIFO_DATA1) and data word 2 (RXFIFO_DATA2) registers.
Writes to the RXFIFO registers are ignored. Read data from an empty RXFIFO are invalid and might generate an interrupt.
The messages in the RXFIFO are retained even if the CAN controller enters the bus-off state or configuration mode.