Управление FIFO
Начиная с пустого состояния, первое принятое достоверное
сообщение сохраняется в FIFO буфере, который становится в режим
ожидания. Аппаратные сигналы события устанавливают биты
FMP[1:0] регистра CAN_RFR в значение 01b. Сообщение становится
доступным в FIFO почтового ящика исходящих сообщений.
12
Программное обеспечение считывает содержимое почтового ящика и
освобождает его устанавливая бит RFOM в регистре CAN_RFR. FIFO
опустошается снова. Если новое достоверное сообщение было
получено в то же время, FIFO остается в режиме ожидания и новое
сообщение доступно для исходящего почтового ящика.
Если приложение не освобождает почтовый ящик, то следующее
достоверное сообщение сохраняется в FIFO который входит в режим
ожидания 2 (FMP[1:0] = 10b). Процесс сохранения повторяется для
следующего достоверного сообщения, поставив FIFO в состояние
ожидания 3 (FMP[1:0] = 11b). В этот момент приложение должно
освободить исходящий почтовый ящик установкой бита RFOM,
чтобы почтовый ящик освободился для сохранения следующего
достоверного сообщения. Иначе следующее полученное достоверное
сообщение станет причиной потери сообщения.
См. также раздел 32.7.5.: Сохранение сообщений.
Переполнение
После того, как FIFO входит в режим ожидания 3 (т.е. три почтовых
ящика заполнены), следующее достоверное принимаемое сообщение
приведет к переполнению и сообщение будет утеряно. При условии
переполнения аппаратным сигналом устанавливается бит FOVR в
регистре CAN_RFR. Какое сообщение теряется зависит от
конфигурации FIFO:
• Если функция блокировки отключена (RFLM бит в регистре
CAN_MCR очищен), последнее сообщение сохраненное в FIFO
будет перезаписано новым входящим сообщением. В этом случае
последнее сообщение всегда будет доступно для приложения.
• Если функция блокировки включена (RFLM бит в регистре
CAN_MCR установлен) самое последнее сообщение будет
отброшено и приложению будет доступно три наиболее старых
сообщения в FIFO.
Взаимосвязь приема и прерываний
После сохранения сообщения в FIFO, биты FMP[1:0] обновляются и
генерируется запрос на прерывание, если в регистре CAN_IER
установлен бит FMPIE.
Когда FIFO заполнен (т.е. сохранено третье сообщение), бит FULL в
регистре CAN_RFR устанавливается и генерируется прерывание,
если в регистре CAN_IER установлен бит FFIE.
В случае переполнения, устанавливается бит FOVR и генерируется
прерывание, если в регистре CAN_IER установлен бит FOVIE.
32.7.4. Идентификатор фильтрации
В протоколе CAN идентификатор сообщения не связан с адресом
узла, а относится к содержанию сообщения. Следовательно,
передатчик передает эти сообщения для всех приемников. При приеме
сообщения, в зависимости от значения идентификатора, приемный
13
узел определяет – является ли сообщение необходимым для
приложения или нет. Если сообщение необходимо, то оно копируется
в SRAM. Если нет, то сообщение должно игнорироваться без
вмешательства программного обеспечения.
Для выполнения этого требования bxCAN контроллер обеспечивает
28 конфигурируемых и масштабируемых банков фильтров (27-0) для
приложения. В других устройствах bxCAN контроллер обеспечивает
14 конфигурируемых и масштабируемых банков фильтров (13-0) для
приложения в целях получения только необходимых для приложения
сообщений. Такая аппаратная фильтрация сохраняет ресурсы CPU,
которые в противном случае было бы необходимо затратить на
выполнение программной фильтрации. Каждый банк фильтра состоит
из двух 32-битных регистров, CAN_FxR0 и CAN_FxR1.
Масштабируемая ширина
Чтобы оптимизировать и адаптировать фильтры для нужд
приложения, каждый банк фильтра может быть масштабирован
независимо. В зависимости от масштаба, банк фильтра обеспечивает:
• Один 32-битный фильтр для STDID[10:0], EXTID[17:0], IDE и RTR
бит;
• Два 16-битных фильтра для STDID[10:0], RTR, IDE и EXTID[17:15]
бит.
См. рисунок 342.
Кроме того, фильтры можно настроить в маскируемом режиме или в
режиме списка идентификаторов.
Маскируемый режим
В маскируемом режиме регистры идентификатора связаны с
регистрами маски, уточняющими какие биты идентификатора
обрабатываются как «должно соответствовать» или как «без
разницы».
Режим списка идентификаторов
В режиме идентификатора списка, регистры маски используются как
регистры идентификатора. Таким образом, вместо заданных
идентификатора и маски указываются два идентификатора, удваивая
количество отдельных идентификаторов. Все биты входящих
идентификаторов должны соответствовать битам, указанным в
регистрах фильтров.
Масштабирование банка фильтров и конфигурирование режимов
Банки фильтров настраиваются значениями соответствующего
CAN_FMR регистра. Для конфигурации банка фильтров он должен
быть отключен очисткой бита FACT в регистре CAN_FAR. Масштаб
фильтров настраивается значениями соответствующих FSCx бит в
регистре CAN_FS1R, см. рисунок 342. Режим списка
идентификаторов или маски идентификатора для соответствующих
14
регистров маски/идентификатора настраивается значениями битов
FBMx в регистре CAN_FMR.
Рис.345.
345. Диаграмма состояния ошибок CAN
Во всех конфигурациях:
Bits 31:0 FB[31:0]: Биты фильтра
Идентификатор
Каждый бит регистра определяет уровень соответствующего бита
в ожидаемом идентификаторе.
0: Ожидается доминантный бит
1: Ожидается рецессивный бит
Маска
Каждый бит регистра определяет, совпадает ли соответствующий
бит идентификатора в регистре с соответствующим битом
ожидаемого идентификатора или нет.
0: Без разницы, бит не используется для сравнения
1: Должен совпадать, бит входящего идентификатора должен
иметь тот же самый уровень, который определен в
соответствующем регистре идентификатора фильтра.
Прим: В зависимости от масштаба и режима конфигурации фильтра,
функция каждого регистра может изменяться. Для
отображения фильтра, описание функций и связанных
регистров маски, см. раздел 32.7.4: Идентификатор фильтрации
на стр. 1064.
Регистр маски/идентификатора в режиме маски имеет такую
же карту бит, как и в режиме списка идентификатора.
Для составления карты/адресации регистра банка фильтров см.
таблицу 184 на стр. 1095.