Контроллера CAN имеет 6 буферов (приём или передача) и 2 набора фильтров (FLTR1(2)/MASK1(2)). В общее пространство единовременно отображён лишь 1 буфер и 1 фильтр/маска. Выбор осуществляется в регистре CAN_BSR.
Выбор используемого фильтра для текущего буфера задаётся в регистре CAN_RXCS, поле MASKACTID:
Фильтрация фреймов по ID осуществляется по следующей формуле:
ID & FLTR1(2) == FLTR1(2) & MASK1(2) ,
где ID это значения 4 регистров CAN_ID0-3:
ID | |||
---|---|---|---|
31:24 | 23:16 | 15:8 | 7:0 |
CAN_ID3 | CAN_ID2 | CAN_ID1 | CAN_ID0 |
FLTR1(2) – значения 4 регистров CAN_FLTR11-14(21-24):
FLTR1(2) | |||
---|---|---|---|
31:24 | 23:16 | 15:8 | 7:0 |
CAN_FLTR14(24) | CAN_FLTR13(23) | CAN_FLTR12(22) | CAN_FLTR11(21) |
MASK1(2) – значения 4 регистров CAN_MASK11-14(21-24):
MASK1(2) | |||
---|---|---|---|
31:24 | 23:16 | 15:8 | 7:0 |
CAN_MASK14(24) | CAN_MASK13(23) | CAN_MASK12(22) | CAN_MASK11(21) |
Значение FLTR ответственно за выделение бит ID, участвующих в фильтрации. Значение MASK определяет конкретное значение бит, участвующих в фильтрации. В фильтрации участвуют все биты ID. При использовании аппаратной фильтрации необходимо установить бит ROP (приём своих и чужих сообщений) в регистре CAN_CNTR.