logo search
HCS12 с применением языка С - royallib

9.3.4. Конфигурирование модуля msCan12 для работы в сети

В этом разделе мы объединим три подсистемы контроллера msCAN12 в единое целое и покажем последовательность действий по его инициализации.

До начала нашего обсуждения конфигурации сети, отметим, что шесть из восьми выводов физического порта CAN могут использоваться как универсальные входы/выходы порта общего назначения PORTCAN. На рис. 9.27 показано использование порта CAN для таких целей. Когда выводы со 2 по 7 находятся в режиме универсальных линий ввода/вывода, следующие три регистра используются для записи и чтения данных с порта PORTCAN: регистр данных PORTCAN, регистр направления передачи DDRCAN, регистр управления PCTLCAN.

Рис. 9.27. CAN портовая конфигурация

Регистр DDRCAN используется, чтобы программировать соответствующие выводы как входные или выходные. На рис. 9.28 показано назначение каждого бита регистра. Обратите внимание, что биты 0 и 1 зарезервированы как биты передачи и приема контроллера CAN и не могут быть использованы как универсальные выводы входов/выходов. Установка бита направления передачи данных в состояние логической 1 конфигурирует соответствующий вывод как выходной; установка его в состояние логического нуля — как входной. Регистр PCTLCAN, формат которого представлен на рис. 9.29, используется, чтобы разрешать или запрещать перевод выводов от 2 до 7 порта CAN в режим драйверов высокого или низкого уровня. Бит PUECAN используется, разрешать (при переводе в состояние логической 1) или запрещать (при переводе в состояние логического 0) режим драйвера высокого уровня. Бит RDPCAN выбирает конфигурацию, разрешающую (при переводе в состояние логической 1) или запрещающую (при переводе в состояние логического 0) режим драйвера низкого уровня.

Рис. 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 должен быть очищен.