1. Содержимое регистра начального адреса стандартного индивидуального фрейма (SFF_sa) должно быть больше или равным удвоенному количеству идентификаторов, для которых производится автоматический прием и запись в память сообщений. Кроме того, содержимое регистра SFF_sa должно быть кратно четырем.
2. Содержимое регистра конца таблиц приемного фильтра (EndOfTable) должно быть меньше или равно значению 0x800 минус 6-кратное значение регистра SFF_sa, чтобы обеспечивать возможность хранения в памяти двенадцати байтов данных сообщения для каждого идентификатора, для которого производится автоматический прием и хранение.
Когда эти условия выполняются и программно устанавливается бит eFCAN в регистре AFMR, то происходит следующее.
Область между началом оперативной памяти приемного фильтра и адресом, содержащимся в SFF_sa, используется для хранения особой таблицы индивидуальных стандартных идентификаторов и идентификаторов CAN-контролле-ров/шин. Входы CAN в этой области располагаются в порядке возрастания в формате, представленном на Рис. 14.1а. Входы CAN в этой таблице могут быть помечены как «запрещенные», как и в других стандартных таблицах. Если в этой таблице содержится нечетное число «FullCA^-идентификаторов, то, как минимум, один вход CAN должен быть помечен как «запрещенный».
Для первого идентификатора, в отношении которого действует автоматическое сохранение сообщения, назначается значение индекса ID, равное (SFF_sa)/2, где (SFF_sa) — содержимое регистра SFF_sa. Таким образом, значения индексов ID, сохраняемых в регистре состояния принятого фрейма CANRFS, при установленном бите eFCAN регистра AFMR увеличиваются на (SFF_sa)/2 по сравнению со значениями, которые бы они имели при сброшенном бите eFCAN.
Когда принимается стандартный идентификатор, приемный фильтр осуществляет поиск и сравнение в указанной выше особой таблице до осуществления поиска и сравнения в стандартных индивидуальных и групповых таблицах.
Если, для принятого сообщения, в этой особой таблице имеет место совпадение идентификаторов, то приемный фильтр читает принятое сообщение из CAN-контроллера и сохраняет его в области своей оперативной памяти, начинающейся с адреса [(EndOfTable) + IDindex х12], где (EndOfTable) — содержимое регистра EndOfTable, a IDindex — индекс идентификатора принятого сообщения. Формат таких автоматически сохраняемых сообщений показан на Рис. 14.3.
Адрес |
31 |
I I I |
|24 |
23I I I |
I I Мб |
151 I I I |
Ml leM 1.....о |
||
00 |
F F |
R Т R |
0000 |
SEM |
0000 |
DLC |
00000 |
ID |
|
+4 |
RxData4 |
RxData3 |
Rx Data 2 |
Rx Data 1 |
|||||
+8 |
RxData8 |
RxData.7 |
RxData6 |
RxData5 |
Puc. 14.3. Формат сообщения, автоматически сохраняемого при приеме в режиме «fullCAN»
286 ■ Глава 14. Контроллеры CAN и приемные фильтры
Поля сообщения FF, RTR и DLC находятся в регистре CANRFS, битовая структура которого приведена в Табл. 14.13. В поле SEM аппаратно записывается значение 01b, когда начинается обновление (аппаратный прием) сообщения, и значение 1 lb, когда обновление заканчивается. Чтобы получить доступ к сообщению, пользовательская программа должна записать в поле SEM значение 00Ь. При программном обращении ко всем трем словам, составляющим сообщение, необходимо убедиться, что все три прочитанных программой слова относятся к одному и тому же сообщению. Представленная на Рис. 14.4 блок-схема алгоритма программного чтения автоматически сохраненного сообщения показывает, каким образом следует использовать поле SEM для обеспечения такой гарантии.
НА ГЛАВНУЮ | | ЧТО ТАКОЕ PIC ? | | ПРОГРАММАТОР | | ПРОЕКТЫ | | СТАТЬИ | | ССЫЛКИ | | КАРТА САЙТА |