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

9.3.3. Проблемы синхронизации

Прежде, чем рассматривать систему из трех компонентов (передатчик, приемник и модуль прерывания), обсудим проблемы синхронизации, возникающие при работе контроллера CAN в составе МК 68HC12. Первой проблемой, с которой сталкиваемся разработчик, является выбор источника тактирования для контроллера CAN. Второй проблемой является конфигурация системы синхронизации приема битов с шины CAN.

Модуль msCAN12 рассчитан передачу информации по шине CAN со скоростью от 10 000 до 1 000 000 бит/с. Программист самостоятельно выбирает соответствующий источник синхронизации контроллера CAN с помощью бита CLKSRC в регистре управления CMCR1 (рис. 9.24).

Рис. 9.24. Формат регистра управления CMCR1

Информация в регистр CMCR1 может быть записана только после установки бита SFTRES в регистре CMCR0 в состояние логической 1. Объясним вкратце назначение трех битов регистра CMCR1 прежде, чем продолжить обсуждение. Бит циклического режима самопроверки (LOOPB, бит 2) используется, чтобы конфигурировать msCAN12 контроллер для самопроверки функций шины CAN для данного контроллера CAN. Если этот бит очищен, CAN контроллер работает как узел сети CAN, подключенный к шине. Если этот бит установлен, активизируется цикл, самопроверки, вызывая передачу последовательности битов на приемник самого контроллера. В этом режиме логическое состояние на входе RxCAN игнорируется, а логическое состояние на выходе TxCAN устанавливается в 1 (рецессивное состояние). Все прерывания CAN могут происходить в этом режиме. Любой бит, посланный в течение ACK-Slot поля подтверждения кадра, игнорируется.

Флаг режима пробуждения WUPM (бит 1) регистра CMCR1 позволяет программисту устанавливать тип пробуждения, которое контроллер msCAN12 должен обнаружить перед выводом ЦП из спящего режима. Когда этот бит установлен, контроллер msCAN12 выведет ЦП из спящего режима только при появлении на шине CAN импульса определенной длительности. Бит WUPM устанавливается, чтобы предотвратить выход из спящего режима при любых сбоях или шумах, появившихся на CAN шине. Когда этот бит очищен, контроллер msCAN12 выводит ЦП из спящего режима при любом переходе шины из рецессивного в доминантное состояние.

Бит CLKSRC используется для выбора источника синхронизации контроллера msCAN12. Если этот бит сброшен, используется внешний тактовый генератор. Если этот бит установлен, в качестве источника синхронизации контроллера msCAN12 назначается внутренняя импульсная последовательность, частота которой вдвое превышает частоту ECLK (см. система тактирования).

Регистр CBTR0 определяет число периодов тактовой частоты msCAN12, из которого будет состоять квант времени синхронизации. На рис. 9.25 показано содержимое CBTR0. Назначение битов 7 и 6 мы рассмотрим ниже. Остальные биты в регистре, BRP5-BRP0, используются для масштабирования источника синхронизации msCAN12, чтобы генерировать желательный квант времени синхронизации. Снова напомним, что регистр может быть установлен только тогда, когда установлен бит SFTRES в CMCR0. Таблица 9.1 показывает как могут быть конфигурированы биты BRP5-BRP0, чтобы установить желательный масштаб.

Рис. 9.25. Формат регистра синхронизации шины CBTR0

Таблица 9.1. Конфигурация системы масштабирования кванта времени

Контроллер msCAN12 использует квант времени в качестве временной базы, чтобы решить проблемы синхронизации. Как был упомянуто при обсуждении протокола CAN, для удобства синхронизации период времени присутствия каждого бита на CAN шине разделен на четыре сегмента: sync_seg, prop_seg, phase_seg1 и phase_seg2. В msCAN12 эти четыре сегмента отображены тремя сегментами: sync_seg, time segment 1 и time segment 2. При этом sync_seg протокола CAN непосредственно отображается в sync_seg msCAN12, prop_seg и phase_seg1 протокола CAN отображается в time segment 1, а phase_seg2 протокола CAN отображается в time segment 2 контроллера msCAN12.

Сегмент sync_seg используется, чтобы синхронизировать узлы CAN сети. Сегмент имеет длину, равную одному кванту времени. В течение этого периода контроллер msCAN12 ожидает фронт сигнала. Длительность time segment 1 может составлять от 4 до 16 квантов времени, что определяется состоянием битов 0…3 регистра синхронизации шины CBTR1 (рис. 9.26). Длительность этого сегмента должна программироваться в соответствии с задержкой распространения передатчика и приемника, а также фазовой ошибкой фронта сигнала. Продолжительность сегмента time segment 2 составляет от 2 до 8 квантов времени, и может также программироваться, с помощью битов 4, 5 и 6 регистра CBTR1. Таким образом, продолжительность времени передачи одного бита может составлять от 7 до 25 квантов времени в зависимости от установки битов в регистре CBTR1.

Рис. 9.26. Формат регистра CBTR1

Биты от 0 до 3 (TSEG13, TSEG12, TSEG11, и TSEG10) используются, чтобы установить длительность time segment 1, в соответствии с табл. 9.2. Биты от 4 до 6 (TSEG22, TSEG21 и TSEG20) используются, чтобы конфигурировать время time segment 2, как показано в табл. 9.3. Бит SAMP определяет, будет ли использоваться одна или три выборки, чтобы измерить принимаемый бит сообщения. Если бит SAMP установлен, используются три выборки, если он очищен, то только одна. Регистр CBTR1 может изменяться только при установленном бите SFTRES в регистре CMCR0.

Таблица 9.2. Конфигурация длительности time segment 1

Таблица 9.3. Конфигурация длительности time segment 2

Вернемся теперь к битам 7 и 6 регистра CBTR0. При синхронизации битов на шине, используются биты скачка ресинхронизации (SJW1:SJW0), позволяющие уменьшить или увеличить ширину скачка ресинхронизации (число квантов времени). Таблица 9.4 показывает ширину скачка ресинхронизации, соответствующую различным значениям SJW1:SJW0.

Таблица 9.4. Выбор ширины скачка ресинхронизации

В заключение покажем дополнительную аппаратную возможность контроллера msCAN12 контроллера. Когда контроллер принял или передал корректное сообщение, генерируется импульс с длительностью, равной времени передачи одного бита. Этот импульс может быть послан на встроенный модуль таймерного интерфейса (TIM). Чтобы установить эту внутреннюю связь, используется бит TLNKEN в регистре CMCR0. Такое решение обеспечивает программисту необходимую гибкость. Модуль таймерного интерфейса может быть запрограммирован на определенное действие при появлении любого кадра приема или передачи, например, для каждого кадра может создаваться своя собственная метка времени.