/*IDE =0*/
:
: /*ввести рабочий режим : установить SFTRES = 0 */
:
: /*дождаться установки флага приема и просмотреть */
/*соответствие фильтру 0, чтобы считать данные*/
Модуль msCAN12 имеет четыре типа прерываний: прерывание пробуждения (1), прерывания по ошибкам (6), прерывание при заполнении буфера приема (1) и прерывания при пустом буфере передатчика (3). В скобках указано число возможных прерываний, связанных с каждым из классифицированных типов.
Прерывание пробуждения допускается, когда установлен флаг WUPIE (бит 7) в регистре CRIER разрешения прерываний приемника msCAN12 (рис. 9.23). Если обнаружена активность шины, прерывание, связанное с пробуждением, инициализируется сразу после установки флага WUPIE.
Рис. 9.23. Формат регистр разрешения прерывания приема CRIER
Контроллер msCAN12 имеет шесть различных прерываний по ошибкам. Первое из эти шести — аварийное прерывание приема, которое допускается, когда в регистре CRIER установлен бит RWRNIE (бит 6). Если при этом обнаружено событие, вызывающее состояние аварийного прерывания приема, то устанавливается связанный с этим флаг RWRNIF в регистре CRFLG и выполняется соответствующая пользовательская программа обработки прерывания. Когда установлен бит TRWNIE (бит 5) регистра CRIER, состояние аварийного прерывания передачи устанавливает флаг TWRNIF в регистре CRFLG, и выполняется другая пользовательская программа обработки прерывания.
Третье и четвертое прерывания ошибки связаны с состояниями пассивной ошибки приемника и передатчика. Биты RERRIE и TERRIE в регистре CRIER — это локальные биты маскирования, которые разрешают пассивное прерывание по ошибке приемника и передатчика, соответственно. Запросы на прерывания генерируются флагами RERRIF и TERRIF регистра CRFLG.
Пятое прерывание ошибки связано с состоянием отключения от шины. Это прерывание, разрешаемое битом BOFFIE регистра CRIER, возникает, когда обнаружено, что подсистема приемника контроллера msCAN12 обнаружила отключение от CAN шины и установила бит BOFFIF в регистре CRFLG.
Последнее прерывание ошибки связано с потерей данных, которая происходит, когда в момент поступления значимого сообщения заполнены и предварительный и основной буферы приема. Прерывание разрешается битом OVRIF в регистре CRIER, ему соответствует флаг OVRIF в регистре CRFLG.
Прерывание по событию приема сообщения разрешается установкой бита RXFIE в регистре CRIER. Запрос на прерывание генерируется, когда приемником модуля msCAN12 получены достоверные данные, готовые для чтения ЦПУ МК. Это событие отмечается установкой флага заполнения приемного буфера RXF регистра CRFLG.
Три прерывания, создаваемые при пустых передающих буферах, разрешаются битами TXEIE0, TXEIE1, и TXEIE2 регистра управления передатчиком CRCR для буферов передатчиков 0, 1 и 2, соответственно. Когда буфер передатчика освобожден для нового сообщения (пуст), устанавливается соответствующий флаг TXE0, TXE1 или TXE2 регистра CTFLG, и, если соответствующее прерывание разрешено, то выполняется соответствующая пользовательская программа обслуживания прерывания.
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 поля подтверждения кадра, игнорируется.