Константы CAN.
Преимущества и недостатки интерфейса CAN (Controller Area Network, локальная сеть контроллеров)
В библиотеке CAN существует ряд предопределённых констант. Чтобы эффективно использовать библиотеку, необходимо разбираться в этих константах. Константы CAN_FILTER определяют коды фильтрации. Функция CANSetFilter предполагает использование одной из них в качестве своего аргумента: Константы CAN_OP_MODE определяют режим работы CAN. Функция CANSetOperationMode предполагает использование… Читать ещё >
Константы CAN. Преимущества и недостатки интерфейса CAN (Controller Area Network, локальная сеть контроллеров) (реферат, курсовая, диплом, контрольная)
В библиотеке CAN существует ряд предопределённых констант. Чтобы эффективно использовать библиотеку, необходимо разбираться в этих константах.
Константы CAN_OP_MODE определяют режим работы CAN. Функция CANSetOperationMode предполагает использование их в качестве своих аргументов:
// Использовать для доступа к битам режима.
#define CAN_MODE_BITS 0xE0
#define CAN_MODE_NORMAL 0
#define CAN_MODE_SLEEP 0×20
#define CAN_MODE_LOOP 0×40
#define CAN_MODE_LISTEN 0×60
#define CAN_MODE_CONFIG 0×80
Константы CAN_CONFIG_FLAGS определяют флаги, относящиеся к конфигурированию модуля CAN. Функции CANInitialize и CANSetBaudRate предполагают использование одной из них (или побитовой комбинации нескольких) в качестве аргумента:
#define CAN_CONFIG_DEFAULT 0xFF // 11 111 111
#define CAN_CONFIG_PHSEG2_PRG_BIT 0×01
#define CAN_CONFIG_PHSEG2_PRG_ON 0xFF // XXXXXXX1
#define CAN_CONFIG_PHSEG2_PRG_OFF
0xFE // XXXXXXX0
#defineCAN_CONFIG_LINE_FILTER_BIT 0×02
#define CAN_CONFIG_LINE_FILTER_ON 0xFF // XXXXXX1X
#defineCAN_CONFIG_LINE_FILTER_OFF 0xFD // XXXXXX0X
#define CAN_CONFIG_SAMPLE_BIT 0×04
#define CAN_CONFIG_SAMPLE_ONCE 0xFF // XXXXX1XX
#define CAN_CONFIG_SAMPLE_THRICE 0xFB // XXXXX0XX
#define CAN_CONFIG_MSG_TYPE_BIT 0×08
#define CAN_CONFIG_STD_MSG 0xFF // XXXX1XXX
#define CAN_CONFIG_XTD_MSG 0xF7 // XXXX0XXX
#define CAN_CONFIG_DBL_BUFFER_BIT 0×10
#define CAN_CONFIG_DBL_BUFFER_ON 0xFF // XXX1XXXX
#define CAN_CONFIG_DBL_BUFFER_OFF 0xEF // XXX0XXXX
#define CAN_CONFIG_MSG_BITS 0×60
#define CAN_CONFIG_ALL_MSG 0xFF // X11XXXXX
#define CAN_CONFIG_VALID_XTD_MSG 0xDF // X10XXXXX
#define CAN_CONFIG_VALID_STD_MSG 0xBF // X01XXXXX
#define CAN_CONFIG_ALL_VALID_MSG 0x9 °F // X00XXXXX
Можно использовать побитовое «И» (&) для формирования байта конфигурации из приведённых значений, например:
init = CAN_CONFIG_SAMPLE_THRICE &
CAN_CONFIG_PHSEG2_PRG_ON &
CAN_CONFIG_STD_MSG &
CAN_CONFIG_DBL_BUFFER_ON &
CAN_CONFIG_VALID_XTD_MSG &
интерфейс can константы программное.
Рис. 5. Схема подключения микроконтроллера к шине CAN с помощью приёмопередатчика MCP2551.
CAN_CONFIG_LINE_FILTER_OFF;
// инициализация CAN CANInitialize (1, 1, 3, 3, 1, init);
Константы CAN_TX_MSG_FLAGS — это флаги, относящиеся к передачам сообщения CAN:
#define CAN_TX_PRIORITY_BITS 0×03 #define CAN_TX_PRIORITY0 0xFC // XXXXXX00
#define CAN_TX_PRIORITY1 0xFD // XXXXXX01
#define CAN_TX_PRIORITY2 0xFE // XXXXXX10
#define CAN_TX_PRIORITY3 0xFF // XXXXXX11
#define CAN_TX_FRAME_BIT 0×08 #define CAN_TX_STD_FRAME 0xFF // XXXXX1XX
#define CAN_TX_XTD_FRAME 0xF7 // XXXXX0XX
#define CAN_TX_RTR_BIT 0×40 #define CAN_TX_NO_RTR_FRAME 0xFF // X1XXXXXX
#define CAN_TX_RTR_FRAME 0xBF // X0XXXXXX
Здесь также можно использовать побитовое «И» для настройки на требуемую комбинацию флагов, например:
/* формирование значения, используемого в CANSendMessage: */ send_config = CAN_TX_PRIORITY0 &
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 0×07
#define CAN_RX_FILTER1 0×00
#define CAN_RX_FILTER2 0×01
#define CAN_RX_FILTER3 0×02
#define CAN_RX_FILTER4 0×03
#define CAN_RX_FILTER5 0×04
#define CAN_RX_FILTER6 0×05
#define CAN_RX_OVERFLOW 0×08 // Установлен, если переполнение, иначе сброшен
#define CAN_RX_INVALID_MSG 0×10 // Установлен, если сообщение недействительное, иначе сброшен
#define CAN_RX_XTD_FRAME 0×20 // Установлен, если сообщение XTD, иначе сброшен
#define CAN_RX_RTR_FRAME 0×40 // Установлен, если сообщение RTR, иначе сброшен
#define CAN_RX_DBL_BUFFERED 0×80 // Установлен, если сообщение с двойной аппаратной буферизацией
Можно использовать побитовое «И» для настройки на требуемую комбинацию флагов, например:
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.