Встраиваемые системы. Проектирование приложений на микроконтроллерах семейства 68HC12/HCS12 с применением языка С - Стивен Барретт
Шрифт:
Интервал:
Закладка:
Спящий режим msCAN12. Когда 68HC12 не вовлечен в активный обмен информацией с другими узлами сети, а ЦП функционирует в активном режиме либо в режиме ожидания, модуль msCAN12 может находиться в спящем режиме, переводя бит SLPAK в состояние логической 1. Еще раз повторим, что бит SLPAK устанавливается или очищается, битом SLPRQ регистра CMCR0. При этом внутренний таймер модуля msCAN12 останавливается. Модуль MsCAN12 переходит в спящий режим немедленно после того, как установлен бит SLPAK. Исключение составляют два следующих случая:
• когда при установке бита SLPAK модуль msCAN12 передает данные, он переходит в спящий режим только после того, как передача данных заканчивается;
• когда модуль получает данные, когда устанавливается бит SLPAK, прием данных должен быть закончен прежде, чем модуль перейдет в спящий режим.
Модуль msCAN12 выходит из спящего режима, если происходит одно из трех следующих событий:
• выполняется команда ЦП очистить бит SPLPRQ, вызывающая сброс бита SLPAK;
• выполняется команда ЦП установить бит SFTRES;
• на шине CAN появляются данные, предназначенные для соответствующего контроллера.
Режим программного сброса msCAN12. Этот режим используется, чтобы конфигурировать модуль msCAN12 при инициализации. При этом прекращается любая активность CAN и по командам ЦП изменяется конфигурация регистров msCAN12, регистров фильтра, и регистров, управляющих синхронизацией. Обычно перед переводом в режим программного сброса, модуль должен находиться в спящем режиме. В противном случае могут возникнуть ошибки, связанные с тем, что любая передача или прием данных могут быть прерваны при переходе контроллера msCAN12 в режим сброса, как только бит SFTRES будет установлен.
Режим отключения msCAN12. Режим отключения должен использоваться только для того, чтобы полностью или временно прекратить связь по CAN. Как и в случае режима мягкого сброса, необходимо переводить msCAN12 в режим отключения из спящего режима.
Модуль входит в режим отключения либо при переходе ЦП в режим останова, либо при установке бита CSWAI, в то время как ЦП работает в режиме ожидания.
Когда модуль msCAN12 переходит в этот режим, любая передача или прием данных немедленно прерывается.
Подсистема передатчика. Как только ЦП микроконтроллера 68HC12 создаст сообщение, передатчик модуля msCAN12 должен корректно переслать его в сеть CAN. Рассмотрим структуру подсистемы передатчика.
Адрес Имя Регистра 0150 Регистр идентификатора 0 0151 Регистр идентификатора 1 0152 Регистр идентификатора 2 0153 Регистр идентификатора 3 0154 Регистр сегмента данных 0 0155 Регистр сегмента данных 1 0156 Регистр сегмента данных 2 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
Рассмотрим каждый регистр передающего буфера. Четырехбайтовый регистр идентификатора определяет, соответствует ли сообщение протоколу Bosch CAN 2.0A или Bosch CAN 2.0B. Первый из них требует 11-разрядного идентификатора, (стандартный формат), последний — 28-разрядного идентификатора (расширенный формат). На рис. 9.9a показано назначение каждого бита для четырех регистров идентификатора при использовании стандартного формата, на рис. 9.9б — то же для регистров расширенного формата.
Значения регистра идентификатора присваивают каждому сообщению номер, который другие модули сети 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.