flexcan_driver.c File Reference
#include "flexcan_hw_access.h"
#include "flexcan_irq.h"
#include "interrupt_manager.h"
#include "clock_manager.h"

Go to the source code of this file.

Macros

#define FLEXCAN_MB_HANDLE_RXFIFO   0U
 
#define FLEXCAN_NUM_TQ_MIN   8U
 
#define FLEXCAN_NUM_TQ_MAX   26U
 
#define FLEXCAN_PRESDIV_MAX   256U
 
#define FLEXCAN_PSEG1_MAX   8U
 
#define FLEXCAN_PSEG2_MIN   1U
 
#define FLEXCAN_PSEG2_MAX   8U
 
#define FLEXCAN_PROPSEG_MAX   8U
 
#define FLEXCAN_TSEG1_MIN   2U
 
#define FLEXCAN_TSEG1_MAX   17U
 
#define FLEXCAN_TSEG2_MIN   2U
 
#define FLEXCAN_TSEG2_MAX   9U
 
#define FLEXCAN_RJW_MAX   3U
 

Functions

static status_t FLEXCAN_StartSendData (uint8_t instance, uint8_t mb_idx, const flexcan_data_info_t *tx_info, uint32_t msg_id, const uint8_t *mb_data, bool isBlocking)
 
static status_t FLEXCAN_StartRxMessageBufferData (uint8_t instance, uint8_t mb_idx, flexcan_msgbuff_t *data, bool isBlocking)
 
static status_t FLEXCAN_StartRxMessageFifoData (uint8_t instance, flexcan_msgbuff_t *data, bool isBlocking)
 
static void FLEXCAN_CompleteTransfer (uint8_t instance, uint32_t mb_idx)
 
static void FLEXCAN_CompleteRxMessageFifoData (uint8_t instance)
 
static void FLEXCAN_CompleteRxFifoDataDMA (void *parameter, edma_chn_status_t status)
 
static void FLEXCAN_BitrateToTimeSeg (uint32_t bitrate, uint32_t clkFreq, flexcan_time_segment_t *timeSeg)
 
void FLEXCAN_DRV_SetBitrate (uint8_t instance, const flexcan_time_segment_t *bitrate)
 Sets the FlexCAN bit rate for standard frames or the arbitration phase of FD frames. More...
 
void FLEXCAN_DRV_SetBitrateCbt (uint8_t instance, const flexcan_time_segment_t *bitrate)
 Sets the FlexCAN bit rate for the data phase of FD frames (BRS enabled). More...
 
void FLEXCAN_DRV_GetBitrate (uint8_t instance, flexcan_time_segment_t *bitrate)
 Gets the FlexCAN bit rate for standard frames or the arbitration phase of FD frames. More...
 
void FLEXCAN_DRV_GetBitrateFD (uint8_t instance, flexcan_time_segment_t *bitrate)
 Gets the FlexCAN bit rate for the data phase of FD frames (BRS enabled). More...
 
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 mask (standard or extended). More...
 
void FLEXCAN_DRV_SetRxMbGlobalMask (uint8_t instance, flexcan_msgbuff_id_type_t id_type, uint32_t mask)
 Sets the FlexCAN Rx MB global mask (standard or extended). More...
 
void FLEXCAN_DRV_SetRxMb14Mask (uint8_t instance, flexcan_msgbuff_id_type_t id_type, uint32_t mask)
 Sets the FlexCAN Rx MB 14 mask (standard or extended). More...
 
void FLEXCAN_DRV_SetRxMb15Mask (uint8_t instance, flexcan_msgbuff_id_type_t id_type, uint32_t mask)
 Sets the FlexCAN Rx MB 15 mask (standard or extended). 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 mask (standard or extended). More...
 
status_t FLEXCAN_DRV_Init (uint8_t instance, flexcan_state_t *state, const flexcan_user_config_t *data)
 Initializes the FlexCAN peripheral. More...
 
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_ConfigRemoteResponseMb (uint8_t instance, uint8_t mb_idx, const flexcan_data_info_t *tx_info, uint32_t msg_id, const uint8_t *mb_data)
 Configures a transmit message buffer for remote frame response. 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_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...
 
status_t FLEXCAN_DRV_Deinit (uint8_t instance)
 Shuts down a FlexCAN instance. More...
 
void FLEXCAN_DRV_SetTDCOffset (uint8_t instance, bool enable, uint8_t offset)
 Enables/Disables the Transceiver Delay Compensation feature and sets the Transceiver Delay Compensation Offset (offset value to be added to the measured transceiver's loop delay in order to define the position of the delayed comparison point when bit rate switching is active). More...
 
uint8_t FLEXCAN_DRV_GetTDCValue (uint8_t instance)
 Gets the value of the Transceiver Delay Compensation. More...
 
bool FLEXCAN_DRV_GetTDCFail (uint8_t instance)
 Gets the value of the TDC Fail flag. More...
 
void FLEXCAN_DRV_ClearTDCFail (uint8_t instance)
 Clears the TDC Fail flag. More...
 
void FLEXCAN_IRQHandler (uint8_t instance)
 Interrupt handler for a FlexCAN instance. More...
 
void FLEXCAN_Error_IRQHandler (uint8_t instance)
 Error interrupt handler for a FlexCAN instance. More...
 
void FLEXCAN_WakeUpHandler (uint8_t instance)
 Wake up handler for a FlexCAN instance. More...
 
status_t FLEXCAN_DRV_GetTransferStatus (uint8_t instance, uint8_t mb_idx)
 Returns whether the previous FlexCAN transfer has finished. More...
 
uint32_t FLEXCAN_DRV_GetErrorStatus (uint8_t instance)
 Returns reported error conditions. More...
 
status_t FLEXCAN_DRV_AbortTransfer (uint8_t instance, uint8_t mb_idx)
 Ends a non-blocking FlexCAN transfer early. More...
 
void FLEXCAN_DRV_InstallEventCallback (uint8_t instance, flexcan_callback_t callback, void *callbackParam)
 Installs a callback function for the IRQ handler. More...
 
void FLEXCAN_DRV_InstallErrorCallback (uint8_t instance, flexcan_error_callback_t callback, void *callbackParam)
 Installs an error callback function for the IRQ handler and enables error interrupts. More...
 
void FLEXCAN_DRV_ConfigPN (uint8_t instance, bool enable, const flexcan_pn_config_t *pnConfig)
 Configures Pretended Networking settings. More...
 
void FLEXCAN_DRV_GetWMB (uint8_t instance, uint8_t wmbIndex, flexcan_msgbuff_t *wmb)
 Extracts one of the frames which triggered the wake up event. More...
 
void FLEXCAN_DRV_GetDefaultConfig (flexcan_user_config_t *config)
 Gets the default configuration structure. More...
 

Variables

static CAN_Type *const g_flexcanBase [] = { ((CAN_Type *) (0x40024000u) ) }
 
static const IRQn_Type g_flexcanWakeUpIrqId [] = { CAN0_ORed_Err_Wakeup_IRQn }
 
static const IRQn_Type g_flexcanErrorIrqId [] = { CAN0_ORed_Err_Wakeup_IRQn }
 
static const IRQn_Type g_flexcanBusOffIrqId [] = { CAN0_ORed_Err_Wakeup_IRQn }
 
static const IRQn_Type g_flexcanOredMessageBufferIrqId [(2U)][(1u)] = { { CAN0_ORed_0_31_MB_IRQn } , { CAN0_ORed_0_31_MB_IRQn } }
 
static flexcan_state_tg_flexcanStatePtr [(1u)] = { NULL }
 

Macro Definition Documentation

#define FLEXCAN_MB_HANDLE_RXFIFO   0U

Definition at line 74 of file flexcan_driver.c.

#define FLEXCAN_NUM_TQ_MAX   26U

Definition at line 78 of file flexcan_driver.c.

#define FLEXCAN_NUM_TQ_MIN   8U

Definition at line 77 of file flexcan_driver.c.

#define FLEXCAN_PRESDIV_MAX   256U

Definition at line 79 of file flexcan_driver.c.

#define FLEXCAN_PROPSEG_MAX   8U

Definition at line 83 of file flexcan_driver.c.

#define FLEXCAN_PSEG1_MAX   8U

Definition at line 80 of file flexcan_driver.c.

#define FLEXCAN_PSEG2_MAX   8U

Definition at line 82 of file flexcan_driver.c.

#define FLEXCAN_PSEG2_MIN   1U

Definition at line 81 of file flexcan_driver.c.

#define FLEXCAN_RJW_MAX   3U

Definition at line 88 of file flexcan_driver.c.

#define FLEXCAN_TSEG1_MAX   17U

Definition at line 85 of file flexcan_driver.c.

#define FLEXCAN_TSEG1_MIN   2U

Definition at line 84 of file flexcan_driver.c.

#define FLEXCAN_TSEG2_MAX   9U

Definition at line 87 of file flexcan_driver.c.

#define FLEXCAN_TSEG2_MIN   2U

Definition at line 86 of file flexcan_driver.c.

Function Documentation

static void FLEXCAN_BitrateToTimeSeg ( uint32_t  bitrate,
uint32_t  clkFreq,
flexcan_time_segment_t timeSeg 
)
static

Definition at line 1957 of file flexcan_driver.c.

static void FLEXCAN_CompleteRxFifoDataDMA ( void *  parameter,
edma_chn_status_t  status 
)
static

Definition at line 1730 of file flexcan_driver.c.

static void FLEXCAN_CompleteRxMessageFifoData ( uint8_t  instance)
static

Definition at line 1747 of file flexcan_driver.c.

static void FLEXCAN_CompleteTransfer ( uint8_t  instance,
uint32_t  mb_idx 
)
static

Definition at line 1703 of file flexcan_driver.c.

void FLEXCAN_Error_IRQHandler ( uint8_t  instance)

Error interrupt handler for a FlexCAN instance.

Parameters
instanceThe FlexCAN instance number.

Definition at line 1357 of file flexcan_driver.c.

void FLEXCAN_IRQHandler ( uint8_t  instance)

Interrupt handler for a FlexCAN instance.

Parameters
instanceThe FlexCAN instance number.

Definition at line 1186 of file flexcan_driver.c.

static status_t FLEXCAN_StartRxMessageBufferData ( uint8_t  instance,
uint8_t  mb_idx,
flexcan_msgbuff_t data,
bool  isBlocking 
)
static

Definition at line 1576 of file flexcan_driver.c.

static status_t FLEXCAN_StartRxMessageFifoData ( uint8_t  instance,
flexcan_msgbuff_t data,
bool  isBlocking 
)
static

Definition at line 1618 of file flexcan_driver.c.

static status_t FLEXCAN_StartSendData ( uint8_t  instance,
uint8_t  mb_idx,
const flexcan_data_info_t tx_info,
uint32_t  msg_id,
const uint8_t *  mb_data,
bool  isBlocking 
)
static

Definition at line 1516 of file flexcan_driver.c.

void FLEXCAN_WakeUpHandler ( uint8_t  instance)

Wake up handler for a FlexCAN instance.

Parameters
instanceThe FlexCAN instance number.

Definition at line 1387 of file flexcan_driver.c.

Variable Documentation

CAN_Type* const g_flexcanBase[] = { ((CAN_Type *) (0x40024000u) ) }
static

Definition at line 95 of file flexcan_driver.c.

const IRQn_Type g_flexcanBusOffIrqId[] = { CAN0_ORed_Err_Wakeup_IRQn }
static

Definition at line 102 of file flexcan_driver.c.

const IRQn_Type g_flexcanErrorIrqId[] = { CAN0_ORed_Err_Wakeup_IRQn }
static

Definition at line 101 of file flexcan_driver.c.

const IRQn_Type g_flexcanOredMessageBufferIrqId[(2U)][(1u)] = { { CAN0_ORed_0_31_MB_IRQn } , { CAN0_ORed_0_31_MB_IRQn } }
static

Definition at line 104 of file flexcan_driver.c.

flexcan_state_t* g_flexcanStatePtr[(1u)] = { NULL }
static

Definition at line 107 of file flexcan_driver.c.

const IRQn_Type g_flexcanWakeUpIrqId[] = { CAN0_ORed_Err_Wakeup_IRQn }
static

Definition at line 99 of file flexcan_driver.c.