Модуль ECAN для dsPIC. Типичная сеть ECAN. 16 приемных фильтров для фильтрования сообщения, страница 14

CiRXFnSID: ECAN регистр приемного фильтра n стандартных идентификаторов (n=0-15)

CiRXFnEID: ECAN регистр приемного фильтра n расширенных идентификаторов (n=0-15)

7.1.2 Маска приемных фильтров

Как показано на рисунке 11 и рисунке 12, маска приемного фильтра определяет какие биты в идентификаторе принятого сообщения проверяются приемным фильтром.

Приемный фильтр сам выбирает одну из масок приемных фильтров используя биты FnMSK  в регистрах CiFMSKSEL1 и CiFMSKSEL2:

CiFMSKSEL1<FnMSK>: выбор маски для фильтров 0-7

CiFMSKSEL2<FnMSK>: выбор маски для фильтров 8-15

Можно выбрать следующие значения бита FnMSK<1:0> :

00 - Выбрана маска 0 приемного  фильтра

01 - Выбрана маска 1 приемного  фильтра

10 - Выбрана маска 2 приемного  фильтра

11 - Маска приемного  фильтра не выбрана

Таблица 1 - это таблица истинности, которая показывает как каждый бит идентификатора сравнивается с маской и фильтром, определяя будет ли сообщение принято или отброшено. Бит маски в основном определяет какой бит применится к фильтру. Если любой бит маски установлен в ноль, этот бит автоматически принимается, несмотря на бит фильтра.

Таблица 1. Таблица истинности приёмного Фильтра/Маски

Маска (SIDn/EIDn)

Фильтр (SIDn/EIDn)

сообщение (SIDn/EIDn)

Принимать или отклонять бит n

0

Х

Х

Принимать

1

0

0

Принимать

1

0

1

Отклонять

1

1

0

Отклонять

1

1

1

Принимать

7.1.3 Выбор типа сообщения

Бит включения расширенного идентификатора (EXIDE)  в регистре CiRXFnSID<3> включает прием стандартного или расширенного сообщения. Бит режима приема идентификатора (MIDE)  в регистре CiRXMnSID<3> включает бит CiRXFnSID<EXIDE>. Если бит CiRXMnSID<MIDE> установлен, выбирается только тип сообщений выбранные CiRSFnSID<EXIDE> битом. Если CiRXMnSID<MIDE> сброшен, бит CiRXFnSID игнорируется и все сообщения эквивалентные фильтру принимаются.

EXIDE

MIDE

Выбор

0

1

Приемный фильтр проверяет стандартный идентификатор

1

1

Приемный фильтр проверяет расширенный идентификатор

x

0

Приемный фильтр проверяет стандартный/расширенный идентиф.

7.1.4 Конфигурация приемного фильтра

Пример 4 показывает программный код используемый для конфигурации приемного фильтра 0 для приема сообщений со стандартным идентификатором используя регистр маски приемного фильтра, чтобы маскировать биты SID<2:0>.

Пример 4. Фрагмент программы для фильтрации стандартного фрейма данных

/* Разрешаем доступ к регистрам приёмных фильтров */

C1CTRL1bits.WIN=0x1;

/* Выбираем маску 0 для приёмного фильтра  0 */

C1FMSKSEL1bits.F0MSK=0x0;

/* Конфигурация регистра маски фильтра 0 чтобы маскировать SID<2:0>

Mask Bits (11-bits) : 0b000 0000 0111 */

C1RXM0SIDbits.SID = 0x0007;

/* Конфигурация приёмного фильтра 0 чтобы соответствовать стандартному

идентификатору (11-bits): 0b011 1010 xxx */

C1RXF0SIDbits.SID = 0x01D0;

/*Приёмный фильтр 0 для проверки стандартного идентификатора */

C1RXM0SIDbits.MIDE = 0x1;

C1RXF0SIDbits.EXIDE= 0x0;

/* приёмный фильтр 0 для использования буфера сообщений 10 для хранения сообщений */

C1BUFPNT1bits.F0BP = 0xA;

/* Разрешаем фильтр 0 */

C1FEN1bits.FLTEN0=0x1;

/* сбрасываем бит WIN для доступа к регистрам управления */

C1CTRL1bits.WIN=0x0;

Пример 5 иллюстрирует код конфигурирующий приёмный фильтр 2 для приёма расширенного идентификатора, используя регистр маски приёмного фильтра, чтобы маскировать биты EID<5:0>

Пример 5.Фрагмент программы для фильтрации расширенного фрейма данных.

/* Выбор маски 1 для приёмного фильтра 2 */