You can use the CAN controller acceptance filters to select received messages by identifier for writing into the receive FIFO. Therefore, fewer read attempts are required to get the messages of importance to the real-time application.
The behavior of the acceptance filter is described for standard and extended identifier ranges individually (one for standard identifiers and one for extended identifiers). A mask parameter and a code parameter define each acceptance filter.
For each bit of the identifier, the mask parameter
defines whether the filtering process cares about this bit or not.
0 means "do not care" and a
For each bit that the filtering process cares about,
the code parameter defines the bit value (
For standard identifiers, the mask parameter and code parameter
must both be in the range
0–2047. For extended
identifiers, the mask parameter and code parameter must both be in
The filtering process evaluates the following binary expression:
and( xor( mask, identifier ), code )
If all bits of the resulting
0, the message with this identifier is
accepted. If a bit is
1, the message is voided.
According to this description, acceptance filters work using binary evaluation, while most systems differentiate messages (identifiers) in a decimal or hexadecimal manner. As a consequence, it is possible to filter messages, whose identifiers are above a certain decimal number. The opposite (identifiers below a certain decimal number) cannot be achieved in a general way.
The default values for the mask parameter and the code parameter
in the FIFO setup driver block are both
the filtering expression evaluates to
incoming messages reach the receive FIFO (no
filtering takes place). The parameter values are defined using decimal
numbers. You can use the MATLAB® function
define hexadecimal numbers in the dialog box entry.
For example, assume a CAN network model where messages with the following identifiers (standard) are crossing the CAN network:
2-30, 48-122 (decimal)
The real-time application processes only incoming messages
Ideally, all messages not
4–29 would be filtered,
but the mask and code parameters do not allow this scheme. You can,
however, filter the messages with identifiers above
2047 – 31 = 2016 for the mask parameter
0 for the code parameter. The FIFO read driver
block cannot filter messages with identifiers
3. The block returns them, even if the real-time
application does not process them.