Встраиваемые системы. Проектирование приложений на микроконтроллерах семейства 68HC12/HCS12 с применением языка С
Шрифт:
Подсистема передатчика. Как только ЦП микроконтроллера 68HC12 создаст сообщение, передатчик модуля msCAN12 должен корректно переслать его в сеть CAN. Рассмотрим структуру подсистемы передатчика.
Адрес | Имя Регистра |
---|---|
0150 | Регистр идентификатора 0 |
0151 | Регистр идентификатора 1 |
0152 | Регистр идентификатора 2 |
0153 | Регистр идентификатора 3 |
0154 | Регистр сегмента данных 0 |
0155 | Регистр сегмента данных 1 |
0156 | Регистр
|
0157 | Регистр сегмента данных 3 |
0158 | Регистр сегмента данных 4 |
0159 | Регистр сегмента данных 5 |
015A | Регистр сегмента данных 6 |
015B | Регистр сегмента данных 7 |
015C | Регистр длины данных |
Передающий буфер 0
Адрес | Имя Регистра |
---|---|
0160 | Регистр идентификатора 0 |
0161 | Регистр идентификатора 1 |
0162 | Регистр идентификатора 2 |
0163 | Регистр идентификатора 3 |
0164 | Регистр сегмента данных 0 |
0165 | Регистр сегмента данных 1 |
0166 | Регистр сегмента данных 2 |
0167 | Регистр сегмента данных 3 |
0168 | Регистр сегмента данных 4 |
0169 | Регистр сегмента данных 5 |
016A | Регистр сегмента данных 6 |
016B | Регистр сегмента данных 7 |
016C | Регистр длины данных |
Передающий буфер 1
Адрес | Имя Регистра |
---|---|
0170 | Регистр идентификатора 0 |
0171 | Регистр идентификатора 1 |
0172 | Регистр идентификатора 2 |
0173 | Регистр идентификатора 3 |
0174 | Регистр сегмента данных 0 |
0175 | Регистр сегмента данных 1 |
0176 | Регистр сегмента данных 2 |
0177 | Регистр сегмента данных 3 |
0178 | Регистр сегмента данных 4 |
0179 | Регистр сегмента данных 5 |
017A | Регистр сегмента данных 6 |
017B | Регистр сегмента данных 7 |
017C | Регистр длины данных |
Передающий буфер 2
Рис. 9.8. Структура буферов передачи модуля msCAN12
Как показано на рис. 9.8, передающий модуль msCAN12, содержит три 13-байтовых буфера. Все они имеют идентичную структуру данных, в которой первые четыре байта формируют идентификатор формата сообщения, следующие восемь байтов содержат фактическое сообщение, а последний байт определяет длину сообщения.
а)
б)
Рис. 9.9. Формат регистров идентификатора IDR0, IDR1, IDR2, и IDR3
а) при использовании протокола CAN 2.0A
б) при использовании протокола CAN 2.0B
Рассмотрим каждый регистр передающего буфера. Четырехбайтовый
Значения регистра идентификатора присваивают каждому сообщению номер, который другие модули сети CAN используют, чтобы распознать предназначенные для них сообщения. Флаг удаленного запроса передачи RTR (бит 4 IDR1 для стандартного формата или бит 0 IDR3 для расширенного формата) дает информацию о том, содержит ли буфер, посылающий данные другим модулям CAN, фактические сообщения или это просто запрос к другому модулю CAN, чтобы снова повторить сообщение. Если этот флаг сброшен, значит буфер содержит фактическое сообщение, если же установлен, то буфер используется, чтобы просто запросить повторную передачу сообщения. Контроллер CAN принимающего узла может использовать этот флаг, чтобы отличить данные от запроса.
Идентификатор расширенного формата IDE (бит 3 IDR1) определяет, использует ли передающий буфер стандартный или расширенный формат: логический 0 соответствует стандартный формату (11 бит), а логическая 1 — расширенному формату (29 бит). И наконец, флаг удаленного запроса SRR (бит 4 регистра IDR1) для расширенного формата должен всегда быть логической 1.
Восьмибайтовые регистры данных содержат фактические данные для пересылки. Передается содержимое регистра данных 0, затем содержимое регистра данных 1, регистра 2, и т.д, пока число байтов данных, не достигнет значения, записанного в регистре длины данных. Для каждого регистра сегмента данных, сначала передается бит 7. Регистр длины данных определяет число байтов данных, содержащихся в буфере передачи. На рис. 9.10 показан каждый бит регистра длины данных. Мы используем биты 0, 1, 2 и 3, чтобы обозначить число байтов данных. Для этого достаточно использовать только четыре бита, так как максимальное число байтов данных установлено равным восьми, в соответствии с числом регистров сегмента данных. Мы определяем число байтов данных как двоичное число при использовании бита 3 в качестве старшего бита. Например, если число байтов данных составляет 5, мы задаем следующие значения четырех битов: DLC3 = 0, DLC2 = 1, DLC1 = 0 и DLC0 = 1. Если мы используем все восемь байтов качестве данных, необходимо установить другие значения битов: DLC3 = 1, DLC2 = 0, DLC1 = 0 и DLC0 = 0.
Рис. 9.10. Формат регистра длины данных
Биты DLC3, DLC2, DLC1 и DLC0 используются, чтобы указать число байтов, содержащихся в регистрах сегмента данных
Чтобы загрузить регистры, показанные на рис. 9.8, желаемыми значениями прежде, чем осуществить любую передачу, должны быть выполнены соответствующие команды 68HC12. Например, следующий фрагмент программы на Си загружает передающий буфер 0 идентификатором $4D43 (представляющим собой символы «MC» в ASCII коде, поскольку используется контроллер фирмы Motorola) и сообщением $12345678, используя расширенный формат.
Так как имеется три передающих буфера, модуль msCAN12 должен иметь некоторые средства, чтобы передавать записанную в них информацию в порядке, определяемом ее важностью. Упорядочение трех буферов осуществляется с помощью регистра приоритета буферов передачи (рис. 9.11). Регистр приоритета буферов передачи, также как и 13-байтовый буфер, связан с каждым из передающих буферов. Контроллер msCAN12 оценивает значение приоритета для трех передавших буферных регистров, и определяет порядок передачи информации из каждого регистра. Чем меньше значение, записанное в регистре приоритета, тем выше приоритет, соответствующего буфера. В случаях, когда значения приоритетов равны, буфер с самым низким индексом получает наиболее высокий приоритет.