Microchip® Advanced Software Framework

can_example.c File Reference

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_DUMMY_DATA   0x55AAAA55

Referenced by test_1(), test_2(), test_3(), and test_4().

#define CAN_MSG_TOGGLE_LED_0   0x11223344
#define CAN_MSG_TOGGLE_LED_1   0xAABBCCDD

Referenced by decode_can_msg(), test_2(), and test_3().

#define MAX_CAN_FRAME_DATA_LEN   8

CAN frame max data length.

Referenced by test_1(), test_2(), test_3(), and test_4().

#define STRING_EOL   "\r"
#define STRING_HEADER
Value:
"-- CAN Example --\r\n" \
"-- "BOARD_NAME" --\r\n" \
"-- Compiled: "__DATE__" "__TIME__" --"STRING_EOL
#define BOARD_NAME
Definition: fatfs_access_example.c:112
#define STRING_EOL
Definition: can_example.c:101

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  )
static void configure_console ( void  )
static

Configure UART for debug message output.

References uart_rs232_options::baudrate, stdio_serial_init(), and sysclk_enable_peripheral_clock().

Referenced by main().

static void decode_can_msg ( can_mb_conf_t p_mailbox)
static

Decode CAN messages.

Parameters
p_mailboxPointer 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.

Referenced by test_1(), test_2(), test_3(), and test_4().

static void reset_mailbox_conf ( can_mb_conf_t p_mailbox)
static

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