nu_canfd.h 20 KB

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