CAN example for SAM.
Copyright (c) 2011-2018 Microchip Technology Inc. and its subsidiaries.
#include <stdio.h>
#include <string.h>
#include "board.h"
#include "sysclk.h"
#include "exceptions.h"
#include "uart.h"
#include "pmc.h"
#include "ioport.h"
#include "can.h"
#include "stdio_serial.h"
#include "sn65hvd234.h"
#include "conf_board.h"
#include "conf_clock.h"
Macros | |
#define | CAN_MSG_DUMMY_DATA 0x55AAAA55 |
#define | CAN_MSG_TOGGLE_LED_0 0x11223344 |
#define | CAN_MSG_TOGGLE_LED_1 0xAABBCCDD |
#define | MAX_CAN_FRAME_DATA_LEN 8 |
CAN frame max data length. More... | |
#define | STRING_EOL "\r" |
#define | STRING_HEADER |
#define | TEST1_CAN0_TX_PRIO 15 |
#define | TEST1_CAN_COMM_MB_IDX 0 |
#define | TEST1_CAN_TRANSFER_ID 0x07 |
#define | TEST2_CAN0_TX_MB1_ID 0x09 |
#define | TEST2_CAN0_TX_MB1_IDX 1 |
#define | TEST2_CAN0_TX_MB1_PRIO 15 |
#define | TEST2_CAN0_TX_MB2_ID 0x0A |
#define | TEST2_CAN0_TX_MB2_IDX 2 |
#define | TEST2_CAN0_TX_MB2_PRIO 14 |
#define | TEST2_CAN1_RX_MB_IDX 7 |
#define | TEST3_CAN0_TX_MB1_ID 0x09 |
#define | TEST3_CAN0_TX_MB1_IDX 1 |
#define | TEST3_CAN0_TX_MB1_PRIO 15 |
#define | TEST3_CAN0_TX_MB2_ID 0x0A |
#define | TEST3_CAN0_TX_MB2_IDX 2 |
#define | TEST3_CAN0_TX_MB2_PRIO 14 |
#define | TEST3_CAN1_RX_MB_IDX 7 |
#define | TEST4_CAN0_MB_ID 0x0b |
#define | TEST4_CAN0_MB_IDX 3 |
#define | TEST4_CAN1_TX_MB_ID 0x0b |
#define | TEST4_CAN1_TX_MB_IDX 3 |
#define | TEST4_CAN1_TX_MB_PRIO 15 |
Functions | |
void | CAN1_Handler (void) |
Default interrupt handler for CAN 1. More... | |
static void | configure_console (void) |
Configure UART for debug message output. More... | |
static void | decode_can_msg (can_mb_conf_t *p_mailbox) |
Decode CAN messages. More... | |
int | main (void) |
can_example application entry point. More... | |
static void | reset_mailbox_conf (can_mb_conf_t *p_mailbox) |
Reset mailbox configure structure. More... | |
static void | test_1 (void) |
Test the transmission from CAN0 Mailbox 0 to CAN1 Mailbox 0. More... | |
static void | test_2 (void) |
Test the transmission from CAN0 Mailboxes 1 & 2 to CAN1 Mailbox 7 without overwrite. More... | |
static void | test_3 (void) |
Test the transmission from CAN0 Mailboxes 1 & 2 to CAN1 Mailbox 7 with overwrite. More... | |
static void | test_4 (void) |
Test the communication between CAN1 Mailbox 3 and CAN0 Mailbox 3. More... | |
Variables | |
can_mb_conf_t | can0_mailbox |
CAN0 Transfer mailbox structure. More... | |
sn65hvd234_ctrl_t | can0_transceiver |
CAN0 Transceiver. More... | |
can_mb_conf_t | can1_mailbox |
CAN1 Transfer mailbox structure. More... | |
sn65hvd234_ctrl_t | can1_transceiver |
CAN1 Transceiver. More... | |
volatile uint32_t | g_ul_recv_status = 0 |
Receive status. More... | |
#define CAN_MSG_TOGGLE_LED_0 0x11223344 |
Referenced by decode_can_msg(), test_1(), test_2(), test_3(), and test_4().
#define CAN_MSG_TOGGLE_LED_1 0xAABBCCDD |
Referenced by decode_can_msg(), test_2(), and test_3().
#define MAX_CAN_FRAME_DATA_LEN 8 |
#define STRING_EOL "\r" |
#define STRING_HEADER |
Referenced by main().
#define TEST1_CAN0_TX_PRIO 15 |
Referenced by test_1().
#define TEST1_CAN_COMM_MB_IDX 0 |
Referenced by test_1().
#define TEST1_CAN_TRANSFER_ID 0x07 |
Referenced by test_1().
#define TEST2_CAN0_TX_MB1_ID 0x09 |
Referenced by test_2().
#define TEST2_CAN0_TX_MB1_IDX 1 |
Referenced by test_2().
#define TEST2_CAN0_TX_MB1_PRIO 15 |
Referenced by test_2().
#define TEST2_CAN0_TX_MB2_ID 0x0A |
Referenced by test_2().
#define TEST2_CAN0_TX_MB2_IDX 2 |
Referenced by test_2().
#define TEST2_CAN0_TX_MB2_PRIO 14 |
Referenced by test_2().
#define TEST2_CAN1_RX_MB_IDX 7 |
Referenced by test_2().
#define TEST3_CAN0_TX_MB1_ID 0x09 |
Referenced by test_3().
#define TEST3_CAN0_TX_MB1_IDX 1 |
Referenced by test_3().
#define TEST3_CAN0_TX_MB1_PRIO 15 |
Referenced by test_3().
#define TEST3_CAN0_TX_MB2_ID 0x0A |
Referenced by test_3().
#define TEST3_CAN0_TX_MB2_IDX 2 |
Referenced by test_3().
#define TEST3_CAN0_TX_MB2_PRIO 14 |
Referenced by test_3().
#define TEST3_CAN1_RX_MB_IDX 7 |
Referenced by test_3().
#define TEST4_CAN0_MB_ID 0x0b |
Referenced by test_4().
#define TEST4_CAN0_MB_IDX 3 |
Referenced by test_4().
#define TEST4_CAN1_TX_MB_ID 0x0b |
Referenced by test_4().
#define TEST4_CAN1_TX_MB_IDX 3 |
Referenced by test_4().
#define TEST4_CAN1_TX_MB_PRIO 15 |
Referenced by test_4().
void CAN1_Handler | ( | void | ) |
Default interrupt handler for CAN 1.
References can_get_status(), can_mailbox_get_status(), can_mailbox_read(), g_ul_recv_status, GLOBAL_MAILBOX_MASK, can_mb_conf_t::ul_mb_idx, and can_mb_conf_t::ul_status.
|
static |
Configure UART for debug message output.
References uart_rs232_options::baudrate, stdio_serial_init(), and sysclk_enable_peripheral_clock().
Referenced by main().
|
static |
Decode CAN messages.
p_mailbox | Pointer to CAN Mailbox structure. |
References CAN_MSG_TOGGLE_LED_0, CAN_MSG_TOGGLE_LED_1, ioport_toggle_pin_level(), STRING_EOL, and can_mb_conf_t::ul_datal.
int main | ( | void | ) |
can_example application entry point.
References board_init(), CAN_BPS_1000K, can_disable(), CAN_DISABLE_ALL_INTERRUPT_MASK, can_disable_interrupt(), can_init(), configure_console(), g_ul_recv_status, pmc_enable_periph_clk(), sn65hvd234_disable(), sn65hvd234_disable_low_power(), sn65hvd234_enable(), sn65hvd234_enable_low_power(), sn65hvd234_set_en(), sn65hvd234_set_rs(), STRING_EOL, STRING_HEADER, sysclk_get_cpu_hz(), sysclk_init(), test_1(), test_2(), test_3(), test_4(), and uart_read().
|
static |
Reset mailbox configure structure.
p_mailbox | Pointer to mailbox configure structure. |
References can_mb_conf_t::uc_id_ver, can_mb_conf_t::uc_length, can_mb_conf_t::uc_obj_type, can_mb_conf_t::uc_tx_prio, can_mb_conf_t::ul_datah, can_mb_conf_t::ul_datal, can_mb_conf_t::ul_fid, can_mb_conf_t::ul_id, can_mb_conf_t::ul_id_msk, can_mb_conf_t::ul_mb_idx, and can_mb_conf_t::ul_status.
|
static |
Test the transmission from CAN0 Mailbox 0 to CAN1 Mailbox 0.
References can_disable_interrupt(), can_enable_interrupt(), can_global_send_transfer_cmd(), can_mailbox_init(), can_mailbox_write(), CAN_MB_RX_MODE, CAN_MB_TX_MODE, CAN_MSG_DUMMY_DATA, CAN_MSG_TOGGLE_LED_0, can_reset_all_mailbox(), decode_can_msg(), g_ul_recv_status, MAX_CAN_FRAME_DATA_LEN, reset_mailbox_conf(), STRING_EOL, TEST1_CAN0_TX_PRIO, TEST1_CAN_COMM_MB_IDX, TEST1_CAN_TRANSFER_ID, can_mb_conf_t::uc_id_ver, can_mb_conf_t::uc_length, can_mb_conf_t::uc_obj_type, can_mb_conf_t::uc_tx_prio, can_mb_conf_t::ul_datah, can_mb_conf_t::ul_datal, can_mb_conf_t::ul_id, can_mb_conf_t::ul_id_msk, and can_mb_conf_t::ul_mb_idx.
Referenced by main().
|
static |
Test the transmission from CAN0 Mailboxes 1 & 2 to CAN1 Mailbox 7 without overwrite.
References can_disable_interrupt(), can_enable_interrupt(), can_global_send_transfer_cmd(), can_mailbox_init(), can_mailbox_write(), CAN_MB_RX_MODE, CAN_MB_TX_MODE, CAN_MSG_DUMMY_DATA, CAN_MSG_TOGGLE_LED_0, CAN_MSG_TOGGLE_LED_1, can_reset_all_mailbox(), decode_can_msg(), g_ul_recv_status, MAX_CAN_FRAME_DATA_LEN, reset_mailbox_conf(), STRING_EOL, TEST2_CAN0_TX_MB1_ID, TEST2_CAN0_TX_MB1_IDX, TEST2_CAN0_TX_MB1_PRIO, TEST2_CAN0_TX_MB2_ID, TEST2_CAN0_TX_MB2_IDX, TEST2_CAN0_TX_MB2_PRIO, TEST2_CAN1_RX_MB_IDX, can_mb_conf_t::uc_id_ver, can_mb_conf_t::uc_length, can_mb_conf_t::uc_obj_type, can_mb_conf_t::uc_tx_prio, can_mb_conf_t::ul_datah, can_mb_conf_t::ul_datal, can_mb_conf_t::ul_id, can_mb_conf_t::ul_id_msk, and can_mb_conf_t::ul_mb_idx.
Referenced by main().
|
static |
Test the transmission from CAN0 Mailboxes 1 & 2 to CAN1 Mailbox 7 with overwrite.
References can_disable_interrupt(), can_enable_interrupt(), can_global_send_transfer_cmd(), can_mailbox_init(), can_mailbox_write(), CAN_MB_RX_OVER_WR_MODE, CAN_MB_TX_MODE, CAN_MSG_DUMMY_DATA, CAN_MSG_TOGGLE_LED_0, CAN_MSG_TOGGLE_LED_1, can_reset_all_mailbox(), decode_can_msg(), g_ul_recv_status, MAX_CAN_FRAME_DATA_LEN, reset_mailbox_conf(), STRING_EOL, TEST3_CAN0_TX_MB1_ID, TEST3_CAN0_TX_MB1_IDX, TEST3_CAN0_TX_MB1_PRIO, TEST3_CAN0_TX_MB2_ID, TEST3_CAN0_TX_MB2_IDX, TEST3_CAN0_TX_MB2_PRIO, TEST3_CAN1_RX_MB_IDX, can_mb_conf_t::uc_id_ver, can_mb_conf_t::uc_length, can_mb_conf_t::uc_obj_type, can_mb_conf_t::uc_tx_prio, can_mb_conf_t::ul_datah, can_mb_conf_t::ul_datal, can_mb_conf_t::ul_id, can_mb_conf_t::ul_id_msk, and can_mb_conf_t::ul_mb_idx.
Referenced by main().
|
static |
Test the communication between CAN1 Mailbox 3 and CAN0 Mailbox 3.
References can_disable_interrupt(), can_enable_interrupt(), can_global_send_transfer_cmd(), can_mailbox_init(), can_mailbox_write(), CAN_MB_CONSUMER_MODE, CAN_MB_PRODUCER_MODE, CAN_MSG_DUMMY_DATA, CAN_MSG_TOGGLE_LED_0, can_reset_all_mailbox(), decode_can_msg(), g_ul_recv_status, MAX_CAN_FRAME_DATA_LEN, reset_mailbox_conf(), STRING_EOL, TEST4_CAN0_MB_ID, TEST4_CAN0_MB_IDX, TEST4_CAN1_TX_MB_ID, TEST4_CAN1_TX_MB_IDX, TEST4_CAN1_TX_MB_PRIO, can_mb_conf_t::uc_length, can_mb_conf_t::uc_obj_type, can_mb_conf_t::uc_tx_prio, can_mb_conf_t::ul_datah, can_mb_conf_t::ul_datal, can_mb_conf_t::ul_id, can_mb_conf_t::ul_id_msk, and can_mb_conf_t::ul_mb_idx.
Referenced by main().
can_mb_conf_t can0_mailbox |
CAN0 Transfer mailbox structure.
sn65hvd234_ctrl_t can0_transceiver |
CAN0 Transceiver.
can_mb_conf_t can1_mailbox |
CAN1 Transfer mailbox structure.
sn65hvd234_ctrl_t can1_transceiver |
CAN1 Transceiver.
volatile uint32_t g_ul_recv_status = 0 |
Receive status.
Referenced by CAN0_Handler(), CAN1_Handler(), main(), run_can_test(), test_1(), test_2(), test_3(), and test_4().