![]() |
S32 SDK
|
In order to be able to use the FlexCAN in your application, the first thing to do is initializing it with the desired configuration. This is done by calling the FLEXCAN_DRV_Init function. One of the arguments passed to this function is the configuration which will be used for the FlexCAN, specified by the flexcan_user_config_t structure.
The flexcan_user_config_t structure allows you to configure the following:
The bitrate is represented by a flexcan_time_segment_t structure, with the following fields:
Details about these fields can be found in the reference manual.
In order to use a mailbox for transmission/reception, it should be initialized using either FLEXCAN_DRV_ConfigRxMb, FLEXCAN_DRV_ConfigRxFifo or FLEXCAN_DRV_ConfigTxMb.
After having the mailbox configured, you can start sending/receiving using it by calling one of the following functions:
Data Structures | |
struct | flexcan_mb_handle_t |
Information needed for internal handling of a given MB. Implements : flexcan_mb_handle_t_Class. More... | |
struct | FlexCANState |
Internal driver state information. More... | |
struct | flexcan_data_info_t |
FlexCAN data info from user Implements : flexcan_data_info_t_Class. More... | |
struct | flexcan_user_config_t |
FlexCAN configuration. More... | |
Typedefs | |
typedef struct FlexCANState | flexcan_state_t |
Internal driver state information. More... | |
typedef void(* | flexcan_callback_t) (uint8_t instance, flexcan_event_type_t eventType, flexcan_state_t *flexcanState) |
FlexCAN Driver callback function type Implements : flexcan_callback_t_Class. More... | |
Functions | |
void | FLEXCAN_DRV_IRQHandler (uint8_t instance) |
Interrupt handler for a FlexCAN instance. More... | |
status_t | FLEXCAN_DRV_GetTransferStatus (uint32_t instance, uint8_t mb_idx) |
Returns whether the previous FLEXCAN transfer has finished. More... | |
void | FLEXCAN_DRV_InstallEventCallback (uint8_t instance, flexcan_callback_t callback, void *callbackParam) |
Installs a callback function for the IRQ handler. More... | |
Variables | |
CAN_Type *const | g_flexcanBase [CAN_INSTANCE_COUNT] |
Table of base addresses for FlexCAN instances. More... | |
const IRQn_Type | g_flexcanRxWarningIrqId [CAN_INSTANCE_COUNT] |
Table to save RX Warning IRQ numbers for FlexCAN instances. More... | |
const IRQn_Type | g_flexcanTxWarningIrqId [CAN_INSTANCE_COUNT] |
Table to save TX Warning IRQ numbers for FlexCAN instances. More... | |
const IRQn_Type | g_flexcanWakeUpIrqId [CAN_INSTANCE_COUNT] |
Table to save wakeup IRQ numbers for FlexCAN instances. More... | |
const IRQn_Type | g_flexcanErrorIrqId [CAN_INSTANCE_COUNT] |
Table to save error IRQ numbers for FlexCAN instances. More... | |
const IRQn_Type | g_flexcanBusOffIrqId [CAN_INSTANCE_COUNT] |
Table to save Bus off IRQ numbers for FlexCAN instances. More... | |
const IRQn_Type | g_flexcanOredMessageBufferIrqId [CAN_INSTANCE_COUNT][FEATURE_CAN_MB_IRQS_MAX_COUNT] |
Table to save message buffer IRQ numbers for FlexCAN instances. More... | |
Bit rate | |
void | FLEXCAN_DRV_SetBitrate (uint8_t instance, const flexcan_time_segment_t *bitrate) |
Sets the FlexCAN bit rate. More... | |
Set baud rate for BRS FD | |
void | FLEXCAN_DRV_SetBitrateCbt (uint8_t instance, const flexcan_time_segment_t *bitrate) |
Sets the FlexCAN bit rate for FD BRS. More... | |
void | FLEXCAN_DRV_GetBitrate (uint8_t instance, flexcan_time_segment_t *bitrate) |
Gets the FlexCAN bit rate. More... | |
Global mask | |
void | FLEXCAN_DRV_SetRxMaskType (uint8_t instance, flexcan_rx_mask_type_t type) |
Sets the RX masking type. More... | |
void | FLEXCAN_DRV_SetRxFifoGlobalMask (uint8_t instance, flexcan_msgbuff_id_type_t id_type, uint32_t mask) |
Sets the FlexCAN RX FIFO global standard or extended mask. More... | |
void | FLEXCAN_DRV_SetRxMbGlobalMask (uint8_t instance, flexcan_msgbuff_id_type_t id_type, uint32_t mask) |
Sets the FlexCAN RX MB global standard or extended mask. More... | |
status_t | FLEXCAN_DRV_SetRxIndividualMask (uint8_t instance, flexcan_msgbuff_id_type_t id_type, uint8_t mb_idx, uint32_t mask) |
Sets the FlexCAN RX individual standard or extended mask. More... | |
Initialization and Shutdown | |
status_t | FLEXCAN_DRV_Init (uint32_t instance, flexcan_state_t *state, const flexcan_user_config_t *data) |
Initializes the FlexCAN peripheral. More... | |
status_t | FLEXCAN_DRV_Deinit (uint8_t instance) |
Shuts down a FlexCAN instance. More... | |
Send configuration | |
status_t | FLEXCAN_DRV_ConfigTxMb (uint8_t instance, uint8_t mb_idx, const flexcan_data_info_t *tx_info, uint32_t msg_id) |
FlexCAN transmit message buffer field configuration. More... | |
status_t | FLEXCAN_DRV_SendBlocking (uint8_t instance, uint8_t mb_idx, const flexcan_data_info_t *tx_info, uint32_t msg_id, const uint8_t *mb_data, uint32_t timeout_ms) |
Sends a CAN frame using the specified message buffer, in a blocking manner. More... | |
status_t | FLEXCAN_DRV_Send (uint8_t instance, uint8_t mb_idx, const flexcan_data_info_t *tx_info, uint32_t msg_id, const uint8_t *mb_data) |
Sends a CAN frame using the specified message buffer. More... | |
status_t | FLEXCAN_DRV_AbortTransfer (uint32_t instance, uint8_t mb_idx) |
Ends a non-blocking FlexCAN transfer early. More... | |
Receive configuration | |
status_t | FLEXCAN_DRV_ConfigRxMb (uint8_t instance, uint8_t mb_idx, const flexcan_data_info_t *rx_info, uint32_t msg_id) |
FlexCAN receive message buffer field configuration. More... | |
void | FLEXCAN_DRV_ConfigRxFifo (uint8_t instance, flexcan_rx_fifo_id_element_format_t id_format, const flexcan_id_table_t *id_filter_table) |
FlexCAN RX FIFO field configuration. More... | |
status_t | FLEXCAN_DRV_ReceiveBlocking (uint8_t instance, uint8_t mb_idx, flexcan_msgbuff_t *data, uint32_t timeout_ms) |
Receives a CAN frame using the specified message buffer, in a blocking manner. More... | |
status_t | FLEXCAN_DRV_Receive (uint8_t instance, uint8_t mb_idx, flexcan_msgbuff_t *data) |
Receives a CAN frame using the specified message buffer. More... | |
status_t | FLEXCAN_DRV_RxFifoBlocking (uint8_t instance, flexcan_msgbuff_t *data, uint32_t timeout_ms) |
Receives a CAN frame using the message FIFO, in a blocking manner. More... | |
status_t | FLEXCAN_DRV_RxFifo (uint8_t instance, flexcan_msgbuff_t *data) |
Receives a CAN frame using the message FIFO. More... | |
typedef void(* flexcan_callback_t) (uint8_t instance, flexcan_event_type_t eventType, flexcan_state_t *flexcanState) |
FlexCAN Driver callback function type Implements : flexcan_callback_t_Class.
Definition at line 190 of file flexcan_driver.h.
typedef struct FlexCANState flexcan_state_t |
Internal driver state information.
enum flexcan_event_type_t |
The type of the event which occured when the callback was invoked. Implements : flexcan_event_type_t_Class.
Definition at line 81 of file flexcan_driver.h.
enum flexcan_mb_state_t |
The state of a given MB (idle/Rx busy/Tx busy). Implements : flexcan_mb_state_t_Class.
Enumerator | |
---|---|
FLEXCAN_MB_IDLE |
The MB is not used by any transfer. |
FLEXCAN_MB_RX_BUSY |
The MB is used for a reception. |
FLEXCAN_MB_TX_BUSY |
The MB is used for a transmission. |
Definition at line 95 of file flexcan_driver.h.
FlexCAN Rx FIFO filters number Implements : flexcan_rx_fifo_id_filter_num_t_Class.
Definition at line 148 of file flexcan_driver.h.
The type of the RxFIFO transfer (interrupts/DMA). Implements : flexcan_rxfifo_transfer_type_t_Class.
Enumerator | |
---|---|
FLEXCAN_RXFIFO_USING_INTERRUPTS |
Use interrupts for RxFIFO. |
FLEXCAN_RXFIFO_USING_DMA |
Use DMA for RxFIFO. |
Definition at line 73 of file flexcan_driver.h.
status_t FLEXCAN_DRV_AbortTransfer | ( | uint32_t | instance, |
uint8_t | mb_idx | ||
) |
Ends a non-blocking FlexCAN transfer early.
instance | A FlexCAN instance number |
mb_idx | The index of the message buffer |
Definition at line 990 of file flexcan_driver.c.
void FLEXCAN_DRV_ConfigRxFifo | ( | uint8_t | instance, |
flexcan_rx_fifo_id_element_format_t | id_format, | ||
const flexcan_id_table_t * | id_filter_table | ||
) |
FlexCAN RX FIFO field configuration.
instance | A FlexCAN instance number |
id_format | The format of the RX FIFO ID Filter Table Elements |
id_filter_table | The ID filter table elements which contain RTR bit, IDE bit, and RX message ID |
Definition at line 612 of file flexcan_driver.c.
status_t FLEXCAN_DRV_ConfigRxMb | ( | uint8_t | instance, |
uint8_t | mb_idx, | ||
const flexcan_data_info_t * | rx_info, | ||
uint32_t | msg_id | ||
) |
FlexCAN receive message buffer field configuration.
instance | A FlexCAN instance number |
mb_idx | Index of the message buffer |
rx_info | Data info |
msg_id | ID of the message to transmit |
Definition at line 566 of file flexcan_driver.c.
status_t FLEXCAN_DRV_ConfigTxMb | ( | uint8_t | instance, |
uint8_t | mb_idx, | ||
const flexcan_data_info_t * | tx_info, | ||
uint32_t | msg_id | ||
) |
FlexCAN transmit message buffer field configuration.
instance | A FlexCAN instance number |
mb_idx | Index of the message buffer |
tx_info | Data info |
msg_id | ID of the message to transmit |
Definition at line 439 of file flexcan_driver.c.
status_t FLEXCAN_DRV_Deinit | ( | uint8_t | instance | ) |
Shuts down a FlexCAN instance.
instance | A FlexCAN instance number |
Definition at line 754 of file flexcan_driver.c.
void FLEXCAN_DRV_GetBitrate | ( | uint8_t | instance, |
flexcan_time_segment_t * | bitrate | ||
) |
Gets the FlexCAN bit rate.
instance | A FlexCAN instance number |
bitrate | A pointer to a variable for returning the FlexCAN bit rate settings |
Definition at line 159 of file flexcan_driver.c.
status_t FLEXCAN_DRV_GetTransferStatus | ( | uint32_t | instance, |
uint8_t | mb_idx | ||
) |
Returns whether the previous FLEXCAN transfer has finished.
When performing an async transfer, call this function to ascertain the state of the current transfer: in progress (or busy) or complete (success).
instance | The FLEXCAN module base address. |
mb_idx | The index of the message buffer. |
Definition at line 961 of file flexcan_driver.c.
status_t FLEXCAN_DRV_Init | ( | uint32_t | instance, |
flexcan_state_t * | state, | ||
const flexcan_user_config_t * | data | ||
) |
Initializes the FlexCAN peripheral.
This function initializes
instance | A FlexCAN instance number |
state | Pointer to the FlexCAN driver state structure. |
data | The FlexCAN platform data |
Definition at line 295 of file flexcan_driver.c.
void FLEXCAN_DRV_InstallEventCallback | ( | uint8_t | instance, |
flexcan_callback_t | callback, | ||
void * | callbackParam | ||
) |
Installs a callback function for the IRQ handler.
instance | The FLEXCAN module base address. |
callback | The callback function. |
callbackParam | User parameter passed to the callback function through the state parameter. |
Definition at line 1307 of file flexcan_driver.c.
void FLEXCAN_DRV_IRQHandler | ( | uint8_t | instance | ) |
Interrupt handler for a FlexCAN instance.
instance | The FlexCAN instance number. |
Definition at line 801 of file flexcan_driver.c.
status_t FLEXCAN_DRV_Receive | ( | uint8_t | instance, |
uint8_t | mb_idx, | ||
flexcan_msgbuff_t * | data | ||
) |
Receives a CAN frame using the specified message buffer.
This function receives a CAN frame using a configured message buffer. The function returns immediately. If a callback is installed, it will be invoked after the frame was received and read into the specified buffer.
instance | A FlexCAN instance number |
mb_idx | Index of the message buffer |
data | The FlexCAN receive message buffer data. |
Definition at line 679 of file flexcan_driver.c.
status_t FLEXCAN_DRV_ReceiveBlocking | ( | uint8_t | instance, |
uint8_t | mb_idx, | ||
flexcan_msgbuff_t * | data, | ||
uint32_t | timeout_ms | ||
) |
Receives a CAN frame using the specified message buffer, in a blocking manner.
This function receives a CAN frame using a configured message buffer. The function blocks until either a frame was received, or the specified timeout expired.
instance | A FlexCAN instance number |
mb_idx | Index of the message buffer |
data | The FlexCAN receive message buffer data. |
timeout_ms | A timeout for the transfer in milliseconds. |
Definition at line 634 of file flexcan_driver.c.
status_t FLEXCAN_DRV_RxFifo | ( | uint8_t | instance, |
flexcan_msgbuff_t * | data | ||
) |
Receives a CAN frame using the message FIFO.
This function receives a CAN frame using the Rx FIFO. The function returns immediately. If a callback is installed, it will be invoked after the frame was received and read into the specified buffer.
instance | A FlexCAN instance number |
data | The FlexCAN receive message buffer data. |
Definition at line 733 of file flexcan_driver.c.
status_t FLEXCAN_DRV_RxFifoBlocking | ( | uint8_t | instance, |
flexcan_msgbuff_t * | data, | ||
uint32_t | timeout_ms | ||
) |
Receives a CAN frame using the message FIFO, in a blocking manner.
This function receives a CAN frame using the Rx FIFO. The function blocks until either a frame was received, or the specified timeout expired.
instance | A FlexCAN instance number |
data | The FlexCAN receive message buffer data. |
timeout_ms | A timeout for the transfer in milliseconds. |
Definition at line 702 of file flexcan_driver.c.
status_t FLEXCAN_DRV_Send | ( | uint8_t | instance, |
uint8_t | mb_idx, | ||
const flexcan_data_info_t * | tx_info, | ||
uint32_t | msg_id, | ||
const uint8_t * | mb_data | ||
) |
Sends a CAN frame using the specified message buffer.
This function sends a CAN frame using a configured message buffer. The function returns immediately. If a callback is installed, it will be invoked after the frame was sent.
instance | A FlexCAN instance number |
mb_idx | Index of the message buffer |
tx_info | Data info |
msg_id | ID of the message to transmit |
mb_data | Bytes of the FlexCAN message. |
Definition at line 527 of file flexcan_driver.c.
status_t FLEXCAN_DRV_SendBlocking | ( | uint8_t | instance, |
uint8_t | mb_idx, | ||
const flexcan_data_info_t * | tx_info, | ||
uint32_t | msg_id, | ||
const uint8_t * | mb_data, | ||
uint32_t | timeout_ms | ||
) |
Sends a CAN frame using the specified message buffer, in a blocking manner.
This function sends a CAN frame using a configured message buffer. The function blocks until either the frame was sent, or the specified timeout expired.
instance | A FlexCAN instance number |
mb_idx | Index of the message buffer |
tx_info | Data info |
msg_id | ID of the message to transmit |
mb_data | Bytes of the FlexCAN message |
timeout_ms | A timeout for the transfer in milliseconds. |
Definition at line 474 of file flexcan_driver.c.
void FLEXCAN_DRV_SetBitrate | ( | uint8_t | instance, |
const flexcan_time_segment_t * | bitrate | ||
) |
Sets the FlexCAN bit rate.
instance | A FlexCAN instance number |
bitrate | A pointer to the FlexCAN bit rate settings. |
Definition at line 124 of file flexcan_driver.c.
void FLEXCAN_DRV_SetBitrateCbt | ( | uint8_t | instance, |
const flexcan_time_segment_t * | bitrate | ||
) |
Sets the FlexCAN bit rate for FD BRS.
instance | A FlexCAN instance number |
bitrate | A pointer to the FlexCAN bit rate settings. |
Definition at line 142 of file flexcan_driver.c.
void FLEXCAN_DRV_SetRxFifoGlobalMask | ( | uint8_t | instance, |
flexcan_msgbuff_id_type_t | id_type, | ||
uint32_t | mask | ||
) |
Sets the FlexCAN RX FIFO global standard or extended mask.
instance | A FlexCAN instance number |
id_type | Standard ID or extended ID |
mask | Mask value |
Definition at line 192 of file flexcan_driver.c.
status_t FLEXCAN_DRV_SetRxIndividualMask | ( | uint8_t | instance, |
flexcan_msgbuff_id_type_t | id_type, | ||
uint8_t | mb_idx, | ||
uint32_t | mask | ||
) |
Sets the FlexCAN RX individual standard or extended mask.
instance | A FlexCAN instance number |
id_type | A standard ID or an extended ID |
mb_idx | Index of the message buffer |
mask | Mask value |
Definition at line 256 of file flexcan_driver.c.
void FLEXCAN_DRV_SetRxMaskType | ( | uint8_t | instance, |
flexcan_rx_mask_type_t | type | ||
) |
Sets the RX masking type.
instance | A FlexCAN instance number |
type | The FlexCAN RX mask type |
Definition at line 177 of file flexcan_driver.c.
void FLEXCAN_DRV_SetRxMbGlobalMask | ( | uint8_t | instance, |
flexcan_msgbuff_id_type_t | id_type, | ||
uint32_t | mask | ||
) |
Sets the FlexCAN RX MB global standard or extended mask.
instance | A FlexCAN instance number |
id_type | Standard ID or extended ID |
mask | Mask value |
Definition at line 224 of file flexcan_driver.c.
CAN_Type* const g_flexcanBase[CAN_INSTANCE_COUNT] |
Table of base addresses for FlexCAN instances.
Definition at line 49 of file flexcan_common.c.
const IRQn_Type g_flexcanBusOffIrqId[CAN_INSTANCE_COUNT] |
Table to save Bus off IRQ numbers for FlexCAN instances.
Definition at line 56 of file flexcan_common.c.
const IRQn_Type g_flexcanErrorIrqId[CAN_INSTANCE_COUNT] |
Table to save error IRQ numbers for FlexCAN instances.
Definition at line 55 of file flexcan_common.c.
const IRQn_Type g_flexcanOredMessageBufferIrqId[CAN_INSTANCE_COUNT][FEATURE_CAN_MB_IRQS_MAX_COUNT] |
Table to save message buffer IRQ numbers for FlexCAN instances.
Definition at line 58 of file flexcan_common.c.
const IRQn_Type g_flexcanRxWarningIrqId[CAN_INSTANCE_COUNT] |
Table to save RX Warning IRQ numbers for FlexCAN instances.
Definition at line 52 of file flexcan_common.c.
const IRQn_Type g_flexcanTxWarningIrqId[CAN_INSTANCE_COUNT] |
Table to save TX Warning IRQ numbers for FlexCAN instances.
Definition at line 53 of file flexcan_common.c.
const IRQn_Type g_flexcanWakeUpIrqId[CAN_INSTANCE_COUNT] |
Table to save wakeup IRQ numbers for FlexCAN instances.
Definition at line 54 of file flexcan_common.c.