/** ########################################################################## ** Filename : ** Project : ** Module : ** Processor : ** Version : 1.0 ** Compiler : ** Date/Time : ** Abstract : ** Contents : ** Note : 此文档用于规范代码书写; * 注意, * 1.所有文件用UTF-8格式 * 2.tab键空格4个 * 3.各模块,都要有 初始化函数 init, 反初始化函数 deinit, * 周期任务task,进入休眠goto sleep, * 唤醒后 goto wake ,判断是否可休眠judge_pre_sleep 等主要函数接口 * 4. ** ** (c) Copyright dmdz Co.,Ltd ** -------------------------------------------------------------------------- ** R E V I S I O N H I S T O R Y ** -------------------------------------------------------------------------- ** Date Ver Author Description ** -20191106- --V01-- --LYJ--- --初版-- ** -20230602- --V1.0-- --mingyea--- --修改-- ** #########################################################################*/ #ifndef CAN_CFG_H__ #define CAN_CFG_H__ /*--------------------------------------------------------------------------- - I N C L U D E F I L E S ----------------------------------------------------------------------------*/ #include "common_types.h" #include "Cpu.h" /*--------------------------------------------------------------------------- - D E F I N E S / M A C R O S ----------------------------------------------------------------------------*/ ////非常重要的宏;是否用恒潤的can即采購的AUTOSAR //#define CAN_AUTOSAR_EN 1 //#define CAN_DRIVE_QUEUE_ENABLE //開啟底層隊列 -- 和宏 CAN_AUTOSAR_EN 相互斥 #define CAN_LS_NM 1 //和網絡管理相關的底層 #define CAN_ID_0_EN //決定通產是否開啟 //#define CAN_ID_1_EN //決定通產是否開啟 //#define CAN_ID_2_EN //決定通產是否開啟 //#define CAN_ID_0_FD_EN 1 //开启 CANFD功能 //#define CAN_ID_1_FD_EN 1 //开启 CANFD功能 //#define CAN_ID_2_FD_EN 1 //开启 CANFD功能 #define CAN_ID_TOTAL 1u //和 CAN_USED_CONTROLLER_NUM 密切相關 #define CAN_LOGIC_ID_MAX CAN_ID_TOTAL //////////////////s32k #ifdef CAN_ID_0_FD_EN #else //#define CAN_ID_0_USE_RX_FIFO 1 //是否啟用;rx fifo 在CANFD模式下,不能使用 #endif #ifdef CAN_ID_1_FD_EN #else //#define CAN_ID_1_USE_RX_FIFO 1 //是否啟用;rx fifo 在CANFD模式下,不能使用 #endif #ifdef CAN_ID_2_FD_EN #else //#define CAN_ID_2_USE_RX_FIFO 1 //是否啟用;rx fifo 在CANFD模式下,不能使用 #endif #ifdef CAN_ID_0_USE_RX_FIFO #define CAN_ID_0_RX_FIFO_EN true #else #define CAN_ID_0_RX_FIFO_EN false #endif #ifdef CAN_ID_1_USE_RX_FIFO #define CAN_ID_1_RX_FIFO_EN true #else #define CAN_ID_1_RX_FIFO_EN false #endif #ifdef CAN_ID_2_USE_RX_FIFO #define CAN_ID_2_RX_FIFO_EN true #else #define CAN_ID_2_RX_FIFO_EN false #endif #define FLEXCAN_USE_PAYLOAD_SIZE_8 0u #define FLEXCAN_USE_PAYLOAD_SIZE_16 1u #define FLEXCAN_USE_PAYLOAD_SIZE_32 2u #define FLEXCAN_USE_PAYLOAD_SIZE_64 3u #ifdef CAN_ID_0_FD_EN #define CAN_ID_0_USER_REG_PAYLOAD_SIZE FLEXCAN_USE_PAYLOAD_SIZE_64 #define CAN_ID_0_FD_CFG true #else #define CAN_ID_0_USER_REG_PAYLOAD_SIZE FLEXCAN_USE_PAYLOAD_SIZE_8 #define CAN_ID_0_FD_CFG false #endif #ifdef CAN_ID_1_FD_EN #define CAN_ID_1_USER_REG_PAYLOAD_SIZE FLEXCAN_USE_PAYLOAD_SIZE_64 #define CAN_ID_1_FD_CFG true #else #define CAN_ID_1_USER_REG_PAYLOAD_SIZE FLEXCAN_USE_PAYLOAD_SIZE_8 #define CAN_ID_1_FD_CFG false #endif #ifdef CAN_ID_2_FD_EN #define CAN_ID_2_USER_REG_PAYLOAD_SIZE FLEXCAN_USE_PAYLOAD_SIZE_64 #define CAN_ID_2_FD_CFG true #else #define CAN_ID_2_USER_REG_PAYLOAD_SIZE FLEXCAN_USE_PAYLOAD_SIZE_8 #define CAN_ID_2_FD_CFG false #endif #define CAN_FRAME_MAX_DLC (u16)8u /* CAN底層的一幀字節數 --最大可能的值*/ //如果CANFD要改成64 //#define CAN_DATA_DLC ((uint8)CAN_FRAME_MAX_DLC) #ifdef CAN_ID_0_FD_EN #if (CAN_ID_0_USER_REG_PAYLOAD_SIZE == FLEXCAN_USE_PAYLOAD_SIZE_64) #define CAN_ID_0_REG_PAYLOAD_SIZE FLEXCAN_PAYLOAD_SIZE_64 //#define CAN_MCR_MAXMB_VALUE 7 //最大組數 #define CAN_ID_0_FRAME_DLC 64u /* CAN底層的一幀字節數 */ #elif (CAN_ID_0_USER_REG_PAYLOAD_SIZE == FLEXCAN_USE_PAYLOAD_SIZE_32) #define CAN_ID_0_REG_PAYLOAD_SIZE FLEXCAN_PAYLOAD_SIZE_32 //#define CAN_MCR_MAXMB_VALUE 12 //最大組數 #define CAN_ID_0_FRAME_DLC 32u /* CAN底層的一幀字節數 */ #elif (CAN_ID_0_USER_REG_PAYLOAD_SIZE == FLEXCAN_USE_PAYLOAD_SIZE_16) #define CAN_ID_0_REG_PAYLOAD_SIZE FLEXCAN_PAYLOAD_SIZE_16 //#define CAN_MCR_MAXMB_VALUE 21 //最大組數 #define CAN_ID_0_FRAME_DLC 16u /* CAN底層的一幀字節數 */ #elif (CAN_ID_0_USER_REG_PAYLOAD_SIZE == FLEXCAN_USE_PAYLOAD_SIZE_8) #define CAN_ID_0_REG_PAYLOAD_SIZE FLEXCAN_PAYLOAD_SIZE_8 //#define CAN_MCR_MAXMB_VALUE 32 //最大組數 #define CAN_ID_0_FRAME_DLC 8u /* CAN底層的一幀字節數 */ #endif #else #define CAN_ID_0_REG_PAYLOAD_SIZE FLEXCAN_PAYLOAD_SIZE_8 //#define CAN_MCR_MAXMB_VALUE 32 //最大組數 #define CAN_ID_0_FRAME_DLC 8u /* CAN底層的一幀字節數 */ #endif #ifdef CAN_ID_1_FD_EN #if (CAN_ID_1_USER_REG_PAYLOAD_SIZE == FLEXCAN_USE_PAYLOAD_SIZE_64) #define CAN_ID_1_REG_PAYLOAD_SIZE FLEXCAN_PAYLOAD_SIZE_64 //#define CAN_MCR_MAXMB_VALUE 7 //最大組數 #define CAN_ID_1_FRAME_DLC 64u /* CAN底層的一幀字節數 */ #elif (CAN_ID_1_USER_REG_PAYLOAD_SIZE == FLEXCAN_USE_PAYLOAD_SIZE_32) #define CAN_ID_1_REG_PAYLOAD_SIZE FLEXCAN_PAYLOAD_SIZE_32 //#define CAN_MCR_MAXMB_VALUE 12 //最大組數 #define CAN_ID_1_FRAME_DLC 32u /* CAN底層的一幀字節數 */ #elif (CAN_ID_1_USER_REG_PAYLOAD_SIZE == FLEXCAN_USE_PAYLOAD_SIZE_16) #define CAN_ID_1_REG_PAYLOAD_SIZE FLEXCAN_PAYLOAD_SIZE_16 //#define CAN_MCR_MAXMB_VALUE 21 //最大組數 #define CAN_ID_1_FRAME_DLC 16u /* CAN底層的一幀字節數 */ #elif (CAN_ID_1_USER_REG_PAYLOAD_SIZE == FLEXCAN_USE_PAYLOAD_SIZE_8) #define CAN_ID_1_REG_PAYLOAD_SIZE FLEXCAN_PAYLOAD_SIZE_8 //#define CAN_MCR_MAXMB_VALUE 32 //最大組數 #define CAN_ID_1_FRAME_DLC 8u /* CAN底層的一幀字節數 */ #endif #else #define CAN_ID_1_REG_PAYLOAD_SIZE FLEXCAN_PAYLOAD_SIZE_8 //#define CAN_MCR_MAXMB_VALUE 32 //最大組數 #define CAN_ID_1_FRAME_DLC 8u /* CAN底層的一幀字節數 */ #endif #ifdef CAN_ID_2_FD_EN #if (CAN_ID_2_USER_REG_PAYLOAD_SIZE == FLEXCAN_USE_PAYLOAD_SIZE_64) #define CAN_ID_2_REG_PAYLOAD_SIZE FLEXCAN_PAYLOAD_SIZE_64 //#define CAN_MCR_MAXMB_VALUE 7 //最大組數 #define CAN_ID_2_FRAME_DLC 64u /* CAN底層的一幀字節數 */ #elif (CAN_ID_2_USER_REG_PAYLOAD_SIZE == FLEXCAN_USE_PAYLOAD_SIZE_32) #define CAN_ID_2_REG_PAYLOAD_SIZE FLEXCAN_PAYLOAD_SIZE_32 //#define CAN_MCR_MAXMB_VALUE 12 //最大組數 #define CAN_ID_2_FRAME_DLC 32u /* CAN底層的一幀字節數 */ #elif (CAN_ID_2_USER_REG_PAYLOAD_SIZE == FLEXCAN_USE_PAYLOAD_SIZE_16) #define CAN_ID_2_REG_PAYLOAD_SIZE FLEXCAN_PAYLOAD_SIZE_16 //#define CAN_MCR_MAXMB_VALUE 21 //最大組數 #define CAN_ID_2_FRAME_DLC 16u /* CAN底層的一幀字節數 */ #elif (CAN_ID_2_USER_REG_PAYLOAD_SIZE == FLEXCAN_USE_PAYLOAD_SIZE_8) #define CAN_ID_2_REG_PAYLOAD_SIZE FLEXCAN_PAYLOAD_SIZE_8 //#define CAN_MCR_MAXMB_VALUE 32 //最大組數 #define CAN_ID_2_FRAME_DLC 8u /* CAN底層的一幀字節數 */ #endif #else #define CAN_ID_2_REG_PAYLOAD_SIZE FLEXCAN_PAYLOAD_SIZE_8 //#define CAN_MCR_MAXMB_VALUE 32 //最大組數 #define CAN_ID_2_FRAME_DLC 8u /* CAN底層的一幀字節數 */ #endif //可以參照 #define CAN_FRAME_DLC CAN_ID_0_FRAME_DLC //記得修改,for不同的需求 #define CAN_MSG_MAX_FRMAES 4u /*目前一個完整的數據包 最多的幀數 */ /*數據緩存區大小*/ #define CAN_MSG_MAX_SIZES (u16)(CAN_MSG_MAX_FRMAES * CAN_FRAME_DLC) /*目前一個完整的數據包 最多的字節數 */ #define CAN_FRAME_COM_DLC CAN_FRAME_DLC #define CAN_FRAME_TP_DLC CAN_FRAME_DLC//32 //CAN_FRAME_DLC /*********************************************/ /*消息隊列的深度*/ #define CAN_ID_0_TX_QUEUE_DEPTH 8u #define CAN_ID_0_RX_QUEUE_DEPTH 8u /*測試一次性發送的字節*/ #define CAN_ID_0_TEST_LENGTH CAN_MSG_MAX_SIZES /*****************以上是CAN 0邏輯相關****************************/ /*********************************************/ /*消息隊列的深度*/ #define CAN_ID_1_TX_QUEUE_DEPTH 8u #define CAN_ID_1_RX_QUEUE_DEPTH 8u /*測試一次性發送的字節*/ #define CAN_ID_1_TEST_LENGTH CAN_MSG_MAX_SIZES /*****************以上是CAN 1邏輯相關****************************/ /*********************************************/ /*消息隊列的深度*/ #define CAN_ID_2_TX_QUEUE_DEPTH 8u #define CAN_ID_2_RX_QUEUE_DEPTH 8u /*測試一次性發送的字節*/ #define CAN_ID_2_TEST_LENGTH CAN_MSG_MAX_SIZES /*****************以上是CAN 2邏輯相關****************************/ #define CAN_SWITCH_CONTEXT_ENABLE 1u /*r開啟上下文切換*/ #ifdef CAN_SWITCH_CONTEXT_ENABLE #define CAN_CPU_SR_ALLOC() CPU_SR_ALLOC() #define CAN_CPU_CRITICAL_ENTER() ENTER_CRITICAL() #define CAN_CPU_CRITICAL_EXIT() EXIT_CRITICAL() #else #define CAN_CPU_SR_ALLOC() #define CAN_CPU_CRITICAL_ENTER() #define CAN_CPU_CRITICAL_EXIT() #endif /*! @brief Device instance number */ #define INST_CANCOM0 (0U) #define INST_CANCOM1 (1U) #define INST_CANCOM2 (2U) #if 0 /*! @brief Driver state structure which holds driver runtime data */ //extern flexcan_state_t canCom1_State; extern const flexcan_user_config_t canCom1_InitConfig0; extern const flexcan_user_config_t canCom1_InitConfig1; extern const flexcan_user_config_t canCom1_InitConfig2; #endif #define CAN_ID_0_RX_FIFO_ID_0 0u #if 0 #define CAN_LOGIC0_RX_FIFO_ID_1 1 #define CAN_LOGIC0_RX_FIFO_ID_2 2 #define CAN_LOGIC0_RX_FIFO_ID_3 3 #define CAN_LOGIC0_RX_FIFO_ID_4 4 #define CAN_LOGIC0_RX_FIFO_ID_5 5 #define CAN_LOGIC0_RX_FIFO_ID_6 6 #define CAN_LOGIC0_RX_FIFO_ID_7 7 #endif #define CAN_ID_0_RX_FIFO_ID_MAX 8u #define CAN_ID_0_TX_MAILBOX_ID_0 0u #define CAN_ID_0_TX_MAILBOX_ID_1 1u #define CAN_ID_0_TX_MAILBOX_ID_MAX 3u //先定義邏輯順序--接收mailbox --fifo 以及 發送的MAILBOX #define CAN_ID_0_RX_MAILBOX_ID_0 0u #define CAN_ID_0_RX_MAILBOX_ID_1 1u #ifdef CAN_ID_0_FD_EN #if (CAN_ID_0_USER_REG_PAYLOAD_SIZE == FLEXCAN_USE_PAYLOAD_SIZE_64) #define CAN_ID_0_RX_MAILBOX_ID_MAX 4 // 不超過 CAN_MCR_MAXMB_VALUE-TX //7-TX #define CAN_ID_0_MCR_MAXMB_VALUE (CAN_ID_0_RX_MAILBOX_ID_MAX+CAN_ID_0_TX_MAILBOX_ID_MAX) #elif (CAN_ID_0_USER_REG_PAYLOAD_SIZE == FLEXCAN_USE_PAYLOAD_SIZE_32) #define CAN_ID_0_RX_MAILBOX_ID_MAX 9 // 不超過 CAN_MCR_MAXMB_VALUE-TX //12-TX #define CAN_ID_0_MCR_MAXMB_VALUE (CAN_ID_0_RX_MAILBOX_ID_MAX+CAN_ID_0_TX_MAILBOX_ID_MAX) #elif (CAN_ID_0_USER_REG_PAYLOAD_SIZE == FLEXCAN_USE_PAYLOAD_SIZE_16) #define CAN_ID_0_RX_MAILBOX_ID_MAX 10 // 不超過 CAN_MCR_MAXMB_VALUE-TX //21-TX #define CAN_ID_0_MCR_MAXMB_VALUE (CAN_ID_0_RX_MAILBOX_ID_MAX+CAN_ID_0_TX_MAILBOX_ID_MAX) #elif (CAN_ID_0_USER_REG_PAYLOAD_SIZE == FLEXCAN_USE_PAYLOAD_SIZE_8) #define CAN_ID_0_RX_MAILBOX_ID_MAX 10 // 不超過 CAN_MCR_MAXMB_VALUE-TX //32-TX #define CAN_ID_0_MCR_MAXMB_VALUE (CAN_ID_0_RX_MAILBOX_ID_MAX+CAN_ID_0_TX_MAILBOX_ID_MAX) #endif #else #ifdef CAN_ID_0_USE_RX_FIFO #define CAN_ID_0_RX_MAILBOX_ID_MAX 2u #define CAN_ID_0_MCR_MAXMB_VALUE (16u) #else #define CAN_ID_0_RX_MAILBOX_ID_MAX 10u #define CAN_ID_0_MCR_MAXMB_VALUE (CAN_ID_0_RX_MAILBOX_ID_MAX+CAN_ID_0_TX_MAILBOX_ID_MAX) #endif #endif //can1 #define CAN_ID_1_RX_FIFO_ID_0 0u #if 0 #define CAN_LOGIC0_RX_FIFO_ID_1 1 #define CAN_LOGIC0_RX_FIFO_ID_2 2 #define CAN_LOGIC0_RX_FIFO_ID_3 3 #define CAN_LOGIC0_RX_FIFO_ID_4 4 #define CAN_LOGIC0_RX_FIFO_ID_5 5 #define CAN_LOGIC0_RX_FIFO_ID_6 6 #define CAN_LOGIC0_RX_FIFO_ID_7 7 #endif #define CAN_ID_1_RX_FIFO_ID_MAX 8u #define CAN_ID_1_TX_MAILBOX_ID_0 0u #define CAN_ID_1_TX_MAILBOX_ID_1 1u #define CAN_ID_1_TX_MAILBOX_ID_MAX 3u //先定義邏輯順序--接收mailbox --fifo 以及 發送的MAILBOX #define CAN_ID_1_RX_MAILBOX_ID_0 0u #define CAN_ID_1_RX_MAILBOX_ID_1 1u #ifdef CAN_ID_1_FD_EN #if (CAN_ID_1_USER_REG_PAYLOAD_SIZE == FLEXCAN_USE_PAYLOAD_SIZE_64) #define CAN_ID_1_RX_MAILBOX_ID_MAX 4 // 不超過 CAN_MCR_MAXMB_VALUE-TX //7-TX #define CAN_ID_1_MCR_MAXMB_VALUE (CAN_ID_1_RX_MAILBOX_ID_MAX+CAN_ID_1_TX_MAILBOX_ID_MAX) #elif (CAN_ID_1_USER_REG_PAYLOAD_SIZE == FLEXCAN_USE_PAYLOAD_SIZE_32) #define CAN_ID_1_RX_MAILBOX_ID_MAX 9 // 不超過 CAN_MCR_MAXMB_VALUE-TX //12-TX #define CAN_ID_1_MCR_MAXMB_VALUE (CAN_ID_1_RX_MAILBOX_ID_MAX+CAN_ID_1_TX_MAILBOX_ID_MAX) #elif (CAN_ID_1_USER_REG_PAYLOAD_SIZE == FLEXCAN_USE_PAYLOAD_SIZE_16) #define CAN_ID_1_RX_MAILBOX_ID_MAX 10 // 不超過 CAN_MCR_MAXMB_VALUE-TX //21-TX #define CAN_ID_1_MCR_MAXMB_VALUE (CAN_ID_1_RX_MAILBOX_ID_MAX+CAN_ID_1_TX_MAILBOX_ID_MAX) #elif (CAN_ID_1_USER_REG_PAYLOAD_SIZE == FLEXCAN_USE_PAYLOAD_SIZE_8) #define CAN_ID_1_RX_MAILBOX_ID_MAX 10 // 不超過 CAN_MCR_MAXMB_VALUE-TX //32-TX #define CAN_ID_1_MCR_MAXMB_VALUE (CAN_ID_1_RX_MAILBOX_ID_MAX+CAN_ID_1_TX_MAILBOX_ID_MAX) #endif #else #ifdef CAN_ID_1_USE_RX_FIFO #define CAN_ID_1_RX_MAILBOX_ID_MAX 2u #define CAN_ID_1_MCR_MAXMB_VALUE (16u) #else #define CAN_ID_1_RX_MAILBOX_ID_MAX 10u #define CAN_ID_1_MCR_MAXMB_VALUE (CAN_ID_1_RX_MAILBOX_ID_MAX+CAN_ID_1_TX_MAILBOX_ID_MAX) #endif #endif //can2 #define CAN_ID_2_RX_FIFO_ID_0 0u #if 0 #define CAN_LOGIC0_RX_FIFO_ID_1 1 #define CAN_LOGIC0_RX_FIFO_ID_2 2 #define CAN_LOGIC0_RX_FIFO_ID_3 3 #define CAN_LOGIC0_RX_FIFO_ID_4 4 #define CAN_LOGIC0_RX_FIFO_ID_5 5 #define CAN_LOGIC0_RX_FIFO_ID_6 6 #define CAN_LOGIC0_RX_FIFO_ID_7 7 #endif #define CAN_ID_2_RX_FIFO_ID_MAX 8u #define CAN_ID_2_TX_MAILBOX_ID_0 0u #define CAN_ID_2_TX_MAILBOX_ID_1 1u #define CAN_ID_2_TX_MAILBOX_ID_MAX 3u //先定義邏輯順序--接收mailbox --fifo 以及 發送的MAILBOX #define CAN_ID_2_RX_MAILBOX_ID_0 0u #define CAN_ID_2_RX_MAILBOX_ID_1 1u #ifdef CAN_ID_2_FD_EN #if (CAN_ID_2_USER_REG_PAYLOAD_SIZE == FLEXCAN_USE_PAYLOAD_SIZE_64) #define CAN_ID_2_RX_MAILBOX_ID_MAX 4 // 不超過 CAN_MCR_MAXMB_VALUE-TX //7-TX #define CAN_ID_2_MCR_MAXMB_VALUE (CAN_ID_2_RX_MAILBOX_ID_MAX+CAN_ID_2_TX_MAILBOX_ID_MAX) #elif (CAN_ID_2_USER_REG_PAYLOAD_SIZE == FLEXCAN_USE_PAYLOAD_SIZE_32) #define CAN_ID_2_RX_MAILBOX_ID_MAX 9 // 不超過 CAN_MCR_MAXMB_VALUE-TX //12-TX #define CAN_ID_2_MCR_MAXMB_VALUE (CAN_ID_2_RX_MAILBOX_ID_MAX+CAN_ID_2_TX_MAILBOX_ID_MAX) #elif (CAN_ID_2_USER_REG_PAYLOAD_SIZE == FLEXCAN_USE_PAYLOAD_SIZE_16) #define CAN_ID_2_RX_MAILBOX_ID_MAX 10 // 不超過 CAN_MCR_MAXMB_VALUE-TX //21-TX #define CAN_ID_2_MCR_MAXMB_VALUE (CAN_ID_2_RX_MAILBOX_ID_MAX+CAN_ID_2_TX_MAILBOX_ID_MAX) #elif (CAN_ID_2_USER_REG_PAYLOAD_SIZE == FLEXCAN_USE_PAYLOAD_SIZE_8) #define CAN_ID_2_RX_MAILBOX_ID_MAX 10 // 不超過 CAN_MCR_MAXMB_VALUE-TX //32-TX #define CAN_ID_2_MCR_MAXMB_VALUE (CAN_ID_2_RX_MAILBOX_ID_MAX+CAN_ID_2_TX_MAILBOX_ID_MAX) #endif #else #ifdef CAN_ID_2_USE_RX_FIFO #define CAN_ID_2_RX_MAILBOX_ID_MAX 2u #define CAN_ID_2_MCR_MAXMB_VALUE (16u) #else #define CAN_ID_2_RX_MAILBOX_ID_MAX 10u #define CAN_ID_2_MCR_MAXMB_VALUE (CAN_ID_2_RX_MAILBOX_ID_MAX+CAN_ID_2_TX_MAILBOX_ID_MAX) #endif #endif #define CAN_ID_0_ORed_0_15_MB_IRQn CAN0_ORed_0_31_MB_IRQn #define CAN_ID_0_ORed_16_31_MB_IRQn CAN0_ORed_0_31_MB_IRQn #define CAN_ID_0_Wake_Up_IRQn CAN0_ORed_Err_Wakeup_IRQn #define CAN_ID_0_Error_IRQn CAN0_ORed_Err_Wakeup_IRQn //#define CAN_ID_0_ORed_IRQn CAN0_ORed_IRQn #define CAN_ID_1_ORed_0_15_MB_IRQn CAN1_ORed_0_15_MB_IRQn //#define CAN_ID_1_ORed_16_31_MB_IRQn CAN1_ORed_16_31_MB_IRQn //#define CAN_ID_1_Wake_Up_IRQn CAN1_Wake_Up_IRQn #define CAN_ID_1_Error_IRQn CAN1_Error_IRQn #define CAN_ID_1_ORed_IRQn CAN1_ORed_IRQn #define CAN0 CAN #define CAN_BASE_PTRS { CAN0 } /* 定义数据收发的帧ID,必须跟上位机配置一致 否则无法正常工作 */ /* 定义数据收发帧ID类型,0-标准帧,1-扩展帧 */ #define MSG_ID_TYPE 0 #if (MSG_ID_TYPE == 0) /* 标准帧 */ /* 对于CAN总线,数据收发ID可以定义为一个ID,也可以定义为不同ID */ #define MSG_RECEIVE_ID 0x3C #define MSG_SEND_ID 0x3D #else /* 扩展帧 */ /* 对于CAN总线,数据收发ID可以定义为一个ID,也可以定义为不同ID */ #define MSG_RECEIVE_ID 0x12345 #define MSG_SEND_ID 0x12346 #endif #define CAN_TX_STATE_IDLE 0u #define CAN_TX_STATE_BUSY 1u //#define CAN_ENABLE_HIGH_TX // //#define CAN_LOGIC_DEBUG //debug宏 /*--------------------------------------------------------------------------- - T Y P E D E F I N I T I O N S ----------------------------------------------------------------------------*/ typedef u8 can_ide_t; typedef u8 can_rtr_t; typedef u8 flexcan_event_type_t ; typedef u8 flexcan_user_config_t ; typedef u8 flexcan_msgbuff_id_type_t ; typedef struct { u8 state; }FlexCANState; /* Private typedef -----------------------------------------------------------*/ typedef struct { unsigned char SJW; unsigned char BS1; unsigned char BS2; unsigned short PreScale; } tCAN_BaudRate; typedef enum { STANDARD_CAN = 0, EXTENDED_CAN = 1 }CanIf_PduCanIdType; /** * @brief CAN Tx message structure definition */ typedef struct { #if 0 uint32_t StdId; /*!< Specifies the standard identifier. This parameter can be a value between 0 to 0x7FF. */ uint32_t ExtId; /*!< Specifies the extended identifier. This parameter can be a value between 0 to 0x1FFFFFFF. */ #else uint32_t ID; /*!< CAN identifier */ #endif uint8_t IDE; /*!< Specifies the type of identifier for the message that will be transmitted. This parameter can be a value of @ref CAN_identifier_type */ uint8_t RTR; /*!< Specifies the type of frame for the message that will be transmitted. This parameter can be a value of @ref CAN_remote_transmission_request */ uint8_t DLC; /*!< Specifies the length of the frame that will be transmitted. This parameter can be a value between 0 to 8 */ uint8_t Data[CAN_FRAME_MAX_DLC]; /*!< Contains the data to be transmitted. It ranges from 0 to 0xFF. */ //以下为预留 uint32_t RTS; /*!< Receive time stamps */ uint8_t ESI; /*!< Transmit time-stamp enable or error state indicator */ uint8_t BRS; /*!< Bit rate switch */ uint8_t FDF; /*!< FD format indicator */ uint8_t FMI; /*!< Specifies the index of the filter the message stored in the mailbox passes through. This parameter can be a value between 0 to 0xFF */ } CAN_MsgInfoType; typedef CAN_MsgInfoType CanTxMsg; typedef CAN_MsgInfoType CanRxMsg ; /*--------------------------------------------------------------------------- - G L O B A L V A R I A B L E S - only configuration table allowed here,variables are not allowed! ----------------------------------------------------------------------------*/ /*--------------------------------------------------------------------------- - C O N S T A N T S ----------------------------------------------------------------------------*/ #if 0 extern const CAN_FilterControlType g_can_filter_table[]; extern const CAN_BitrateConfigType g_can_bitrate_cfg_table; extern const CAN_ConfigType g_can_cfg_table; extern const CAN_BitrateConfigType g_can_data_bitrate_cfg_table; #endif extern const tCAN_BaudRate CAN_BaudRateInitTab[] ; // CLK=8MHz extern const uint32_t g_can0_baudrate ; /*--------------------------------------------------------------------------- - F U N C T I O N P R O T O T Y P E ----------------------------------------------------------------------------*/ void can_id_0_normal_irq_task(void *device, uint32_t wpara, uint32_t lpara); #endif /* __CAN_CFG_H__ */