Буфера сообщений (Message Object)
Буфера сообщений - это основной способ взаимодействия между микроконтроллером и CAN - контроллером.
Каждый из 15 буферов сообщений занимает 15 последовательных байт и начинается с адреса кратного 16 (см. рисунок).
Примечание: Все буфера сообщений должны инициализироваться С505С, перед тем как они начнут использоваться, т.е. перед сбросом бита INIT.
Каждый элемент регистра CAN Message Control Register Low (High) буфера сообщения состоит из двух бит. Специальный механизм позволяет избирательно устанавливать или сбрасывать определенные битовые поля (не изменяя другие) без ввода циклов чтение - модификация - запись.
Установка / сброс битов:
Значение двухбитного поля |
Для записи |
При чтении |
0 0 |
Зарезервировано |
Зарезервировано |
0 1 |
Элемент сбрасывается |
Элемент сброшен |
1 0 |
Элемент устанавливается |
Элемент установлен |
1 1 |
Данный элемент не изменяется |
Зарезервировано |
CAN Message Control Register Low MCR0
Адрес - F7n0h.
Значение после сброса - UUh.
Бит |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
Доступ |
rw |
rw |
rw |
rw |
Назван. |
MSGVAL |
TXIE |
RXIE |
INTPND |
CAN Message Control Register High MCR1
Адрес - F7n1h.
Значение после сброса - UUh.
Бит |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
Доступ |
rw |
rw |
rw |
rw |
Назван. |
RMTPND |
TXRQ |
MSGLST |
NEWDAT |
|
|
|
CPUUPD |
|
Бит |
Назначение |
MSGVAL |
Действительность буфера. Показывает, используется данный буфер или нет. Буфер может быть недействительным, если сообщение в данном буфере изменяется или не используется совсем. |
TXIE |
Разрешение прерывания после передачи. Определяет, установится ли бит INTPND после передачи. 1 |
RXIE |
Разрешает прерывание после приема. Определяет, установится ли бит INTPND после успешного принятия сообщения. |
INTPND |
Ожидание прерывания. Показывает, сгенерировал ли если этот буфер сообщения запрос на прерывание (см. TXIE и RXIE), с тех пор, когда этот бит был последний раз сброшен микроконтроллером. |
RMTPND |
Удаленный запрос (используется для буферов передачи). Показывает, что передача сообщения из этого буфера была затребована удаленным узлом, но данные не были переданы. Когда RMTPND установлен, CAN - контроллер также устанавливает бит TXRQ. TXRQ и RMTPND будут сброшены, когда сообщение будет успешно передано. |
TXRQ |
Запрос на передачу 1 3 Показывает, что требуется передача данного сообщения микроконтроллером или удаленным узлом. TXRQ может быть отключен сбросом бита CPUUPD 1 3. |
MSGLST |
Сообщение потеряно (только для буфера приема) Показывает, что CAN - контроллер сохранил новое сообщение в этот буфер, когда был установлен бит NEWDAT, т.е. предыдущий кадр был потерян. |
CPUUPD |
Бит изменения (только для буфера передачи) Показывает, что сообщение в этом буфере передачи не может быть передано сейчас. Микроконтроллер устанавливает этот бит, для того чтобы запретить передачу сообщения из данного буфера передачи или для контроля над автоматическим ответом на удаленный запрос данных. |
NEWDAT |
Новые данные Показывает, что в данный буфер были записаны новые данные микроконтроллером или CAN - контроллером с тех пор как был последний сброс микроконтроллера2. |
- В буфере сообщения №15 этот бит аппаратно установлен в лог. 0
- Когда CAN - контроллер записывает новые данные в буфер сообщения, неиспользованные байты сообщения перезаписываются неопределенными значениями. Обычно микроконтроллер очищает этот бит перед работой с данными и проверяет, чтобы этот бит был сброшен до окончания работы с данными, чтобы при работе не произошло наложения части нового пакета и старого пакета.
Для буфера передачи микроконтроллер устанавливает этот бит вместе со сбросом бита CPUUPD. Если сообщение действительно началось передаваться то CAN - контроллер не сбрасывает бит TXRQ. Бит TXRQ сбрасывается только после передачи сообщения.
- Когда микроконтроллер требует передачу сообщения из буфера приема, вместо кадра данных необходимо послать кадр удаленного запроса данных, чтобы запросить передачу кадра данных с тем же идентификатором от удаленного узла. Этот бит очищается CAN - контроллером вместе с битом RMTPND, если не был установлен, бит NEWDAT. Если имеется несколько сообщений на передачу, то первым будет передано сообщение из буфера передачи, имеющего наименьший номер.
|