/** * @file fc7xxx_driver_flexcan.h * @author Flagchip * @brief FC7xxx CAN driver type definition and API * @version 0.1.0 * @date 2022-02-20 * * @copyright Copyright (c) 2024 Flagchip Semiconductors Co., Ltd. * */ /* ******************************************************************************** * Revision History: * * Version Date Author Descriptions * --------- ---------- ------------ --------------- * 0.1.0 2024-1-13 Flagchip0112 First version for FC7240 ******************************************************************************** */ #ifndef _DRIVER_FC4XXX_DRIVER_FLEXCAN_H_ #define _DRIVER_FC4XXX_DRIVER_FLEXCAN_H_ #include "HwA_flexcan.h" /* ################################################################################## */ /* ####################################### Macro #################################### */ #define FLEXCAN_CHECK_PARAMETERS STD_ON /* ################################################################################## */ /* ################################### Type define ################################## */ /** * @addtogroup fc7xxx_driver_can * @{ */ /** * @brief FLEXCAN ID Type * */ typedef enum { FLEXCAN_ID_STD = 0x00U, /**< FLEXCAN_ID_STD standard id */ FLEXCAN_ID_EXT = 0x01U /**< FLEXCAN_ID_EXT extended id */ } FLEXCAN_IdType; /** * @brief FLEXCAN Data Frame Type * */ typedef enum { FLEXCAN_FRAME_DATA = 0x00U, /**< FLEXCAN_FRAME_DATA data frame */ FLEXCAN_FRAME_REMOTE = 0x01U /**< FLEXCAN_FRAME_REMOTE remote frame */ } FLEXCAN_DataType; /** * @brief FLEXCAN baud-rate clock source * */ typedef enum { FLEXCAN_BAUDCLK_HZ_8M = 8000000U, /**< FLEXCAN_BAUDCLK_HZ_8M 8MHz clock source */ FLEXCAN_BAUDCLK_HZ_12M = 12000000U, /**< FLEXCAN_BAUDCLK_HZ_12M 12MHz clock source */ FLEXCAN_BAUDCLK_HZ_16M = 16000000U, /**< FLEXCAN_BAUDCLK_HZ_16M 16MHz clock source */ FLEXCAN_BAUDCLK_HZ_24M = 24000000U, /**< FLEXCAN_BAUDCLK_HZ_24M 24MHz clock source */ FLEXCAN_BAUDCLK_HZ_48M = 48000000U, /**< FLEXCAN_BAUDCLK_HZ_48M 48MHz clock source */ FLEXCAN_BAUDCLK_HZ_96M = 96000000U, /**< FLEXCAN_BAUDCLK_HZ_96M 96MHz clock source */ FLEXCAN_BAUDCLK_HZ_120M = 120000000U,/**< FLEXCAN_BAUDCLK_HZ_120M 120MHz clock source */ FLEXCAN_BAUDCLK_HZ_150M = 150000000U /**< FLEXCAN_BAUDCLK_HZ_150M 150MHz clock source */ } FLEXCAN_BaudClkType; /** * @brief FLEXCAN baud-rate source * */ typedef enum { FLEXCAN_BAUD_100K = 100000U, /**< FLEXCAN_BAUD_100K normal bit 100Kbps */ FLEXCAN_BAUD_125K = 125000U, /**< FLEXCAN_BAUD_100K normal bit 125Kbps */ FLEXCAN_BAUD_250K = 250000U, /**< FLEXCAN_BAUD_250K normal bit 250Kbps */ FLEXCAN_BAUD_500K = 500000U, /**< FLEXCAN_BAUD_500K normal bit 500Kbps */ FLEXCAN_BAUD_800K = 800000U, /**< FLEXCAN_BAUD_500K normal bit 800Kbps */ FLEXCAN_BAUD_1M = 1000000U,/**< FLEXCAN_BAUD_1M normal bit 1Mbps */ FLEXCAN_BAUD_2M = 2000000U,/**< FLEXCAN_BAUD_2M normal bit 2Mbps */ FLEXCAN_BAUD_3M = 3000000U,/**< FLEXCAN_BAUD_3M normal bit 3Mbps */ FLEXCAN_BAUD_4M = 4000000U,/**< FLEXCAN_BAUD_4M normal bit 4Mbps */ FLEXCAN_BAUD_5M = 5000000U,/**< FLEXCAN_BAUD_5M normal bit 5Mbps */ FLEXCAN_BAUD_6M = 6000000U,/**< FLEXCAN_BAUD_6M normal bit 6Mbps */ FLEXCAN_BAUD_8M = 8000000U /**< FLEXCAN_BAUD_8M normal bit 8Mbps */ } FLEXCAN_BaudType; /** * @brief FLEXCAN data length type * */ typedef enum { FLEXCAN_DATAWIDTH_8 = 8U, /**< FLEXCAN_DATALEN_8 8 bytes data width */ FLEXCAN_DATAWIDTH_16 = 16U,/**< FLEXCAN_DATALEN_16 16 bytes data width */ FLEXCAN_DATAWIDTH_32 = 32U,/**< FLEXCAN_DATALEN_32 32 bytes data width */ FLEXCAN_DATAWIDTH_64 = 64U /**< FLEXCAN_DATALEN_64 64 bytes data width */ } FLEXCAN_DataWidthType; /** * @brief FLEXCAN data length type * */ typedef enum { FLEXCAN_DIR_DISABLE = 0U, /**< FLEXCAN_DATALEN_8 8 bytes data width */ FLEXCAN_DIR_ENABLE_WITHOUT_TRIG = 1U, /**< FLEXCAN_DATALEN_8 8 bytes data width */ FLEXCAN_DIR_ENABLE_WITH_TRIG = 3U /**< FLEXCAN_DATALEN_8 8 bytes data width */ } FLEXCAN_DirectType; /** * @brief FLEXCAN init structure definition */ typedef struct { FLEXCAN_ClockSrcType eClkSrcSel; /**< Clock Source Select */ FLEXCAN_BaudClkType eClkSrcHz; /**< clock hz for baud-rate */ uint8_t bListenOnly; uint8_t bEnFd; /**< enable FLEXCAN fd */ uint8_t bEnBrs; /**< data bit baud-rate used */ uint8_t bEnRxFifo; /**< Rx FIFO */ uint8_t bEnDma; /**< The DMA feature FLEXCAN only be used in Rx FIFO */ uint8_t u8EnhancedFifoDmaWM; /**< The DMA watermark only work in CANFD FIFO mode, range 1- 12 */ FLEXCAN_BaudType eBaudrate; /**< normal baud-rate */ FLEXCAN_BaudType eDataBaud; /**< data baud-rate */ FLEXCAN_DataWidthType eMbDataWidth; /**< when bEnFd=0, only FLEXCAN be set 8; when bEnFd=1, FLEXCAN be set as 8/16/32/64 */ FLEXCAN_DirectType eDirect; /**