Microchip® Advanced Software Framework

 All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
SAM Control Area Network (MCAN) Low Level Driver

This driver for AtmelĀ® | SMART SAM devices provides an low level interface for the configuration and management of the device's Control Area Network functionality.

Note
Since "The Control Area Network (CAN) performs communication according to ISO 11898-1 (Bosch CAN specification 2.0 part A,B) and to Bosch CAN FD specification V1.0", the driver is focus on the MAC layer and try to offer the APIs which can be used by upper application layer.

For storage of Rx/Tx messages and for storage of the filter configuration, a message RAM is needed to the CAN module. In this driver, the message RAM is static allocated, the related setting is defined and can be changed in the module configuration file "conf_mcan.h".

The following peripherals are used by this module:

The following devices can use this module:

The outline of this documentation is as follows:

Prerequisites

There are no prerequisites for this module.

Module Overview

This driver provides an interface for the Control Area Network Controller functions on the device.

Special Considerations

There are no special considerations for this module.

Extra Information

For extra information see asfdoc_sam_mcan_extra. This includes:

Examples

For a list of examples related to this driver, see Examples for MCAN Driver.

API Overview

Modules

 Quick Start Guide(s)
 In this section you can find a list of all Quick Start guides related to the SAM Control Area Network (MCAN) Low Level Driver.
 

Data Structures

struct  mcan_config
 MCAN configuration structure. More...
 
struct  mcan_module
 MCAN software device instance structure. More...
 

Module Setting

enum  mcan_timeout_mode {
  MCAN_TIMEOUT_CONTINUES = MCAN_TOCC_TOS_CONTINUOUS,
  MCAN_TIMEOUT_TX_EVEN_FIFO = MCAN_TOCC_TOS_TX_EV_TIMEOUT,
  MCAN_TIMEOUT_RX_FIFO_0 = MCAN_TOCC_TOS_RX0_EV_TIMEOUT,
  MCAN_TIMEOUT_RX_FIFO_1 = MCAN_TOCC_TOS_RX1_EV_TIMEOUT
}
 Can time out modes. More...
 
enum  mcan_nonmatching_frames_action {
  MCAN_NONMATCHING_FRAMES_FIFO_0,
  MCAN_NONMATCHING_FRAMES_FIFO_1,
  MCAN_NONMATCHING_FRAMES_REJECT
}
 Can nonmatching frames action. More...
 
static void mcan_get_config_defaults (struct mcan_config *const config)
 Initializes an MCAN configuration structure to defaults. More...
 
void mcan_init (struct mcan_module *const module_inst, Mcan *hw, struct mcan_config *config)
 initialize can module. More...
 
void mcan_set_baudrate (Mcan *hw, uint32_t baudrate)
 Set MCAN baudrate. More...
 
void mcan_fd_set_baudrate (Mcan *hw, uint32_t baudrate)
 Set MCAN_FD baudrate. More...
 
void mcan_start (struct mcan_module *const module_inst)
 start can module after initialization. More...
 
void mcan_stop (struct mcan_module *const module_inst)
 stop mcan module when bus off occurs More...
 
void mcan_enable_fd_mode (struct mcan_module *const module_inst)
 switch mcan module into fd mode. More...
 
void mcan_disable_fd_mode (struct mcan_module *const module_inst)
 disable fd mode of mcan module. More...
 
void mcan_enable_restricted_operation_mode (struct mcan_module *const module_inst)
 enable restricted mode of mcan module. More...
 
void mcan_disable_restricted_operation_mode (struct mcan_module *const module_inst)
 disable restricted mode of mcan module. More...
 
void mcan_enable_bus_monitor_mode (struct mcan_module *const module_inst)
 enable bus monitor mode of mcan module. More...
 
void mcan_disable_bus_monitor_mode (struct mcan_module *const module_inst)
 disable bus monitor mode of mcan module. More...
 
void mcan_enable_sleep_mode (struct mcan_module *const module_inst)
 enable sleep mode of mcan module. More...
 
void mcan_disable_sleep_mode (struct mcan_module *const module_inst)
 disable sleep mode of mcan module. More...
 
void mcan_enable_test_mode (struct mcan_module *const module_inst)
 enable test mode of mcan module. More...
 
void mcan_disable_test_mode (struct mcan_module *const module_inst)
 disable test mode of mcan module. More...
 
static uint16_t mcan_read_timestamp_count_value (struct mcan_module *const module_inst)
 Can read timestamp count value. More...
 
static uint16_t mcan_read_timeout_count_value (struct mcan_module *const module_inst)
 Can read timeout count value. More...
 
static uint32_t mcan_read_error_count (struct mcan_module *const module_inst)
 Can read error count. More...
 
static uint32_t mcan_read_protocal_status (struct mcan_module *const module_inst)
 Can read protocol status. More...
 

Rx Handling

enum  mcan_interrupt_source {
  MCAN_RX_FIFO_0_NEW_MESSAGE = MCAN_IE_RF0NE,
  MCAN_RX_FIFO_0_WATERMARK = MCAN_IE_RF0WE,
  MCAN_RX_FIFO_0_FULL = MCAN_IE_RF0FE,
  MCAN_RX_FIFO_0_LOST_MESSAGE = MCAN_IE_RF0LE,
  MCAN_RX_FIFO_1_NEW_MESSAGE = MCAN_IE_RF1NE,
  MCAN_RX_FIFO_1_WATERMARK = MCAN_IE_RF1WE,
  MCAN_RX_FIFO_1_FULL = MCAN_IE_RF1FE,
  MCAN_RX_FIFO_1_MESSAGE_LOST = MCAN_IE_RF1LE,
  MCAN_RX_HIGH_PRIORITY_MESSAGE = MCAN_IE_HPME,
  MCAN_TIMESTAMP_COMPLETE = MCAN_IE_TCE,
  MCAN_TX_CANCELLATION_FINISH = MCAN_IE_TCFE,
  MCAN_TX_FIFO_EMPTY = MCAN_IE_TFEE,
  MCAN_TX_EVENT_FIFO_NEW_ENTRY = MCAN_IE_TEFNE,
  MCAN_TX_EVENT_FIFO_WATERMARK = MCAN_IE_TEFWE,
  MCAN_TX_EVENT_FIFO_FULL = MCAN_IE_TEFFE,
  MCAN_TX_EVENT_FIFO_ELEMENT_LOST = MCAN_IE_TEFLE,
  MCAN_TIMESTAMP_WRAPAROUND = MCAN_IE_TSWE,
  MCAN_MESSAGE_RAM_ACCESS_FAILURE = MCAN_IE_MRAFE,
  MCAN_TIMEOUT_OCCURRED = MCAN_IE_TOOE,
  MCAN_RX_BUFFER_NEW_MESSAGE = MCAN_IE_DRXE,
  MCAN_ERROR_LOGGING_OVERFLOW = MCAN_IE_ELOE,
  MCAN_ERROR_PASSIVE = MCAN_IE_EPE,
  MCAN_WARNING_STATUS = MCAN_IE_EWE,
  MCAN_BUS_OFF = MCAN_IE_BOE,
  MCAN_WATCHDOG = MCAN_IE_WDIE,
  MCAN_CRC_ERROR = MCAN_IE_CRCEE,
  MCAN_BIT_ERROR = MCAN_IE_BEE,
  MCAN_ACKNOWLEDGE_ERROR = MCAN_IE_ACKEE,
  MCAN_FORMAT_ERROR = MCAN_IE_FOEE,
  MCAN_STUFF_ERROR = MCAN_IE_STEE
}
 Can module interrupt source. More...
 
static uint32_t mcan_read_high_priority_message_status (struct mcan_module *const module_inst)
 Read high priority message status. More...
 
static bool mcan_rx_get_buffer_status (struct mcan_module *const module_inst, uint32_t index)
 Get Rx buffer status. More...
 
static void mcan_rx_clear_buffer_status (struct mcan_module *const module_inst, uint32_t index)
 Clear Rx buffer status. More...
 
static uint32_t mcan_rx_get_fifo_status (struct mcan_module *const module_inst, bool fifo_number)
 Get Rx FIFO status. More...
 
static void mcan_rx_fifo_acknowledge (struct mcan_module *const module_inst, bool fifo_number, uint32_t index)
 Set Rx acknowledge. More...
 
static void mcan_get_standard_message_filter_element_default (struct mcan_standard_message_filter_element *sd_filter)
 Get the standard message filter default value. More...
 
enum status_code mcan_set_rx_standard_filter (struct mcan_module *const module_inst, struct mcan_standard_message_filter_element *sd_filter, uint32_t index)
 set standard receive CAN ID. More...
 
static void mcan_get_extended_message_filter_element_default (struct mcan_extended_message_filter_element *et_filter)
 Get the extended message filter default value. More...
 
enum status_code mcan_set_rx_extended_filter (struct mcan_module *const module_inst, struct mcan_extended_message_filter_element *et_filter, uint32_t index)
 set extended receive CAN ID. More...
 
enum status_code mcan_get_rx_buffer_element (struct mcan_module *const module_inst, struct mcan_rx_element_buffer *rx_element, uint32_t index)
 get dedicated rx buffer element . More...
 
enum status_code mcan_get_rx_fifo_0_element (struct mcan_module *const module_inst, struct mcan_rx_element_fifo_0 *rx_element, uint32_t index)
 get FIFO rx buffer element . More...
 
enum status_code mcan_get_rx_fifo_1_element (struct mcan_module *const module_inst, struct mcan_rx_element_fifo_1 *rx_element, uint32_t index)
 get FIFO rx buffer element . More...
 
static uint32_t mcan_tx_get_fifo_queue_status (struct mcan_module *const module_inst)
 Get Tx FIFO/Queue status. More...
 
static uint32_t mcan_tx_get_pending_status (struct mcan_module *const module_inst)
 Get Tx buffer request pending status. More...
 
static enum status_code mcan_tx_transfer_request (struct mcan_module *const module_inst, uint32_t trig_mask)
 Tx buffer add transfer request. More...
 
static enum status_code mcan_tx_cancel_request (struct mcan_module *const module_inst, uint32_t trig_mask)
 Set Tx Queue operation. More...
 
static uint32_t mcan_tx_get_transmission_status (struct mcan_module *const module_inst)
 Get Tx transmission status. More...
 
static uint32_t mcan_tx_get_cancellation_status (struct mcan_module *const module_inst)
 Get Tx cancellation status. More...
 
static uint32_t mcan_tx_get_event_fifo_status (struct mcan_module *const module_inst)
 Get Tx event FIFO status. More...
 
static void mcan_tx_event_fifo_acknowledge (struct mcan_module *const module_inst, uint32_t index)
 Set Tx Queue operation. More...
 
static void mcan_get_tx_buffer_element_defaults (struct mcan_tx_element *tx_element)
 Get the default transfer buffer element. More...
 
enum status_code mcan_set_tx_buffer_element (struct mcan_module *const module_inst, struct mcan_tx_element *tx_element, uint32_t index)
 set dedicated transmit buffer element . More...
 
enum status_code mcan_get_tx_event_fifo_element (struct mcan_module *const module_inst, struct mcan_tx_event_element *tx_event_element, uint32_t index)
 set FIFO transmit buffer element . More...
 
static void mcan_enable_interrupt (struct mcan_module *const module_inst, const enum mcan_interrupt_source source)
 Enable MCAN interrupt. More...
 
static void mcan_disable_interrupt (struct mcan_module *const module_inst, const enum mcan_interrupt_source source)
 Disable MCAN interrupt. More...
 
static uint32_t mcan_read_interrupt_status (struct mcan_module *const module_inst)
 Get MCAN interrupt status. More...
 
static void mcan_clear_interrupt_status (struct mcan_module *const module_inst, const enum mcan_interrupt_source source)
 Clear MCAN interrupt status. More...
 

Can module interrupt source.

Enum for the interrupt source.

Enumerator
MCAN_RX_FIFO_0_NEW_MESSAGE 

Rx FIFO 0 New Message Interrupt Enable.

MCAN_RX_FIFO_0_WATERMARK 

Rx FIFO 0 Watermark Reached Interrupt Enable.

MCAN_RX_FIFO_0_FULL 

Rx FIFO 0 Full Interrupt Enable.

MCAN_RX_FIFO_0_LOST_MESSAGE 

Rx FIFO 0 Message Lost Interrupt Enable.

MCAN_RX_FIFO_1_NEW_MESSAGE 

Rx FIFO 1 New Message Interrupt Enable.

MCAN_RX_FIFO_1_WATERMARK 

Rx FIFO 1 Watermark Reached Interrupt Enable.

MCAN_RX_FIFO_1_FULL 

Rx FIFO 1 Full Interrupt Enable.

MCAN_RX_FIFO_1_MESSAGE_LOST 

Rx FIFO 1 Message Lost Interrupt Enable.

MCAN_RX_HIGH_PRIORITY_MESSAGE 

High Priority Message Interrupt Enable.

MCAN_TIMESTAMP_COMPLETE 

Transmission Completed Interrupt Enable.

MCAN_TX_CANCELLATION_FINISH 

Transmission Cancellation Finished Interrupt Enable.

MCAN_TX_FIFO_EMPTY 

Tx FIFO Empty Interrupt Enable.

MCAN_TX_EVENT_FIFO_NEW_ENTRY 

Tx Event FIFO New Entry Interrupt Enable.

MCAN_TX_EVENT_FIFO_WATERMARK 

Tx Event FIFO Watermark Reached Interrupt Enable.

MCAN_TX_EVENT_FIFO_FULL 

Tx Event FIFO Full Interrupt Enable.

MCAN_TX_EVENT_FIFO_ELEMENT_LOST 

Tx Event FIFO Element Lost Interrupt Enable.

MCAN_TIMESTAMP_WRAPAROUND 

Timestamp Wraparound Interrupt Enable.

MCAN_MESSAGE_RAM_ACCESS_FAILURE 

Message RAM Access Failure Interrupt Enable.

MCAN_TIMEOUT_OCCURRED 

Timeout Occurred Interrupt Enable.

MCAN_RX_BUFFER_NEW_MESSAGE 

Message stored to Dedicated Rx Buffer Interrupt Enable.

MCAN_ERROR_LOGGING_OVERFLOW 

Error Logging Overflow Interrupt Enable.

MCAN_ERROR_PASSIVE 

Error Passive Interrupt Enable.

MCAN_WARNING_STATUS 

Warning Status Interrupt Enable.

MCAN_BUS_OFF 

Bus_Off Status Interrupt Enable.

MCAN_WATCHDOG 

Watchdog Interrupt Enable.

MCAN_CRC_ERROR 

CRC Error Interrupt Enable.

MCAN_BIT_ERROR 

Bit Error Interrupt Enable.

MCAN_ACKNOWLEDGE_ERROR 

Acknowledge Error Interrupt Enable .

MCAN_FORMAT_ERROR 

Format Error Interrupt Enable.

MCAN_STUFF_ERROR 

Stuff Error Interrupt Enable.

Can nonmatching frames action.

Enumerator
MCAN_NONMATCHING_FRAMES_FIFO_0 

Accept in Rx FIFO 0.

MCAN_NONMATCHING_FRAMES_FIFO_1 

Accept in Rx FIFO 1.

MCAN_NONMATCHING_FRAMES_REJECT 

Reject.

Can time out modes.

Enumerator
MCAN_TIMEOUT_CONTINUES 

Continuous operation.

MCAN_TIMEOUT_TX_EVEN_FIFO 

Timeout controlled by TX Event FIFO.

MCAN_TIMEOUT_RX_FIFO_0 

Timeout controlled by Rx FIFO 0.

MCAN_TIMEOUT_RX_FIFO_1 

Timeout controlled by Rx FIFO 1.

static void mcan_clear_interrupt_status ( struct mcan_module *const  module_inst,
const enum mcan_interrupt_source  source 
)
inlinestatic

Clear MCAN interrupt status.

Parameters
[in]module_instPointer to the MCAN software instance struct
[in]sourceInterrupt source type
Returns
Bit mask of interrupt status value.
void mcan_disable_bus_monitor_mode ( struct mcan_module *const  module_inst)

disable bus monitor mode of mcan module.

Parameters
module_instMCAN instance
void mcan_disable_fd_mode ( struct mcan_module *const  module_inst)

disable fd mode of mcan module.

Parameters
module_instMCAN instance
static void mcan_disable_interrupt ( struct mcan_module *const  module_inst,
const enum mcan_interrupt_source  source 
)
inlinestatic

Disable MCAN interrupt.

Parameters
[in]module_instPointer to the MCAN software instance struct
[in]sourceInterrupt source type
void mcan_disable_restricted_operation_mode ( struct mcan_module *const  module_inst)

disable restricted mode of mcan module.

Parameters
module_instMCAN instance
void mcan_disable_sleep_mode ( struct mcan_module *const  module_inst)

disable sleep mode of mcan module.

Parameters
module_instMCAN instance

References _mcan_enable_peripheral_clock().

void mcan_disable_test_mode ( struct mcan_module *const  module_inst)

disable test mode of mcan module.

Parameters
module_instMCAN instance
void mcan_enable_bus_monitor_mode ( struct mcan_module *const  module_inst)

enable bus monitor mode of mcan module.

Parameters
module_instMCAN instance
void mcan_enable_fd_mode ( struct mcan_module *const  module_inst)

switch mcan module into fd mode.

Parameters
module_instMCAN instance
static void mcan_enable_interrupt ( struct mcan_module *const  module_inst,
const enum mcan_interrupt_source  source 
)
inlinestatic

Enable MCAN interrupt.

Parameters
[in]module_instPointer to the MCAN software instance struct
[in]sourceInterrupt source type
void mcan_enable_restricted_operation_mode ( struct mcan_module *const  module_inst)

enable restricted mode of mcan module.

Parameters
module_instMCAN instance
void mcan_enable_sleep_mode ( struct mcan_module *const  module_inst)

enable sleep mode of mcan module.

Parameters
module_instMCAN instance
void mcan_enable_test_mode ( struct mcan_module *const  module_inst)

enable test mode of mcan module.

Parameters
module_instMCAN instance
void mcan_fd_set_baudrate ( Mcan *  hw,
uint32_t  baudrate 
)

Set MCAN_FD baudrate.

Parameters
[in]hwPointer to the MCAN_FD module instance
[in]baudrateMCAN_FD baudrate

References genclk_get_frequency_hz(), and PMC_PCK_5.

static void mcan_get_config_defaults ( struct mcan_config *const  config)
inlinestatic

Initializes an MCAN configuration structure to defaults.

Initializes a given MCAN configuration struct to a set of known default values. This function should be called on any new instance of the configuration struct before being modified by the user application.

The default configuration is as follows:

  • Not run in standby mode
  • Disable Watchdog
  • Transmit pause enabled
  • Edge filtering during bus integration enabled
  • Protocol exception handling enabled
  • Automatic retransmission enabled
  • Clock stop request disabled
  • Clock stop acknowledge disabled
  • Timestamp Counter Prescaler 1
  • Timeout Period with 0xFFFF
  • Timeout Mode: Continuous operation
  • Disable Timeout
  • Transmitter Delay Compensation Offset is 0
  • Transmitter Delay Compensation Filter Window Length is 0
  • Reject nonmatching standard frames
  • Reject nonmatching extended frames
  • Reject remote standard frames
  • Reject remote extended frames
  • Extended ID Mask is 0x1FFFFFFF
  • Rx FIFO 0 Operation Mode: overwrite
  • Disable Rx FIFO 0 Watermark
  • Rx FIFO 1 Operation Mode: overwrite
  • Disable Rx FIFO 1 Watermark
  • Tx FIFO/Queue Mode: FIFO
  • Disable Tx Event FIFO Watermark
Parameters
[out]configPointer to configuration struct to initialize to default values

References Assert, mcan_config::automatic_retransmission, mcan_config::clock_stop_acknowledge, mcan_config::clock_stop_request, mcan_config::delay_compensation_offset, mcan_config::edge_filtering, mcan_config::extended_id_mask, MCAN_NONMATCHING_FRAMES_REJECT, MCAN_TIMEOUT_CONTINUES, mcan_config::nonmatching_frames_action_extended, mcan_config::nonmatching_frames_action_standard, mcan_config::protocol_exception_handling, mcan_config::remote_frames_extended_reject, mcan_config::remote_frames_standard_reject, mcan_config::run_in_standby, mcan_config::rx_fifo_0_overwrite, mcan_config::rx_fifo_0_watermark, mcan_config::rx_fifo_1_overwrite, mcan_config::rx_fifo_1_watermark, mcan_config::tdc_enable, mcan_config::timeout_enable, mcan_config::timeout_mode, mcan_config::timeout_period, mcan_config::timestamp_prescaler, mcan_config::transmit_pause, mcan_config::tx_event_fifo_watermark, mcan_config::tx_queue_mode, and mcan_config::watchdog_configuration.

static void mcan_get_extended_message_filter_element_default ( struct mcan_extended_message_filter_element et_filter)
inlinestatic

Get the extended message filter default value.

The default configuration is as follows:

  • Classic filter: SFID1 = filter, SFID2 = mask
  • Store in Rx FIFO 1 if filter matches
  • SFID2 = 0x1FFFFFFFul
  • SFID1 = 0x0ul
Parameters
[out]et_filterPointer to extended filter element struct to initialize to default values

References mcan_extended_message_filter_element::F0, mcan_extended_message_filter_element::F1, MCAN_EXTENDED_MESSAGE_FILTER_ELEMENT_F0_EFEC, MCAN_EXTENDED_MESSAGE_FILTER_ELEMENT_F0_EFEC_STF1M_Val, MCAN_EXTENDED_MESSAGE_FILTER_ELEMENT_F0_EFID1, MCAN_EXTENDED_MESSAGE_FILTER_ELEMENT_F1_EFID2_Msk, MCAN_EXTENDED_MESSAGE_FILTER_ELEMENT_F1_EFT_CLASSIC, MCAN_EXTENDED_MESSAGE_FILTER_ELEMENT_F0_Type::reg, and MCAN_EXTENDED_MESSAGE_FILTER_ELEMENT_F1_Type::reg.

enum status_code mcan_get_rx_buffer_element ( struct mcan_module *const  module_inst,
struct mcan_rx_element_buffer rx_element,
uint32_t  index 
)

get dedicated rx buffer element .

Parameters
module_instMCAN instance
rx_elementstructure of element
indexCAN messages memory index for receiving CAN ID
Returns
status code.

References ERR_INVALID_ARG, mcan0_rx_buffer, mcan1_rx_buffer, and STATUS_OK.

enum status_code mcan_get_rx_fifo_0_element ( struct mcan_module *const  module_inst,
struct mcan_rx_element_fifo_0 rx_element,
uint32_t  index 
)

get FIFO rx buffer element .

Parameters
module_instMCAN instance
rx_elementstructure of element
indexCAN messages memory index for receiving CAN ID
Returns
status code.

References ERR_INVALID_ARG, mcan0_rx_fifo_0, mcan1_rx_fifo_0, and STATUS_OK.

enum status_code mcan_get_rx_fifo_1_element ( struct mcan_module *const  module_inst,
struct mcan_rx_element_fifo_1 rx_element,
uint32_t  index 
)

get FIFO rx buffer element .

Parameters
module_instMCAN instance
rx_elementstructure of element
indexCAN messages memory index for receiving CAN ID
Returns
status code.

References ERR_INVALID_ARG, mcan0_rx_fifo_1, mcan1_rx_fifo_1, and STATUS_OK.

static void mcan_get_standard_message_filter_element_default ( struct mcan_standard_message_filter_element sd_filter)
inlinestatic

Get the standard message filter default value.

The default configuration is as follows:

  • Classic filter: SFID1 = filter, SFID2 = mask
  • Store in Rx FIFO 0 if filter matches
  • SFID2 = 0x7FFul
  • SFID1 = 0x0ul
Parameters
[out]sd_filterPointer to standard filter element struct to initialize to default values

References MCAN_STANDARD_MESSAGE_FILTER_ELEMENT_S0_SFEC, MCAN_STANDARD_MESSAGE_FILTER_ELEMENT_S0_SFEC_STF0M_Val, MCAN_STANDARD_MESSAGE_FILTER_ELEMENT_S0_SFID1, MCAN_STANDARD_MESSAGE_FILTER_ELEMENT_S0_SFID2_Msk, MCAN_STANDARD_MESSAGE_FILTER_ELEMENT_S0_SFT_CLASSIC, MCAN_STANDARD_MESSAGE_FILTER_ELEMENT_S0_Type::reg, and mcan_standard_message_filter_element::S0.

static void mcan_get_tx_buffer_element_defaults ( struct mcan_tx_element tx_element)
inlinestatic

Get the default transfer buffer element.

The default configuration is as follows:

  • 11-bit standard identifier
  • Transmit data frame
  • ID = 0x0ul
  • Store Tx events
  • Frame transmitted in Classic MCAN format
  • Data Length Code is 8
Parameters
[out]tx_elementPointer to transfer element struct to initialize to default values

References MCAN_TX_ELEMENT_T1_DLC, MCAN_TX_ELEMENT_T1_DLC_DATA8_Val, MCAN_TX_ELEMENT_T1_EFC, MCAN_TX_ELEMENT_T0_Type::reg, MCAN_TX_ELEMENT_T1_Type::reg, mcan_tx_element::T0, and mcan_tx_element::T1.

enum status_code mcan_get_tx_event_fifo_element ( struct mcan_module *const  module_inst,
struct mcan_tx_event_element tx_event_element,
uint32_t  index 
)

set FIFO transmit buffer element .

Parameters
module_instMCAN instance
tx_elementstructure of element
indexCAN messages memory index for transmitting CAN ID
Returns
status code.

References mcan_tx_event_element::E0, mcan_tx_event_element::E1, ERR_INVALID_ARG, mcan0_tx_event_fifo, mcan1_tx_event_fifo, MCAN_TX_EVENT_ELEMENT_E0_Type::reg, MCAN_TX_EVENT_ELEMENT_E1_Type::reg, and STATUS_OK.

void mcan_init ( struct mcan_module *const  module_inst,
Mcan *  hw,
struct mcan_config config 
)

initialize can module.

Parameters
module_instMCAN instance
hwBase address of MCAN.
configdefault configuration .

References _mcan_enable_peripheral_clock(), _mcan_message_memory_init(), _mcan_set_configuration(), Assert, pmc_disable_pck(), pmc_enable_pck(), PMC_PCK_5, and pmc_switch_pck_to_pllack().

static uint32_t mcan_read_error_count ( struct mcan_module *const  module_inst)
inlinestatic

Can read error count.

Parameters
[in]module_instPointer to the MCAN software instance struct
Returns
Error count value.
static uint32_t mcan_read_high_priority_message_status ( struct mcan_module *const  module_inst)
inlinestatic

Read high priority message status.

Parameters
[in]module_instPointer to the MCAN software instance struct
Returns
High priority message status value.
static uint32_t mcan_read_interrupt_status ( struct mcan_module *const  module_inst)
inlinestatic

Get MCAN interrupt status.

Parameters
[in]module_instPointer to the MCAN software instance struct
static uint32_t mcan_read_protocal_status ( struct mcan_module *const  module_inst)
inlinestatic

Can read protocol status.

Parameters
[in]module_instPointer to the MCAN software instance struct
Returns
protocol status value.
static uint16_t mcan_read_timeout_count_value ( struct mcan_module *const  module_inst)
inlinestatic

Can read timeout count value.

Parameters
[in]module_instPointer to the MCAN software instance struct
Returns
Timeout count value.
static uint16_t mcan_read_timestamp_count_value ( struct mcan_module *const  module_inst)
inlinestatic

Can read timestamp count value.

Parameters
[in]module_instPointer to the MCAN software instance struct
Returns
Timestamp count value.
static void mcan_rx_clear_buffer_status ( struct mcan_module *const  module_inst,
uint32_t  index 
)
inlinestatic

Clear Rx buffer status.

Parameters
[in]module_instPointer to the MCAN software instance struct
[in]indexIndex offset in Rx buffer
static void mcan_rx_fifo_acknowledge ( struct mcan_module *const  module_inst,
bool  fifo_number,
uint32_t  index 
)
inlinestatic

Set Rx acknowledge.

Parameters
[in]module_instPointer to the MCAN software instance struct
[in]fifo_numberRx FIFO 0 or 1
[in]indexIndex offset in FIFO
static bool mcan_rx_get_buffer_status ( struct mcan_module *const  module_inst,
uint32_t  index 
)
inlinestatic

Get Rx buffer status.

Parameters
[in]module_instPointer to the MCAN software instance struct
[in]indexIndex offset in Rx buffer
Returns
Rx buffer status value.
Return values
trueRx Buffer updated from new message.
falseRx Buffer not updated.
static uint32_t mcan_rx_get_fifo_status ( struct mcan_module *const  module_inst,
bool  fifo_number 
)
inlinestatic

Get Rx FIFO status.

Parameters
[in]module_instPointer to the MCAN software instance struct
[in]fifo_numberRx FIFO 0 or 1
Returns
Rx FIFO status value.
void mcan_set_baudrate ( Mcan *  hw,
uint32_t  baudrate 
)

Set MCAN baudrate.

Parameters
[in]hwPointer to the MCAN module instance
[in]baudrateMCAN baudrate

References genclk_get_frequency_hz(), and PMC_PCK_5.

enum status_code mcan_set_rx_extended_filter ( struct mcan_module *const  module_inst,
struct mcan_extended_message_filter_element et_filter,
uint32_t  index 
)

set extended receive CAN ID.

Parameters
module_instMCAN instance
sd_filterstructure of extended CAN ID
indexCAN messages memory index for different CAN ID
Returns
status code.

References ERR_INVALID_ARG, mcan_extended_message_filter_element::F0, mcan_extended_message_filter_element::F1, mcan0_rx_extended_filter, mcan1_rx_extended_filter, MCAN_EXTENDED_MESSAGE_FILTER_ELEMENT_F0_Type::reg, MCAN_EXTENDED_MESSAGE_FILTER_ELEMENT_F1_Type::reg, and STATUS_OK.

enum status_code mcan_set_rx_standard_filter ( struct mcan_module *const  module_inst,
struct mcan_standard_message_filter_element sd_filter,
uint32_t  index 
)

set standard receive CAN ID.

Parameters
module_instMCAN instance
sd_filterstructure of CAN ID
indexCAN messages memory index for different CAN ID
Returns
status code.

References ERR_INVALID_ARG, mcan0_rx_standard_filter, mcan1_rx_standard_filter, MCAN_STANDARD_MESSAGE_FILTER_ELEMENT_S0_Type::reg, mcan_standard_message_filter_element::S0, and STATUS_OK.

enum status_code mcan_set_tx_buffer_element ( struct mcan_module *const  module_inst,
struct mcan_tx_element tx_element,
uint32_t  index 
)

set dedicated transmit buffer element .

Parameters
module_instMCAN instance
tx_elementstructure of element
indexCAN messages memory index for transmitting CAN ID
Returns
status code.

References mcan_tx_element::data, ERR_INVALID_ARG, mcan0_tx_buffer, mcan1_tx_buffer, MCAN_TX_ELEMENT_T0_Type::reg, MCAN_TX_ELEMENT_T1_Type::reg, STATUS_OK, mcan_tx_element::T0, and mcan_tx_element::T1.

void mcan_start ( struct mcan_module *const  module_inst)

start can module after initialization.

Parameters
module_instMCAN instance
void mcan_stop ( struct mcan_module *const  module_inst)

stop mcan module when bus off occurs

Parameters
module_instMCAN instance
static enum status_code mcan_tx_cancel_request ( struct mcan_module *const  module_inst,
uint32_t  trig_mask 
)
inlinestatic

Set Tx Queue operation.

Parameters
[in]module_instPointer to the MCAN software instance struct
[in]trig_maskThe mask value to cancel transfer buffer
Returns
Status of the result.
Return values
STATUS_OKSet the transfer request.
STATUS_BUSYThe module is in configuration.

References STATUS_ERR_BUSY, and STATUS_OK.

static void mcan_tx_event_fifo_acknowledge ( struct mcan_module *const  module_inst,
uint32_t  index 
)
inlinestatic

Set Tx Queue operation.

Parameters
[in]module_instPointer to the MCAN software instance struct
[in]indexIndex for the transfer FIFO
static uint32_t mcan_tx_get_cancellation_status ( struct mcan_module *const  module_inst)
inlinestatic

Get Tx cancellation status.

Parameters
[in]module_instPointer to the MCAN software instance struct
Returns
Bit mask of Tx cancellation status value.
static uint32_t mcan_tx_get_event_fifo_status ( struct mcan_module *const  module_inst)
inlinestatic

Get Tx event FIFO status.

Parameters
[in]module_instPointer to the MCAN software instance struct
Returns
Tx event FIFO status value.
static uint32_t mcan_tx_get_fifo_queue_status ( struct mcan_module *const  module_inst)
inlinestatic

Get Tx FIFO/Queue status.

Parameters
[in]module_instPointer to the MCAN software instance struct
Returns
Tx FIFO/Queue status value.
static uint32_t mcan_tx_get_pending_status ( struct mcan_module *const  module_inst)
inlinestatic

Get Tx buffer request pending status.

Parameters
[in]module_instPointer to the MCAN software instance struct
Returns
Bit mask of Tx buffer request pending status value.
static uint32_t mcan_tx_get_transmission_status ( struct mcan_module *const  module_inst)
inlinestatic

Get Tx transmission status.

Parameters
[in]module_instPointer to the MCAN software instance struct
Returns
Bit mask of Tx transmission status value.
static enum status_code mcan_tx_transfer_request ( struct mcan_module *const  module_inst,
uint32_t  trig_mask 
)
inlinestatic

Tx buffer add transfer request.

Parameters
[in]module_instPointer to the MCAN software instance struct
[in]trig_maskThe mask value to trigger transfer buffer
Returns
Status of the result.
Return values
STATUS_OKSet the transfer request.
STATUS_ERR_BUSYThe module is in configuration.

References ERR_BUSY, and STATUS_OK.