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). Each acceptance filter is defined by a mask parameter and a code parameter.
The mask parameter defines, for each bit of the identifier,
whether the filtering process cares about this bit or not. A
"don't care" and a
1 means "do
The code parameter then defines, for each bit of the identifier,
that the filtering process cares about (defined by the mask parameter),
what the bit value has to be (
For standard identifiers the mask parameter and code parameter
must both be in the range
For extended identifiers the mask parameter and code parameter must
both be in the range
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)
Additionally, only incoming messages
be processed by the real-time application. Ideally, all
messages not having identifiers
be filtered out, but the mask and code parameters do not allow this
exact scheme. The closest you can achieve is filtering out the messages
with identifiers above
31 by using value
= 2016 for the mask parameter and value
the code parameter. The messages with identifiers
3 cannot be filtered out and are returned by
the FIFO read driver block, even if they do not need to be processed
by the real-time application.