СОВРЕМЕННАЯ ЭЛЕКТРОНИКА 2011-7
CAN_CONFIG_LINE_FILTER_OFF; ... // инициализация CAN CANInitialize(1, 1, 3, 3, 1, init); Константы CAN_TX_MSG_FLAGS – это флаги, относящиеся к передачам сообщения CAN: #define CAN_TX_PRIORITY_BITS 0x03 #define CAN_TX_PRIORITY_0 0xFC // XXXXXX00 #define CAN_TX_PRIORITY_1 0xFD // XXXXXX01 #define CAN_TX_PRIORITY_2 0xFE // XXXXXX10 #define CAN_TX_PRIORITY_3 0xFF // XXXXXX11 #define CAN_TX_FRAME_BIT 0x08 #define CAN_TX_STD_FRAME 0xFF // XXXXX1XX #define CAN_TX_XTD_FRAME 0xF7 // XXXXX0XX #define CAN_TX_RTR_BIT 0x40 #define CAN_TX_NO_RTR_FRAME 0xFF // X1XXXXXX #define CAN_TX_RTR_FRAME 0xBF // X0XXXXXX Здесь также можно использовать по битовое «И» для настройки на требуе мую комбинацию флагов, например: /* формирование значения, исполь зуемого в CANSendMessage: */ send_config = CAN_TX_PRIORITY_0 & CAN_TX_XTD_FRAME & CAN_TX_NO_RTR_FRAME; ... CANSendMessage(id, data, 1, send_config); Флаги CAN_RX_MSG_FLAGS относят ся к приёму сообщения CAN. Если от дельный бит установлен, соответству ющее значение является истинным (TRUE), а в противном случае – лож ным (FALSE), например: // Использовать для доступа к би там фильтра #define CAN_RX_FILTER_BITS 0x07 #define CAN_RX_FILTER_1 0x00 #define CAN_RX_FILTER_2 0x01 #define CAN_RX_FILTER_3 0x02 #define CAN_RX_FILTER_4 0x03 #define CAN_RX_FILTER_5 0x04 #define CAN_RX_FILTER_6 0x05 #define CAN_RX_OVERFLOW 0x08 // Установлен, если переполнение, иначе сброшен #define CAN_RX_INVALID_MSG 0x10 // Установлен, если сообщение не действительное, иначе сброшен #define CAN_RX_XTD_FRAME 0x20 // Установлен, если сообщение XTD, иначе сброшен #define CAN_RX_RTR_FRAME 0x40 // Установлен, если сообщение RTR, иначе сброшен #define CAN_RX_DBL_BUFFERED 0x80 // Установлен, если сообщение с двойной аппаратной буферизацией Можно использовать побитовое «И» для настройки на требуемуюкомбина цию флагов, например: if (MsgFlag & CAN_RX_OVERFLOW != 0) { ... // Обнаружено переполнение при приёме // Предыдущее сообщение потеряно } Константы CAN_MASK определяют коды масок. Функция CANSetMask предполагает использование одной из них в качестве аргумента: #define CAN_MASK_B1 0 #define CAN_MASK_B2 1 Константы CAN_FILTER определя ют коды фильтрации . Функция CANSetFilter предполагает использо вание одной из них в качестве свое го аргумента: #define CAN_FILTER_B1_F1 0 #define CAN_FILTER_B1_F2 1 #define CAN_FILTER_B2_F1 2 #define CAN_FILTER_B2_F2 3 #define CAN_FILTER_B2_F3 4 #define CAN_FILTER_B2_F4 5 В листинге на сайте журнала приве дён пример простой программы, кото рая демонстрирует поддержку прото кола интерфейса CAN. П ОДКЛЮЧЕНИЕ АППАРАТУРЫ Схема подключения микроконтрол лера к шине CAN с помощью популяр ного приёмопередатчика CAN типа MCP2551 приведена на рисунке 5. Данный приёмопередатчик представ ляет собой восьмивыводную ИС, ко торая преобразует уровни стандарт ной логики передающего и приёмно го сигналов в физические уровни сигналов сети CAN. Блок схема приё мопередатчика MCP2551 показана на рисунке 6. Интерфейс CAN можно подключить к микроконтроллеру и через интер фейс SPI, например, при помощи микросхемы контроллера CAN типа ПРАКТИЧЕСКАЯ ЭЛЕКТРОНИКА 48 WWW.SOEL.RU СОВРЕМЕННАЯ ЭЛЕКТРОНИКА ◆ № 7 2011 TXD R S RXD V REF Источник опорного напряжения Приёмник Регулятор усилителя Узел сброса Обнаружение доминанта V DD V SS V DD CANH CANL Контроль температуры Управление драйвером Рис. 6. Блок схема приёмопередатчика MCP2551 10 Ом MCP2551 VCC 1 2 3 4 TXD GND VCC RXD К микроконтроллеру Экранированная витая пара RS CANH CANL V ref 8 7 6 5 Рис. 5. Схема подключения микроконтроллера к шине CAN с помощью приёмопередатчика MCP2551 © СТА-ПРЕСС
Made with FlippingBook
RkJQdWJsaXNoZXIy MTQ4NjUy