10#define SDRV_FLEXCAN_H_
15#include "../source/flexcan/sdrv_flexcan_priv.h"
19#define FLEXCAN_HAS_DOZE_MODE_SUPPORT 1
21#define FLEXCAN_COPY_USE_BURST 1
23#define CORE_LITTLE_ENDIAN 1
27#define IDX_CONVERT(x) (((x) & 0xFCU) + 3U - ((x) & 3U))
29#define IDX_CONVERT(x) (x)
34#define STANDARD_DATA_ID 0U
35#define STANDARD_REMOTE_ID 2U
36#define EXTENDED_DATA_ID 1U
37#define EXTENDED_REMOTE_ID 3U
39#define MAKE_TYPE_A_FILTER(id, type) \
40 (((type) << 30) | ((id) << (((type)&1U) ? 1 : 19)))
42#define MAKE_TYPE_B_FILTER(id1, id2, type1, type2) \
43 (((type1) << 30) | ((id1) << (((type1)&1U) ? 16 : 19)) | ((type2) << 14) | \
44 ((id2) << (((type2)&1U) ? 0 : 3)))
46#define MAKE_TYPE_C_FILTER(id1, id2, id3, id4) \
47 (((id1)&0xFFU) | ((id2)&0xFFU) | ((id3)&0xFFU) | ((id4)&0xFFU))
49#define FlexCanRxFifoAcceptRemoteFrame 1UL
50#define FlexCanRxFifoAcceptExtFrame 1UL
125 uint8_t payload1[8U];
128 uint8_t payload2[8U];
374 volatile uint8_t
mbState[FLEXCAN_HAS_MESSAGE_BUFFER_MAX_NUMBER];
379#if FLEXCAN_HAS_DOZE_MODE_SUPPORT
425 void *reg_base, uint8_t irq_num,
621 uint8_t maskIdx, uint32_t mask);
634 bool tx_by_interrupt);
714 uint8_t padding_val);
770 uint8_t padding_val);
SemiDrive driver common header file.
@ SDRV_STATUS_GROUP_FLEXCAN
Definition: sdrv_common.h:34
@ SDRV_STATUS_OK
Definition: sdrv_common.h:72
#define SDRV_ERROR_STATUS(group, code)
Construct a status code value from a group and code number. All the error statuses are negetive numbe...
Definition: sdrv_common.h:17
int flexcan_irq_handler(uint32_t irq, void *arg)
FlexCAN IRQ handle function.
void(* flexcan_transfer_callback_t)(flexcan_handle_t *handle, flexcan_status_e status, uint32_t result, void *userData)
FlexCAN transfer callback function.
Definition: sdrv_flexcan.h:352
bool flexcan_is_mb_occupied(flexcan_handle_t *handle, uint8_t mbIdx)
check whether mb is occupied by fifo along with filter table.
flexcan_status_e flexcan_reset(flexcan_handle_t *handle)
Reset the FlexCAN Instance.
void flexcan_fd_set_timing_config(flexcan_handle_t *handle, const flexcan_timing_config_t *arbitrPhaseConfig, const flexcan_timing_config_t *dataPhaseConfig)
Setting FlexCAN FD protocol timing characteristic.
void flexcan_clear_err_status_flag(flexcan_handle_t *handle, uint32_t mask)
Clear all error interrupt status.
flexcan_frame_type
FlexCAN frame type.
Definition: sdrv_flexcan.h:93
@ FLEXCAN_FrameTypeData
Definition: sdrv_flexcan.h:94
@ FLEXCAN_FrameTypeRemote
Definition: sdrv_flexcan.h:95
flexcan_fd_data_size
Definition: sdrv_flexcan.h:60
@ CAN_FD_32BYTES_PER_MB
Definition: sdrv_flexcan.h:63
@ CAN_FD_16BYTES_PER_MB
Definition: sdrv_flexcan.h:62
@ CAN_FD_8BYTES_PER_MB
Definition: sdrv_flexcan.h:61
@ CAN_FD_64BYTES_PER_MB
Definition: sdrv_flexcan.h:64
struct flexcan_rx_fifo_filter_table flexcan_rx_fifo_filter_table_t
flexcan_rx_fifo_priority
Definition: sdrv_flexcan.h:86
@ FLEXCAN_RxFifoPrioLow
Definition: sdrv_flexcan.h:87
@ FLEXCAN_RxFifoPrioHigh
Definition: sdrv_flexcan.h:89
flexcan_status_e flexcan_read_rx_fifo(flexcan_handle_t *handle, flexcan_frame_t *rxFrame)
Read a FlexCAN Message from Rx FIFO.
void flexcan_set_rx_fifo_config(flexcan_handle_t *handle, const flexcan_rx_fifo_config_t *config)
Configure the FlexCAN Rx FIFO.
_flexcan_interrupt_enable
FlexCAN interrupt configuration structure, default settings all disabled.
Definition: sdrv_flexcan.h:392
@ FLEXCAN_RxWarningInterruptEnable
Definition: sdrv_flexcan.h:397
@ FLEXCAN_TxWarningInterruptEnable
Definition: sdrv_flexcan.h:399
@ FLEXCAN_BusOffInterruptEnable
Definition: sdrv_flexcan.h:393
@ FLEXCAN_WakeUpInterruptEnable
Definition: sdrv_flexcan.h:401
@ FLEXCAN_ErrorInterruptEnable
Definition: sdrv_flexcan.h:395
uint8_t flexcan_get_mb_state(flexcan_handle_t *handle, uint8_t mbIdx)
Get MB state.
uint32_t flexcan_read_mb_int_status(flexcan_handle_t *handle, uint8_t mbIdx)
Read MB interrupt status.
flexcan_pn_filter_selection_e
Pretended Networking matching schemes.
Definition: sdrv_flexcan.h:143
@ FLEXCAN_FILTER_MATCH_RANGE
Definition: sdrv_flexcan.h:149
@ FLEXCAN_FILTER_MATCH_EXACT
Definition: sdrv_flexcan.h:144
@ FLEXCAN_FILTER_MATCH_GEQ
Definition: sdrv_flexcan.h:145
@ FLEXCAN_FILTER_MATCH_LEQ
Definition: sdrv_flexcan.h:147
flexcan_status_e flexcan_freeze(flexcan_handle_t *handle, bool freeze)
Enter or exit freeze mode.
flexcan_frame_format
FlexCAN frame format.
Definition: sdrv_flexcan.h:99
@ FLEXCAN_EXTEND_FRAME
Definition: sdrv_flexcan.h:101
@ FLEXCAN_STANDARD_FRAME
Definition: sdrv_flexcan.h:100
flexcan_status_e flexcan_init(flexcan_handle_t *handle, const flexcan_config_t *config)
Initializes a FlexCAN instance.
flexcan_status_e flexcan_write_tx_mb(flexcan_handle_t *handle, uint8_t mbIdx, const flexcan_frame_t *txFrame, uint8_t padding_val)
Write FlexCAN Message to Transmit Message Buffer.
flexcan_clock_source
FlexCAN clock source.
Definition: sdrv_flexcan.h:68
@ FLEXCAN_ClkSrcPeri
Definition: sdrv_flexcan.h:71
@ FLEXCAN_ClkSrcOsc
Definition: sdrv_flexcan.h:69
void flexcan_set_rx_mb_config(flexcan_handle_t *handle, uint8_t mbIdx, const flexcan_rx_mb_config_t *config)
Configure a FlexCAN Receive Message Buffer.
void flexcan_set_rx_individual_mask(flexcan_handle_t *handle, uint8_t maskIdx, uint32_t mask)
Set the FlexCAN Receive Individual Mask.
void flexcan_create_handle(flexcan_handle_t *handle, uint8_t controller_id, void *reg_base, uint8_t irq_num, flexcan_transfer_callback_t callback, void *userData)
Initialize the FlexCAN handle.
_flexcan_status
FlexCAN transfer status.
Definition: sdrv_flexcan.h:275
@ FLEXCAN_RX_FIFO_OVERFLOW
Definition: sdrv_flexcan.h:296
@ FLEXCAN_WAKEUP_MATCH
Definition: sdrv_flexcan.h:306
@ FLEXCAN_RX_FIFO_WARNING
Definition: sdrv_flexcan.h:298
@ FLEXCAN_TX_SWITCH_TO_RX
Definition: sdrv_flexcan.h:283
@ FLEXCAN_TX_BUSY
Definition: sdrv_flexcan.h:279
@ FLEXCAN_RX_FIFO_BUSY
Definition: sdrv_flexcan.h:292
@ FLEXCAN_ERROR_STATUS
Definition: sdrv_flexcan.h:301
@ FLEXCAN_RX_OVERFLOW
Definition: sdrv_flexcan.h:290
@ FLEXCAN_WAKEUP_TIMEOUT
Definition: sdrv_flexcan.h:303
@ FLEXCAN_RX_BUSY
Definition: sdrv_flexcan.h:286
@ FLEXCAN_SUCCESS
Definition: sdrv_flexcan.h:276
@ FLEXCAN_FAIL
Definition: sdrv_flexcan.h:277
@ FLEXCAN_RX_IDLE
Definition: sdrv_flexcan.h:288
@ FLEXCAN_UNHANDLED
Definition: sdrv_flexcan.h:309
@ FLEXCAN_RX_FIFO_IDLE
Definition: sdrv_flexcan.h:294
@ FLEXCAN_TX_IDLE
Definition: sdrv_flexcan.h:281
uint32_t flexcan_get_mb_iflag(flexcan_handle_t *handle, uint8_t msgBufId)
Get mailbox interrupt flag.
void flexcan_abort_mb_send(flexcan_handle_t *handle, uint8_t mbIdx)
Abort interrupt driven message send process.
void flexcan_abort_mb_receive(flexcan_handle_t *handle, uint8_t mbIdx)
Abort interrupt driven message receive process.
flexcan_status_e flexcan_receive_fifo_nonblocking(flexcan_handle_t *handle, flexcan_fifo_transfer_t *xfer)
Receive message from Rx FIFO using IRQ.
void flexcan_set_rx_mb_global_mask(flexcan_handle_t *handle, uint32_t mask)
Set the FlexCAN Receive Message Buffer Global Mask.
flexcan_status_e flexcan_enable(flexcan_handle_t *handle, bool enable)
Enables or disable the FlexCAN module operation.
flexcan_status_e flexcan_request_sleep(flexcan_handle_t *handle, bool request)
Enter or exit lowpower mode.
void flexcan_set_rx_fifo_global_mask(flexcan_handle_t *handle, uint32_t mask)
Set the FlexCAN Receive FIFO Global Mask.
void flexcan_disable_interrupts(flexcan_handle_t *handle, uint32_t mask)
Disable FlexCAN interrupts according to provided mask.
enum _flexcan_status flexcan_status_e
FlexCAN transfer status.
struct _flexcan_rx_mb_config flexcan_rx_mb_config_t
FlexCAN Receive Message Buffer configuration structure.
flexcan_status_e flexcan_send_nonblocking(flexcan_handle_t *handle, flexcan_mb_transfer_t *xfer, uint8_t padding_val)
send message using IRQ
enum flexcan_frame_format flexcan_frame_format_e
FlexCAN frame format.
flexcan_status_e flexcan_receive_nonblocking(flexcan_handle_t *handle, flexcan_mb_transfer_t *xfer)
Receive message using IRQ.
flexcan_rx_fifo_filter_type
Definition: sdrv_flexcan.h:75
@ FLEXCAN_RxFifoFilterTypeC
Definition: sdrv_flexcan.h:81
@ FLEXCAN_RxFifoFilterTypeA
Definition: sdrv_flexcan.h:76
@ FLEXCAN_RxFifoFilterTypeB
Definition: sdrv_flexcan.h:78
@ FLEXCAN_RxFifoFilterTypeD
Definition: sdrv_flexcan.h:83
flexcan_pn_filter_combination_e
Pretended Networking filtering combinations.
Definition: sdrv_flexcan.h:133
@ FLEXCAN_FILTER_ID_NTIMES
Definition: sdrv_flexcan.h:136
@ FLEXCAN_FILTER_ID
Definition: sdrv_flexcan.h:134
@ FLEXCAN_FILTER_ID_PAYLOAD
Definition: sdrv_flexcan.h:135
@ FLEXCAN_FILTER_ID_PAYLOAD_NTIMES
Definition: sdrv_flexcan.h:138
struct _flexcan_frame flexcan_frame_t
enum flexcan_clock_source flexcan_clock_source_e
FlexCAN clock source.
enum flexcan_rx_fifo_filter_type flexcan_rx_fifo_filter_type_e
struct _flexcan_fifo_transfer flexcan_fifo_transfer_t
FlexCAN Rx FIFO transfer.
flexcan_controller_id
Definition: sdrv_flexcan.h:313
@ FLEXCAN23
Definition: sdrv_flexcan.h:336
@ FLEXCAN4
Definition: sdrv_flexcan.h:317
@ FLEXCAN1
Definition: sdrv_flexcan.h:314
@ FLEXCAN5
Definition: sdrv_flexcan.h:318
@ FLEXCAN13
Definition: sdrv_flexcan.h:326
@ FLEXCAN22
Definition: sdrv_flexcan.h:335
@ FLEXCAN19
Definition: sdrv_flexcan.h:332
@ FLEXCAN11
Definition: sdrv_flexcan.h:324
@ FLEXCAN14
Definition: sdrv_flexcan.h:327
@ FLEXCAN7
Definition: sdrv_flexcan.h:320
@ FLEXCAN9
Definition: sdrv_flexcan.h:322
@ FLEXCAN10
Definition: sdrv_flexcan.h:323
@ MAX_FLEXCAN_CH
Definition: sdrv_flexcan.h:338
@ FLEXCAN6
Definition: sdrv_flexcan.h:319
@ FLEXCAN12
Definition: sdrv_flexcan.h:325
@ FLEXCAN21
Definition: sdrv_flexcan.h:334
@ FLEXCAN17
Definition: sdrv_flexcan.h:330
@ FLEXCAN18
Definition: sdrv_flexcan.h:331
@ FLEXCAN2
Definition: sdrv_flexcan.h:315
@ FLEXCAN8
Definition: sdrv_flexcan.h:321
@ FLEXCAN3
Definition: sdrv_flexcan.h:316
@ FLEXCAN16
Definition: sdrv_flexcan.h:329
@ FLEXCAN20
Definition: sdrv_flexcan.h:333
@ FLEXCAN15
Definition: sdrv_flexcan.h:328
@ FLEXCAN24
Definition: sdrv_flexcan.h:337
enum flexcan_fd_data_size flexcan_fd_data_size_e
void flexcan_abort_receive_fifo(flexcan_handle_t *handle)
Abort interrupt driven message receive from Rx FIFO process.
enum flexcan_frame_type flexcan_frame_type_e
FlexCAN frame type.
void flexcan_deinit(flexcan_handle_t *handle)
De-initializes a FlexCAN instance.
void flexcan_set_tx_mb_config(flexcan_handle_t *handle, uint8_t mbIdx, bool tx_by_interrupt)
Configure a FlexCAN Transmit Message Buffer.
void flexcan_enable_interrupts(flexcan_handle_t *handle, uint32_t mask)
Enable FlexCAN interrupts according to provided mask.
void flexcan_classic_set_timing_config(flexcan_handle_t *handle, const flexcan_timing_config_t *config)
Setting FlexCAN classic protocol timing characteristic.
enum flexcan_rx_fifo_priority flexcan_rx_fifo_priority_e
flexcan_status_e flexcan_read_rx_mb(flexcan_handle_t *handle, uint8_t mbIdx, flexcan_frame_t *rxFrame)
Read a FlexCAN Message from Receive Message Buffer.
void flexcan_read_wmb(flexcan_handle_t *handle, uint8_t wmbIndex, flexcan_frame_t *wmb)
read a can message from wakeup message buffer.
struct _flexcan_mb_transfer flexcan_mb_transfer_t
FlexCAN Message Buffer transfer.
uint32_t flexcan_get_error_status(flexcan_handle_t *handle)
Get reported error conditons detected in the reception and transmission.
enum flexcan_controller_id flexcan_controller_id_e
FlexCAN Rx FIFO transfer.
Definition: sdrv_flexcan.h:266
flexcan_frame_t * pFrame
Definition: sdrv_flexcan.h:268
Definition: sdrv_flexcan.h:238
uint32_t idHit
Definition: sdrv_flexcan.h:250
uint8_t * dataBuffer
Definition: sdrv_flexcan.h:255
uint32_t format
Definition: sdrv_flexcan.h:246
uint32_t id
Definition: sdrv_flexcan.h:241
uint32_t isCANFDBrsEn
Definition: sdrv_flexcan.h:248
uint32_t isCANFDFrame
Definition: sdrv_flexcan.h:247
uint32_t type
Definition: sdrv_flexcan.h:245
uint16_t timestamp
Definition: sdrv_flexcan.h:240
uint32_t reserved2
Definition: sdrv_flexcan.h:252
uint32_t length
Definition: sdrv_flexcan.h:244
uint32_t reserved1
Definition: sdrv_flexcan.h:249
FlexCAN handle structure.
Definition: sdrv_flexcan.h:357
void * base_addr
Definition: sdrv_flexcan.h:363
volatile uint8_t rxFifoState
Definition: sdrv_flexcan.h:376
void * userData
Definition: sdrv_flexcan.h:367
flexcan_frame_t *volatile pRxFifoFrameBuf
Definition: sdrv_flexcan.h:372
flexcan_transfer_callback_t callback
Definition: sdrv_flexcan.h:365
uint8_t controller_id
Definition: sdrv_flexcan.h:359
uint32_t mb_used_mask[2]
Definition: sdrv_flexcan.h:378
uint8_t irq_num
Definition: sdrv_flexcan.h:361
volatile uint8_t mbState[FLEXCAN_HAS_MESSAGE_BUFFER_MAX_NUMBER]
Definition: sdrv_flexcan.h:374
flexcan_frame_t *volatile pMBFrameBuf[FLEXCAN_HAS_MESSAGE_BUFFER_MAX_NUMBER]
Definition: sdrv_flexcan.h:370
bool enableDoze
Definition: sdrv_flexcan.h:380
FlexCAN Message Buffer transfer.
Definition: sdrv_flexcan.h:260
flexcan_frame_t * pFrame
Definition: sdrv_flexcan.h:261
uint8_t mbIdx
Definition: sdrv_flexcan.h:262
FlexCAN Receive Message Buffer configuration structure.
Definition: sdrv_flexcan.h:231
flexcan_frame_type_e type
Definition: sdrv_flexcan.h:235
flexcan_frame_format_e format
Definition: sdrv_flexcan.h:234
uint32_t id
Definition: sdrv_flexcan.h:232
Definition: sdrv_flexcan.h:193
bool enableCANFD
Definition: sdrv_flexcan.h:202
flexcan_clock_source_e clkSrc
Definition: sdrv_flexcan.h:194
bool enableLBUFTransmittedFirst
Definition: sdrv_flexcan.h:197
bool enableLoopBack
Definition: sdrv_flexcan.h:196
flexcan_pn_config_t pnet_cfg
Definition: sdrv_flexcan.h:207
bool enableSelfWakeup
Definition: sdrv_flexcan.h:199
flexcan_timing_config_t nominalBitTiming
Definition: sdrv_flexcan.h:204
uint8_t maxMbNum
Definition: sdrv_flexcan.h:195
flexcan_timing_config_t dataBitTiming
Definition: sdrv_flexcan.h:205
bool enablePretendedNetworking
Definition: sdrv_flexcan.h:203
flexcan_fd_config_t can_fd_cfg
Definition: sdrv_flexcan.h:206
bool enableDoze
Definition: sdrv_flexcan.h:201
bool enableListenOnly
Definition: sdrv_flexcan.h:198
bool enableIndividMask
Definition: sdrv_flexcan.h:200
Definition: sdrv_flexcan.h:105
uint8_t enableBRS
Definition: sdrv_flexcan.h:107
uint8_t enableTDC
Definition: sdrv_flexcan.h:108
uint8_t TDCOffset
Definition: sdrv_flexcan.h:109
flexcan_fd_data_size_e r0_mb_data_size
Definition: sdrv_flexcan.h:110
uint8_t enableISOCANFD
Definition: sdrv_flexcan.h:106
flexcan_fd_data_size_e r1_mb_data_size
Definition: sdrv_flexcan.h:111
Pretended Networking configuration structure.
Definition: sdrv_flexcan.h:155
flexcan_pn_id_filter_t idFilter2
Definition: sdrv_flexcan.h:169
flexcan_pn_filter_selection_e payloadFilterType
Definition: sdrv_flexcan.h:174
flexcan_pn_filter_combination_e filterComb
Definition: sdrv_flexcan.h:165
flexcan_pn_filter_selection_e idFilterType
Definition: sdrv_flexcan.h:172
uint16_t numMatches
Definition: sdrv_flexcan.h:160
bool wakeUpMatch
Definition: sdrv_flexcan.h:158
uint16_t matchTimeout
Definition: sdrv_flexcan.h:162
flexcan_pn_id_filter_t idFilter1
Definition: sdrv_flexcan.h:167
bool wakeUpTimeout
Definition: sdrv_flexcan.h:156
flexcan_pn_payload_filter_t payloadFilter
Definition: sdrv_flexcan.h:176
Pretended Networking ID filter.
Definition: sdrv_flexcan.h:115
bool remoteFrame
Definition: sdrv_flexcan.h:117
bool extendedId
Definition: sdrv_flexcan.h:116
uint32_t id
Definition: sdrv_flexcan.h:118
Pretended Networking payload filter.
Definition: sdrv_flexcan.h:122
uint8_t dlcHigh
Definition: sdrv_flexcan.h:124
uint8_t dlcLow
Definition: sdrv_flexcan.h:123
Definition: sdrv_flexcan.h:215
uint8_t idFilterNum
Definition: sdrv_flexcan.h:216
flexcan_rx_fifo_filter_type_e idFilterType
Definition: sdrv_flexcan.h:217
flexcan_rx_fifo_filter_table_t * filter_tab
Definition: sdrv_flexcan.h:219
flexcan_rx_fifo_priority_e priority
Definition: sdrv_flexcan.h:218
Definition: sdrv_flexcan.h:210
uint32_t filter_mask
Definition: sdrv_flexcan.h:212
uint32_t filter_code
Definition: sdrv_flexcan.h:211
Definition: sdrv_flexcan.h:185
uint8_t phaseSeg2
Definition: sdrv_flexcan.h:190
uint8_t phaseSeg1
Definition: sdrv_flexcan.h:189
uint8_t rJumpwidth
Definition: sdrv_flexcan.h:187
uint16_t preDivider
Definition: sdrv_flexcan.h:186
uint8_t propSeg
Definition: sdrv_flexcan.h:188