1 /**************************************************************************** 2 * @file canfd.h 3 * @version V1.00 4 * @brief CAN FD driver source file 5 * 6 * SPDX-License-Identifier: Apache-2.0 7 * @copyright (C) 2021 Nuvoton Technology Corp. All rights reserved. 8 *****************************************************************************/ 9 10 #ifndef __CANFD_H__ 11 #define __CANFD_H__ 12 13 #if defined ( __CC_ARM ) 14 #pragma anon_unions 15 #endif 16 17 #include "NuMicro.h" 18 19 #ifdef __cplusplus 20 extern "C" 21 { 22 #endif 23 24 /** @addtogroup Standard_Driver Standard Driver 25 @{ 26 */ 27 28 /** @addtogroup CANFD_Driver CAN_FD Driver 29 @{ 30 */ 31 32 /** @addtogroup CANFD_EXPORTED_CONSTANTS CAN_FD Exported Constants 33 @{ 34 */ 35 36 #define CANFD_OP_CAN_MODE 0 37 #define CANFD_OP_CAN_FD_MODE 1 38 39 /* Reserved number of elements in Message RAM - used for calculation of start addresses within RAM Configuration 40 some element_numbers set to less than max, to stay altogether below 256 words of Message RAM requirement*/ 41 #define CANFD_MAX_11_BIT_FTR_ELEMS 128ul /*!< maximum is 128 11-bit Filter */ 42 #define CANFD_MAX_29_BIT_FTR_ELEMS 64ul /*!< maximum is 64 29-bit Filter */ 43 #define CANFD_MAX_RX_FIFO0_ELEMS 64ul /*!< maximum is 64 Rx FIFO 0 elements */ 44 #define CANFD_MAX_RX_FIFO1_ELEMS 64ul /*!< maximum is 64 Rx FIFO 1 elements */ 45 #define CANFD_MAX_RX_BUF_ELEMS 64ul /*!< maximum is 64 Rx Buffers */ 46 #define CANFD_MAX_TX_BUF_ELEMS 32ul /*!< maximum is 32 Tx Buffers */ 47 #define CANFD_MAX_TX_EVNT_FIFO_ELEMS 32ul /*!< maximum is 32 Tx Event FIFO elements */ 48 49 /* CAN FD sram size */ 50 #define CANFD_SRAM_SIZE 0x1800ul 51 #define CANFD_SRAM_OFFSET 0x200ul 52 53 /* CAN FD sram address */ 54 #define CANFD_SRAM_BASE_ADDR(psCanfd) ((uint32_t)psCanfd + CANFD_SRAM_OFFSET) 55 56 /* CAN FD Mask all interrupt */ 57 #define CANFD_INT_ALL_SIGNALS 0x3FFFFFFFul 58 59 /* Maximum size of a CAN FD frame. Must be a valid CAN FD value */ 60 #define CANFD_MAX_MESSAGE_BYTES 64 61 62 /* Maximum size of a CAN FD frame. Must be a valid CAN FD value */ 63 #define CANFD_MAX_MESSAGE_WORDS (CANFD_MAX_MESSAGE_BYTES/4) 64 65 /* Receive message buffer helper macro */ 66 #define CANFD_RX_BUFFER_STD(id, mbIdx) ((7UL << 27) | ((id & 0x7FF) << 16) | (mbIdx & 0x3F)) 67 68 /* Receive message buffer extended helper macro - low */ 69 #define CANFD_RX_BUFFER_EXT_LOW(id, mbIdx) ((7UL << 29) | (id & 0x1FFFFFFFUL)) 70 71 /* Receive message buffer extended helper macro - high */ 72 #define CANFD_RX_BUFFER_EXT_HIGH(id, mbIdx) (mbIdx & 0x3FUL) 73 74 /* CAN FD Rx FIFO 0 Mask helper macro. */ 75 #define CANFD_RX_FIFO0_STD_MASK(match, mask) ((2UL << 30) | (1UL << 27) | ((match & 0x7FF) << 16) | (mask & 0x7FF)) 76 77 /* CAN FD Rx FIFO 0 extended Mask helper macro - low. */ 78 #define CANFD_RX_FIFO0_EXT_MASK_LOW(match) ((1UL << 29) | (match & 0x1FFFFFFF)) 79 80 /* CAN FD Rx FIFO 0 extended Mask helper macro - high. */ 81 #define CANFD_RX_FIFO0_EXT_MASK_HIGH(mask) ((2UL << 30) | (mask & 0x1FFFFFFF)) 82 83 /* CAN FD Rx FIFO 1 Mask helper macro. */ 84 #define CANFD_RX_FIFO1_STD_MASK(match, mask) ((2UL << 30) | (2UL << 27) | ((match & 0x7FF) << 16) | (mask & 0x7FF)) 85 86 /* CANFD Rx FIFO 1 extended Mask helper macro - low. */ 87 #define CANFD_RX_FIFO1_EXT_MASK_LOW(match) ((2UL << 29) | (match & 0x1FFFFFFF)) 88 89 /* CANFD Rx FIFO 1 extended Mask helper macro - high. */ 90 #define CANFD_RX_FIFO1_EXT_MASK_HIGH(mask) ((2UL << 30) | (mask & 0x1FFFFFFF)) 91 92 /** 93 * @brief Get the CAN Communication State Flag 94 * 95 * @param[in] canfd The pointer of the specified CANFD module 96 * 97 * @retval 0 Synchronizing - node is synchronizing on CANFD communication. 98 * @retval 1 Idle - node is neither receiver nor transmitter. 99 * @retval 2 Receiver - node is operating as receiver. 100 * @retval 3 Transmitter - node is operating as transmitter. 101 * 102 * @details This macro gets the CANFD communication state. 103 * \hideinitializer 104 */ 105 #define CANFD_GET_COMMUNICATION_STATE(canfd) (((canfd)->PSR & CANFD_PSR_ACT_Msk) >> CANFD_PSR_ACT_Pos) 106 107 108 /* CAN FD frame data field size. */ 109 typedef enum 110 { 111 eCANFD_BYTE8 = 0, /*!< 8 byte data field. */ 112 eCANFD_BYTE12 = 1, /*!< 12 byte data field. */ 113 eCANFD_BYTE16 = 2, /*!< 16 byte data field. */ 114 eCANFD_BYTE20 = 3, /*!< 20 byte data field. */ 115 eCANFD_BYTE24 = 4, /*!< 24 byte data field. */ 116 eCANFD_BYTE32 = 5, /*!< 32 byte data field. */ 117 eCANFD_BYTE48 = 6, /*!< 48 byte data field. */ 118 eCANFD_BYTE64 = 7 /*!< 64 byte data field. */ 119 } E_CANFD_DATA_FIELD_SIZE; 120 121 /* CAN FD Tx FIFO/Queue Mode. */ 122 typedef enum 123 { 124 eCANFD_QUEUE_MODE = 0, /*!< Tx FIFO operation. */ 125 eCANFD_FIFO_MODE = 1 /*!< Tx Queue operation. */ 126 } E_CANFD_MODE; 127 128 /* TX Buffer Configuration Parameters */ 129 typedef struct 130 { 131 E_CANFD_DATA_FIELD_SIZE eDataFieldSize; /*!< TX Buffer Data Field Size (8byte .. 64byte) */ 132 E_CANFD_MODE eModeSel; /*!< select: CANFD_QUEUE_MODE/CANFD_FIFO_MODE */ 133 uint32_t u32ElemCnt; /*!< Elements in FIFO/Queue */ 134 uint32_t u32DBufNumber; /*!< Number of dedicated TX buffers */ 135 } CANFD_TX_BUF_CONFIG_T; 136 137 138 /* Nominal Bit Timing Parameters */ 139 typedef struct 140 { 141 uint32_t u32BitRate; /*!< Transceiver baud rate in bps */ 142 uint16_t u16TDCOffset; /*!< Transceiver Delay Compensation Offset */ 143 uint16_t u16TDCFltrWin; /*!< Transceiver Delay Compensation Filter Window Length */ 144 uint8_t u8TDC; /*!< Transceiver Delay Compensation (1:Yes, 0:No) */ 145 } CANFD_NBT_CONFIG_T; 146 147 148 /* Data Bit Timing Parameters */ 149 typedef struct 150 { 151 uint32_t u32BitRate; /*!< Transceiver baud rate in bps */ 152 uint16_t u16TDCOffset; /*!< Transceiver Delay Compensation Offset */ 153 uint16_t u16TDCFltrWin; /*!< Transceiver Delay Compensation Filter Window Length */ 154 uint8_t u8TDC; /*!< Transceiver Delay Compensation (1:Yes, 0:No) */ 155 } CANFD_DBT_CONFIG_T; 156 157 /*! CAN FD protocol timing characteristic configuration structure. */ 158 typedef struct 159 { 160 uint8_t u8PreDivider; /*!< Global Clock Division Factor. */ 161 uint16_t u16NominalPrescaler; /*!< Nominal clock prescaler. */ 162 uint8_t u8NominalRJumpwidth; /*!< Nominal Re-sync Jump Width. */ 163 uint8_t u8NominalPhaseSeg1; /*!< Nominal Phase Segment 1. */ 164 uint8_t u8NominalPhaseSeg2; /*!< Nominal Phase Segment 2. */ 165 uint8_t u8NominalPropSeg; /*!< Nominal Propagation Segment. */ 166 uint8_t u8DataPrescaler; /*!< Data clock prescaler. */ 167 uint8_t u8DataRJumpwidth; /*!< Data Re-sync Jump Width. */ 168 uint8_t u8DataPhaseSeg1; /*!< Data Phase Segment 1. */ 169 uint8_t u8DataPhaseSeg2; /*!< Data Phase Segment 2. */ 170 uint8_t u8DataPropSeg; /*!< Data Propagation Segment. */ 171 172 } CANFD_TIMEING_CONFIG_T; 173 174 /* CAN FD module configuration structure. */ 175 typedef struct 176 { 177 CANFD_NBT_CONFIG_T sNormBitRate; /*!< Normal bit rate. */ 178 CANFD_DBT_CONFIG_T sDataBitRate; /*!< Data bit rate. */ 179 CANFD_TIMEING_CONFIG_T sConfigBitTing; /*!< Bit timing config*/ 180 uint8_t bFDEn; /*!< 1 == FD Operation enabled. */ 181 uint8_t bBitRateSwitch; /*!< 1 == Bit Rate Switch enabled (only evaluated in HW, if FD operation enabled). */ 182 uint8_t bEnableLoopBack; /*!< 1 == Bit Rate Switch enabled (only evaluated in HW, if FD operation enabled). */ 183 } CANFD_FD_BT_CONFIG_T; 184 185 /* CAN FD Message RAM Partitioning - i.e. Start Addresses (BYTE) */ 186 typedef struct 187 { 188 uint32_t u32SIDFC_FLSSA; /*!<Standard ID Filter Configuration */ 189 uint32_t u32XIDFC_FLESA; /*!<Extended ID Filter Configuration */ 190 uint32_t u32RXF0C_F0SA; /*!< RX FIFO 0 Start Address */ 191 uint32_t u32RXF1C_F1SA; /*!< RX FIFO 1 Start Address */ 192 uint32_t u32RXBC_RBSA; /*!< Rx Buffer Configuration */ 193 uint32_t u32TXEFC_EFSA; /*!< Tx Event FIFO Configuration */ 194 uint32_t u32TXBC_TBSA; /*!< Tx Buffer Configuration */ 195 } CANFD_RAM_PART_T; 196 197 /*CAN FD element size structure */ 198 typedef struct 199 { 200 uint32_t u32SIDFC; /*!< Standard Message ID Filter element size in words */ 201 uint32_t u32XIDFC; /*!< Extended Message ID Filter element size in words */ 202 uint32_t u32RxFifo0; /*!< Rx FIFO0 element size in words */ 203 uint32_t u32RxFifo1; /*!< Rx FIFO1 element size in words */ 204 uint32_t u32RxBuf; /*!< Rx Buffer element size in words */ 205 uint32_t u32TxBuf; /*!< Tx Buffer element size in words */ 206 uint32_t u32TxEventFifo; /*!< Tx Event FIFO element size in words */ 207 } CANFD_ELEM_SIZE_T; 208 209 /* CAN FD Message frame structure */ 210 typedef struct 211 { 212 CANFD_FD_BT_CONFIG_T sBtConfig; /*!< Bit Timing Configuration */ 213 CANFD_RAM_PART_T sMRamStartAddr; /*!< Absolute Byte Start Addresses for Element Types in Message RAM */ 214 CANFD_ELEM_SIZE_T sElemSize; /*!< Size of Elements in Message RAM (RX Elem. in FIFO0, in FIFO1, TX Buffer) given in words */ 215 CANFD_TX_BUF_CONFIG_T sTxConfig; /*!< TX Buffer Configuration */ 216 uint32_t u32MRamSize; /*!< Size of the Message RAM: number of words */ 217 } CANFD_FD_T; 218 219 /* CAN FD Message ID Type */ 220 typedef enum 221 { 222 eCANFD_SID = 0, /*!< Standard frame format attribute. */ 223 eCANFD_XID = 1 /*!< Extend frame format attribute. */ 224 } E_CANFD_ID_TYPE; 225 226 /* CAN FD Rx Message Type */ 227 typedef enum 228 { 229 eCANFD_RX_FIFO_0 = 0, 230 eCANFD_RX_FIFO_1 = 1, 231 eCANFD_RX_DBUF = 2 232 } E_CANFD_RX_BUF_TYPE; 233 234 /* CAN FD communication state.*/ 235 typedef enum 236 { 237 eCANFD_SYNC = 0, 238 eCANFD_IDLE = 1, 239 eCANFD_RECEIVER = 2, 240 eCANFD_TRANSMITTER = 3 241 } E_CANFD_COMMUNICATION_STATE; 242 243 /* CAN FD Message receive Information: via which RX Buffers, etc. */ 244 typedef struct 245 { 246 E_CANFD_RX_BUF_TYPE eRxBuf; /*!< Type of RX Buffer */ 247 uint32_t u32BufIdx; /*!< RX Buffer: buffer index, if RX FIFO: GetIndex */ 248 } CANFD_RX_INFO_T; 249 250 /* CAN FD frame type. */ 251 typedef enum 252 { 253 eCANFD_DATA_FRM = 0, /*!< Data frame type attribute. */ 254 eCANFD_REMOTE_FRM = 1 /*!< Remote frame type attribute. */ 255 } E_CANFD_FRM_TYPE; 256 257 /* CAN FD Message Struct */ 258 typedef struct 259 { 260 E_CANFD_ID_TYPE eIdType; /*! Standard ID or Extended ID */ 261 CANFD_RX_INFO_T sRxInfo; /*! Information regarding the reception of the frame */ 262 E_CANFD_FRM_TYPE eFrmType; /*! eCANFD_DATA_FRM/eCANFD_REMOTE_FRM */ 263 uint32_t u32Id; /*! Standard ID (11bits) or Extended ID (29bits) */ 264 uint32_t u32DLC; /*! Data Length */ 265 union 266 { 267 uint32_t au32Data[CANFD_MAX_MESSAGE_WORDS]; /*!< Word access to buffer data. */ 268 uint8_t au8Data[CANFD_MAX_MESSAGE_BYTES]; /*!< Byte access to buffer data. */ 269 }; 270 uint8_t u8MsgMarker; /*! Message marker (will be copied to TX Event FIFO element) */ 271 uint8_t bFDFormat; /*! FD Format (1 = FD Format) */ 272 uint8_t bBitRateSwitch; /*! Bit Rate Switch (1 = with Bit Rate Switch) */ 273 uint8_t bErrStaInd; /*! Error State Indicator */ 274 uint8_t bEvntFifoCon; /*! Event FIFO Control (1 = Store TX Event FIFO element after transmission)*/ 275 } CANFD_FD_MSG_T; 276 277 278 /* Transmit and Receive message element structure. */ 279 typedef struct 280 { 281 uint32_t u32Id; /*!< Message identifier and associated flags. */ 282 uint32_t u32Config; /*!< Buffer configuration. */ 283 union 284 { 285 uint32_t au32Data[CANFD_MAX_MESSAGE_WORDS]; /*!< Word access to buffer data. */ 286 uint8_t au8Data[CANFD_MAX_MESSAGE_BYTES]; /*!< Byte access to buffer data. */ 287 }; 288 } CANFD_BUF_T; 289 290 /* Standard ID message filter element structure.*/ 291 typedef struct 292 { 293 union 294 { 295 struct 296 { 297 uint32_t SFID2 : 11; /*!<Standard Filter ID 2. */ 298 uint32_t reserved1 : 5; 299 uint32_t SFID1 : 11; /*!<Standard Filter ID 1. */ 300 uint32_t SFEC : 3; /*!<Standard Filter Element Configuration */ 301 uint32_t SFT : 2; /*!<Standard Filter Type */ 302 }; 303 struct 304 { 305 uint32_t VALUE; /*!< Access to filter as a word. */ 306 }; 307 }; 308 } CANFD_STD_FILTER_T; 309 310 /* Extended ID message filter element structure.*/ 311 typedef struct 312 { 313 union 314 { 315 struct 316 { 317 uint32_t EFID1 : 29; /*!< Extended Filter ID 1. */ 318 uint32_t EFEC : 3; /*!< Extended Filter Element Configuration. */ 319 uint32_t EFID2 : 29; /*!< Extended Filter ID 2. */ 320 uint32_t reserved1 : 1; 321 uint32_t EFT : 2; /*!< Extended Filter Type. */ 322 }; 323 struct 324 { 325 uint32_t LOWVALUE; /*!< Access to filter low word. */ 326 uint32_t HIGHVALUE; /*!< Access to filter high word. */ 327 }; 328 }; 329 } CANFD_EXT_FILTER_T; 330 331 /* Accept Non-matching Frames (GFC Register) */ 332 typedef enum 333 { 334 eCANFD_ACC_NON_MATCH_FRM_RX_FIFO0 = 0x0, /*!< Accept Non-Masking Frames in Rx FIFO 0. */ 335 eCANFD_ACC_NON_MATCH_FRM_RX_FIFO1 = 0x1, /*!< Accept Non-Masking Frames in Rx FIFO 1. */ 336 eCANFD_REJ_NON_MATCH_FRM = 0x3 /*!< Reject Non-Matching Frames. */ 337 } E_CANFD_ACC_NON_MATCH_FRM; 338 339 340 /* Standard ID Filter Element Type */ 341 typedef enum 342 { 343 eCANFD_SID_FLTR_TYPE_RANGE = 0x0, /*!< Range filter from SFID1 to SFID2. */ 344 eCANFD_SID_FLTR_TYPE_DUAL = 0x1, /*!< Dual ID filter for SFID1 or SFID2. */ 345 eCANFD_SID_FLTR_TYPE_CLASSIC = 0x2, /*!< Classic filter: SFID1 = filter, SFID2 = mask. */ 346 eCANFD_SID_FLTR_TYPE_DIS = 0x3 /*!< Filter element disabled */ 347 } E_CANFD_SID_FLTR_ELEM_TYPE; 348 349 /* Extended ID Filter Element Type */ 350 typedef enum 351 { 352 eCANFD_XID_FLTR_TYPE_RANGE = 0x0, /*!< Range filter from EFID1 to EFID2. */ 353 eCANFD_XID_FLTR_TYPE_DUAL = 0x1, /*!< Dual ID filter for EFID1 or EFID2. */ 354 eCANFD_XID_FLTR_TYPE_CLASSIC = 0x2, /*!< Classic filter: EFID1=filter, EFID2=mask */ 355 eCANFD_XID_FLTR_TYPE_RANGE_XIDAM_NOT_APP = 0x3 /*!< XID range filter from EFID1 to EFID2(EFID2 > EFID1), XIDAM not applied */ 356 } E_CANFD_XID_FLTR_ELEM_TYPE; 357 358 /* Filter Element Configuration - Can be used for SFEC(Standard Id filter configuration) and EFEC(Extended Id filter configuration) */ 359 typedef enum 360 { 361 eCANFD_FLTR_ELEM_DIS = 0x0, /*!< Filter Element Disable */ 362 eCANFD_FLTR_ELEM_STO_FIFO0 = 0x1, /*!< Filter Element Store In Fifo0 */ 363 eCANFD_FLTR_ELEM_STO_FIFO1 = 0x2, /*!< Filter Element Store In Fifo1 */ 364 eCANFD_FLTR_ELEM_REJ_ID = 0x3, /*!< Filter Element RejectId */ 365 eCANFD_FLTR_ELEM_SET_PRI = 0x4, /*!< Filter Element Set Priority */ 366 eCANFD_FLTR_ELEM_SET_PRI_STO_FIFO0 = 0x5, /*!< Filter Element Set Priority And Store In Fifo0 */ 367 eCANFD_FLTR_ELEM_SET_PRI_STO_FIFO1 = 0x6, /*!< Filter Element Set Priority And Store In Fifo1 */ 368 eCANFD_FLTR_ELEM_STO_RX_BUF_OR_DBG_MSG = 0x7 /*!< Filter Element Store In Rx Buf Or Debug Msg */ 369 } E_CANFD_FLTR_CONFIG; 370 371 /* TX Event FIFO Element Struct */ 372 typedef struct 373 { 374 E_CANFD_ID_TYPE eIdType; /*!< Standard ID or Extended ID */ 375 uint32_t u32Id; /*!< Standard ID (11bits) or Extended ID (29bits) */ 376 uint32_t u32DLC; /*!< Data Length Code used in the frame on the bus */ 377 uint32_t u32TxTs; /*!< Tx Timestamp */ 378 uint32_t u32MsgMarker; /*!< Message marker */ 379 uint8_t bErrStaInd; /*!< Error State Indicator */ 380 uint8_t bRemote; /*!< Remote transmission request */ 381 uint8_t bFDFormat; /*!< FD Format */ 382 uint8_t bBitRateSwitch; /*!< Bit Rate Switch */ 383 } CANFD_TX_EVNT_ELEM_T; 384 385 386 #define CANFD_TIMEOUT SystemCoreClock /*!< CANFD time-out counter (1 second time-out) */ 387 #define CANFD_OK ( 0L) /*!< CANFD operation OK */ 388 #define CANFD_ERR_FAIL (-1L) /*!< CANFD operation failed */ 389 #define CANFD_ERR_TIMEOUT (-2L) /*!< CANFD operation abort due to timeout error */ 390 #define CANFD_READ_REG_TIMEOUT (48UL) /*!< CANFD read register time-out count */ 391 392 void CANFD_Open(CANFD_T *canfd, CANFD_FD_T *psCanfdStr); 393 void CANFD_Close(CANFD_T *canfd); 394 void CANFD_EnableInt(CANFD_T *canfd, uint32_t u32IntLine0, uint32_t u32IntLine1, uint32_t u32TXBTIE, uint32_t u32TXBCIE); 395 void CANFD_DisableInt(CANFD_T *canfd, uint32_t u32IntLine0, uint32_t u32IntLine1, uint32_t u32TXBTIE, uint32_t u32TXBCIE); 396 uint32_t CANFD_TransmitTxMsg(CANFD_T *canfd, uint32_t u32TxBufIdx, CANFD_FD_MSG_T *psTxMsg); 397 uint32_t CANFD_TransmitDMsg(CANFD_T *canfd, uint32_t u32TxBufIdx, CANFD_FD_MSG_T *psTxMsg); 398 void CANFD_SetGFC(CANFD_T *canfd, E_CANFD_ACC_NON_MATCH_FRM eNMStdFrm, E_CANFD_ACC_NON_MATCH_FRM eEMExtFrm, uint32_t u32RejRmtStdFrm, uint32_t u32RejRmtExtFrm); 399 void CANFD_SetSIDFltr(CANFD_T *canfd, uint32_t u32FltrIdx, uint32_t u32Filter); 400 void CANFD_SetXIDFltr(CANFD_T *canfd, uint32_t u32FltrIdx, uint32_t u32FilterLow, uint32_t u32FilterHigh); 401 uint32_t CANFD_ReadRxBufMsg(CANFD_T *canfd, uint8_t u8MbIdx, CANFD_FD_MSG_T *psMsgBuf); 402 uint32_t CANFD_ReadRxFifoMsg(CANFD_T *canfd, uint8_t u8FifoIdx, CANFD_FD_MSG_T *psMsgBuf); 403 void CANFD_CopyDBufToMsgBuf(CANFD_BUF_T *psRxBuffer, CANFD_FD_MSG_T *psMsgBuf); 404 void CANFD_CopyRxFifoToMsgBuf(CANFD_BUF_T *psRxBuf, CANFD_FD_MSG_T *psMsgBuf); 405 uint32_t CANFD_GetRxFifoWaterLvl(CANFD_T *canfd, uint32_t u32RxFifoNum); 406 void CANFD_TxBufCancelReq(CANFD_T *canfd, uint32_t u32TxBufIdx); 407 uint32_t CANFD_IsTxBufCancelFin(CANFD_T *canfd, uint32_t u32TxBufIdx); 408 uint32_t CANFD_IsTxBufTransmitOccur(CANFD_T *canfd, uint32_t u32TxBufIdx); 409 uint32_t CANFD_GetTxEvntFifoWaterLvl(CANFD_T *canfd); 410 void CANFD_CopyTxEvntFifoToUsrBuf(CANFD_T *canfd, uint32_t u32TxEvntNum, CANFD_TX_EVNT_ELEM_T *psTxEvntElem); 411 void CANFD_GetBusErrCount(CANFD_T *canfd, uint8_t *pu8TxErrBuf, uint8_t *pu8RxErrBuf); 412 int32_t CANFD_RunToNormal(CANFD_T *canfd, uint8_t u8Enable); 413 void CANFD_GetDefaultConfig(CANFD_FD_T *psConfig, uint8_t u8OpMode); 414 void CANFD_ClearStatusFlag(CANFD_T *canfd, uint32_t u32InterruptFlag); 415 uint32_t CANFD_GetStatusFlag(CANFD_T *canfd, uint32_t u32IntTypeFlag); 416 uint32_t CANFD_ReadReg(__I uint32_t* pu32RegAddr); 417 418 /*@}*/ /* end of group CANFD_EXPORTED_FUNCTIONS */ 419 420 /*@}*/ /* end of group CANFD_Driver */ 421 422 /*@}*/ /* end of group Standard_Driver */ 423 424 #ifdef __cplusplus 425 } 426 #endif 427 428 #if defined ( __CC_ARM ) 429 #pragma no_anon_unions 430 #endif 431 432 #endif /* __CANFD_H__ */ 433