Рис. 9.28.Формат регистра направления передачи DDRCAN
Рис. 9.29.Формат регистра управления PCTLCAN
И наконец, регистр PORTCAN содержит фактические данные (логические уровни) посылаемые или получаемые физическими выводами порта CAN. На рис. 9.30 показано содержимое регистра. В соответствии с установками в регистре DDRCAN, каждый бит используется передачи или приема данных из внешней среды. Обратите внимание, что, даже если модуль CAN конфигурирован для связи с сетью CAN, этот регистр будет передавать или принимать данные, в зависимости от состояния битов 1 и 0 этого регистра.
Процедура полной установки.Далее мы приведем процедуру полной установки, позволяющей конфигурировать модуль msCAN12 для связи на сетью CAN. Мы обсудим также использование прерываний, связанных модулем CAN.
Два физических внешних вывода, RxCAN и TxCAN, используются для связи с сетью. Выводы RxCAN и TxCAN соответствуют битам 0 и 1 регистра PORTCAN. Приемопередатчик CAN, который используется, чтобы управлять логическими состояниями на сетевой шине, должен быть связан с двумя выводами и должен в свою очередь быть подключен к сети CAN. Типичными примерами таких приемопередатчиков являются микросхема MC33388 или PCA82C250.
После того, как 68HC12 будет правильно подключен к сети CAN, необходимо обеспечить правильную процедуру инициализации, позволяющую установить модуль msCAN12. Обсудим эту процедуру. Прежде, чем предпринять любые шаги по инициализации, модуль msCAN12 должен быть помещен в состояние мягкого сброса, путем установки в состояние логической 1 бита SFTRES (бит 0 регистра CMCR0). Как только бит SFTRES установлен, ЦП может задать рабочую конфигурацию msCAN12, с помощью следующих регистров, связанных с CAN:
• При сбросе значение по умолчанию в регистре CMCR0 равно $21, при этом устанавливаются биты CSWAI и SFTRES. По умолчанию также очищаются биты TLNKEN и SLPRQ. Модуль msCAN12 находится в состоянии мягкого сброса и готов к работе в нормальном режиме. Вход таймера связан с портом и модуль конфигурирован таким образом, чтобы в режиме ожидания отсутствовали импульсы синхронизации.
• Значение по умолчанию в регистре CMCR1 равно $00. Если не используется внешний генератор синхронизации, то бит CLKSRC должен быть переведен в состояние логической 1. Если применяется низкочастотный фильтр для подавления помех, которые могут восприниматься как фронты, должен быть установлен бит WUPM (бит1). Для самопроверки должен быть установлен бит LOOPB (бит2).
• Значение по умолчанию в регистре CBTR0 равно $00. Биты, устанавливающие скорость передачи в бодах и биты ширины скачка ресинхронизации должны программироваться согласно требованиям конкретного применения.
• Наряду с регистром CBTR0, должны быть запрограммированы биты регистра CBTR1, чтобы удовлетворять требования к соответствующим сегментам времени.
• Если используется прерывание, то должны быть установлены соответствующие биты прерывания в регистре CRIER или в регистре CTCR и написаны соответствующая программы обработки прерываний.
• Конфигурация фильтров идентификаторов должна быть запрограммирована с помощью регистра CIDAC.
• Соответствующие значения фильтров идентификаторов должны быть запрограммированы с помощью регистров CIDAR0–CIDAR7 и CIDMR0–CIDMR7.
Сразу после окончания процесса инициализации msCAN12 будет готов к связи. Если все прерывания запрещены, то один, два или все три буфера передатчиков должны быть заполнены перед тем, как начать передачу сообщения в сеть. Перед тем, как передать в сеть дополнительные сообщения должны быть проверены флаги TXE2, TXE1 и TXE0. Флаг RxF в регистре CRFLG должен быть опрошен, чтобы узнать, не получено ли допустимое сообщение.
В большинстве случаев, используется большое число прерываний CAN. Как минимум, для связи в сетях CAN должно использоваться прерывание передачи и прерывание приема. Чтобы разрешить прерывание передачи, должны быть установлены биты TXEIE2, TXEIE1, TXEIE0 в регистре CTCR, а соответствующие сервисные программы должны снова наполнить передающие буферы и очистить биты TXE2, TXE1, и TXE0 в регистре CTFLG. Прерывание приема разрешается при установке бита RXFIE (Receiver Full Interrupt Enable) в регистре CRIER. Соответствующая сервисная программа должна очистить бит RxF в регистре CRFLG и обработать полученные данные. Еще раз повторим, что для осуществления любого допустимого прерывания бит I в регистре CCR должен быть очищен.
Читать дальше