From 21f5dc19528f07f0eeb46dfc1f49142950a49a97 Mon Sep 17 00:00:00 2001 From: cfif Date: Mon, 29 Jun 2026 13:13:45 +0300 Subject: [PATCH] =?UTF-8?q?=D0=9E=D0=B1=D0=BD=D0=BE=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=D0=B8=D0=B5=20=D0=BF=D0=BE=D1=81=D0=BB=D0=B5=20=D0=BA?= =?UTF-8?q?=D0=BE=D0=BC=D0=B0=D0=BD=D0=B4=D0=B8=D1=80=D0=BE=D0=B2=D0=BA?= =?UTF-8?q?=D0=B8=2029.06.2026?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CanPorts.c | 129 ++++++++++++++++++++++++++++++++--------------------- CanPorts.h | 2 +- 2 files changed, 80 insertions(+), 51 deletions(-) diff --git a/CanPorts.c b/CanPorts.c index 0cf8e77..0cd9fc1 100644 --- a/CanPorts.c +++ b/CanPorts.c @@ -13,37 +13,8 @@ tCanPorts CAN_PORTS; -static void CAN0_ErrorInterrupt_CallBack(uint8_t u8CanIndex, FLEXCAN_ErrorInfoType *pErrorInfo) { - if (pErrorInfo->u32ErrorValue & FLEXCAN_ESR1_BOFFINT_MASK) { - FLEXCAN_Stop(u8CanIndex); - vCanPort_InitCan0(); - } - FLEXCAN_ClrErrorInfo(u8CanIndex, pErrorInfo); - PROCESS_UNUSED_VAR(u8CanIndex); - PROCESS_UNUSED_VAR(pErrorInfo); -} - -static void CAN0_TxInterruptCallBackType(uint8_t u8CanIndex, uint8_t u8TxHandler) { - osMessageQueuePut(CAN_PORTS.Can0.txDataQueueCan[u8TxHandler], &u8TxHandler, 0x0, 0U); -} - -static void CAN1_ErrorInterrupt_CallBack(uint8_t u8CanIndex, FLEXCAN_ErrorInfoType *pErrorInfo) { - - if (pErrorInfo->u32ErrorValue & FLEXCAN_ESR1_BOFFINT_MASK) { - FLEXCAN_Stop(u8CanIndex); - vCanPort_InitCan1(); - } - - FLEXCAN_ClrErrorInfo(u8CanIndex, pErrorInfo); - PROCESS_UNUSED_VAR(u8CanIndex); - PROCESS_UNUSED_VAR(pErrorInfo); -} - -static void CAN1_TxInterruptCallBackType(uint8_t u8CanIndex, uint8_t u8TxHandler) { - osMessageQueuePut(CAN_PORTS.Can1.txDataQueueCan[u8TxHandler], &u8TxHandler, 0x0, 0U); -} #if (CAN_DMA_EN == 1) @@ -59,11 +30,25 @@ static void DMA_TransferCompleteCallbackCan0(void) { CanSerialPortFrameIrqRxProcessing(CAN_PORTS.Can0_IO.env, (uint32_t *) &g_aRxDataBufCan0[0]); } + static void DMA_TransferCompleteCallbackCan1(void) { CanSerialPortFrameIrqRxProcessing(CAN_PORTS.Can1_IO.env, (uint32_t *) &g_aRxDataBufCan1[0]); } #else + +static void CAN0_ErrorInterrupt_CallBack(uint8_t u8CanIndex, FLEXCAN_ErrorInfoType *pErrorInfo) { + + if (pErrorInfo->u32ErrorValue & FLEXCAN_ESR1_BOFFINT_MASK) { + FLEXCAN_Stop(u8CanIndex); + vCanPort_InitCan0(); + } + + FLEXCAN_ClrErrorInfo(u8CanIndex, pErrorInfo); + PROCESS_UNUSED_VAR(u8CanIndex); + PROCESS_UNUSED_VAR(pErrorInfo); +} + static void CAN0_RxInterrupt_CallBack(uint8_t u8CanIndex, FLEXCAN_RxMsgType *pRxCfg) { CanSerialPortFrameIrqRxProcessingNO_DMA(CAN_PORTS.Can0_IO.env, pRxCfg); } @@ -74,6 +59,18 @@ static void CAN0_RxFifoInterrupt_CallBack(uint8_t u8CanIndex, FLEXCAN_RxMsgType +static void CAN1_ErrorInterrupt_CallBack(uint8_t u8CanIndex, FLEXCAN_ErrorInfoType *pErrorInfo) { + + if (pErrorInfo->u32ErrorValue & FLEXCAN_ESR1_BOFFINT_MASK) { + FLEXCAN_Stop(u8CanIndex); + vCanPort_InitCan1(); + } + + FLEXCAN_ClrErrorInfo(u8CanIndex, pErrorInfo); + PROCESS_UNUSED_VAR(u8CanIndex); + PROCESS_UNUSED_VAR(pErrorInfo); +} + static void CAN1_RxInterrupt_CallBack(uint8_t u8CanIndex, FLEXCAN_RxMsgType *pRxCfg) { CanSerialPortFrameIrqRxProcessingNO_DMA(CAN_PORTS.Can1_IO.env, pRxCfg); @@ -125,8 +122,8 @@ static void vCanPort_InitCAN0RxTxPin() { tGpioInitStruct.ePinLevel = GPIO_HIGH; GPIO_InitPins(GPIO_C, &tGpioInitStruct); } - -#define countIdCanHardSoftFilterCan0 (31 - 4) +/* +#define countIdCanHardSoftFilterCan0 31 const FilterTo_FLEXCAN_RxMbFilterType IdCanHardSoftFilterCan0[countIdCanHardSoftFilterCan0] = { {FLEXCAN_ID_STD, Diag_To_CCU_CANID, 0x7FF, PROTOCOL_CAN_UDS}, {FLEXCAN_ID_STD, Diag_Functional_CANID, 0x7FF, PROTOCOL_CAN_UDS}, @@ -151,27 +148,62 @@ const FilterTo_FLEXCAN_RxMbFilterType IdCanHardSoftFilterCan0[countIdCanHardSoft {FLEXCAN_ID_STD, SMRR_status_CANID, 0x7FF, PROTOCOL_CAN_RAW}, {FLEXCAN_ID_STD, SDM_Cmd_CANID, 0x7FF, PROTOCOL_CAN_RAW}, {FLEXCAN_ID_STD, VEH_VIN_CANID, 0x7FF, PROTOCOL_CAN_RAW}, - {FLEXCAN_ID_STD, DW_STATE_CANID, 0x7FF, PROTOCOL_CAN_RAW}, + {FLEXCAN_ID_STD, OCUFL_MSG_CANID, 0x7FF, PROTOCOL_CAN_RAW}, + {FLEXCAN_ID_STD, OCUFR_MSG_CANID, 0x7FF, PROTOCOL_CAN_RAW}, + {FLEXCAN_ID_STD, OCURL_MSG_CANID, 0x7FF, PROTOCOL_CAN_RAW}, + {FLEXCAN_ID_STD, OCURR_MSG_CANID, 0x7FF, PROTOCOL_CAN_RAW}, + {FLEXCAN_ID_STD, DW_STATE_CANID, 0x7FF, PROTOCOL_CAN_RAW}, + {FLEXCAN_ID_STD, FIU_CCU1_CANID, 0x7FF, PROTOCOL_CAN_RAW}, + {FLEXCAN_ID_STD, FIU_CCU2_CANID, 0x7FF, PROTOCOL_CAN_RAW}, + {FLEXCAN_ID_STD, FIU_CCU3_CANID, 0x7FF, PROTOCOL_CAN_RAW} +}; +*/ + + +#define countIdCanHardSoftFilterCan0 13 +const FilterTo_FLEXCAN_RxMbFilterType IdCanHardSoftFilterCan0[countIdCanHardSoftFilterCan0] = { + {FLEXCAN_ID_STD, Diag_To_CCU_CANID, 0x7FF, PROTOCOL_CAN_UDS}, + {FLEXCAN_ID_STD, Diag_Functional_CANID, 0x7FF, PROTOCOL_CAN_UDS}, + {FLEXCAN_ID_STD, EMS_Veh_CANID, 0x7FF, PROTOCOL_CAN_RAW}, + {FLEXCAN_ID_STD, BCM_Powertrain_CANID, 0x7FF, PROTOCOL_CAN_RAW}, +// {FLEXCAN_ID_STD, EMS_Veh_02_CANID, 0x7FF, PROTOCOL_CAN_RAW}, +// {FLEXCAN_ID_STD, BCM_EEM_CANID, 0x7FF, PROTOCOL_CAN_RAW}, +// {FLEXCAN_ID_STD, DMFR_Msg1_CANID, 0x7FF, PROTOCOL_CAN_RAW}, +// {FLEXCAN_ID_STD, DMFL_Msg1_CANID, 0x7FF, PROTOCOL_CAN_RAW}, +// {FLEXCAN_ID_STD, TM_Stat_CANID, 0x7FF, PROTOCOL_CAN_RAW}, + {FLEXCAN_ID_STD, TM_CP_CANID, 0x7FF, PROTOCOL_CAN_RAW}, +// {FLEXCAN_ID_STD, HVC_CCU_Status_Msg_CANID, 0x7FF, PROTOCOL_CAN_RAW}, + {FLEXCAN_ID_STD, BCM_VEH_STATE_CANID, 0x7FF, PROTOCOL_CAN_RAW}, + {FLEXCAN_ID_STD, EMS_HVC_Req_Msg_CANID, 0x7FF, PROTOCOL_CAN_RAW}, + {FLEXCAN_ID_STD, HVC_Err_Status_Msg_CANID, 0x7FF, PROTOCOL_CAN_RAW}, + {FLEXCAN_ID_STD, BCM_CLIMATIC_DATA_CANID, 0x7FF, PROTOCOL_CAN_RAW}, +// {FLEXCAN_ID_STD, VCU_CCU_Req_CANID, 0x7FF, PROTOCOL_CAN_RAW}, +// {FLEXCAN_ID_STD, ESC_08_CANID, 0x7FF, PROTOCOL_CAN_RAW}, +// {FLEXCAN_ID_STD, SMFL_status_CANID, 0x7FF, PROTOCOL_CAN_RAW}, +// {FLEXCAN_ID_STD, SMFR_status_CANID, 0x7FF, PROTOCOL_CAN_RAW}, +// {FLEXCAN_ID_STD, SMRL_status_CANID, 0x7FF, PROTOCOL_CAN_RAW}, +// {FLEXCAN_ID_STD, SMRR_status_CANID, 0x7FF, PROTOCOL_CAN_RAW}, +// {FLEXCAN_ID_STD, SDM_Cmd_CANID, 0x7FF, PROTOCOL_CAN_RAW}, +// {FLEXCAN_ID_STD, VEH_VIN_CANID, 0x7FF, PROTOCOL_CAN_RAW}, +// {FLEXCAN_ID_STD, OCUFL_MSG_CANID, 0x7FF, PROTOCOL_CAN_RAW}, +// {FLEXCAN_ID_STD, OCUFR_MSG_CANID, 0x7FF, PROTOCOL_CAN_RAW}, +// {FLEXCAN_ID_STD, OCURL_MSG_CANID, 0x7FF, PROTOCOL_CAN_RAW}, +// {FLEXCAN_ID_STD, OCURR_MSG_CANID, 0x7FF, PROTOCOL_CAN_RAW}, +// {FLEXCAN_ID_STD, DW_STATE_CANID, 0x7FF, PROTOCOL_CAN_RAW}, {FLEXCAN_ID_STD, FIU_CCU1_CANID, 0x7FF, PROTOCOL_CAN_RAW}, {FLEXCAN_ID_STD, FIU_CCU2_CANID, 0x7FF, PROTOCOL_CAN_RAW}, {FLEXCAN_ID_STD, FIU_CCU3_CANID, 0x7FF, PROTOCOL_CAN_RAW}, - - - - // {FLEXCAN_ID_STD, OCUFL_MSG_CANID, 0x7FF, PROTOCOL_CAN_RAW}, - // {FLEXCAN_ID_STD, OCUFR_MSG_CANID, 0x7FF, PROTOCOL_CAN_RAW}, - // {FLEXCAN_ID_STD, OCURL_MSG_CANID, 0x7FF, PROTOCOL_CAN_RAW}, - // {FLEXCAN_ID_STD, OCURR_MSG_CANID, 0x7FF, PROTOCOL_CAN_RAW} - - + {FLEXCAN_ID_STD, ESC_04_CANID, 0x7FF, PROTOCOL_CAN_RAW} }; -#if (CAN_DMA_EN == 1) #define countIdCanFilterFifoCan0 1 const FLEXCAN_RxMbFilterType IdCanFilterFifoCan0[countIdCanFilterFifoCan0] = { {FLEXCAN_ID_STD, 0, 0} }; + /* +#if (CAN_DMA_EN == 1) +#define countIdCanFilterFifoCan0 7 const FLEXCAN_RxMbFilterType IdCanFilterFifoCan0[countIdCanFilterFifoCan0] = { {FLEXCAN_ID_STD, 0x100, 0x7FF}, {FLEXCAN_ID_STD, 0x200, 0x7FF}, @@ -181,9 +213,8 @@ const FLEXCAN_RxMbFilterType IdCanFilterFifoCan0[countIdCanFilterFifoCan0] = { {FLEXCAN_ID_STD, Diag_To_CCU_CANID, 0x7FF}, {FLEXCAN_ID_STD, Diag_Functional_CANID, 0x7FF} }; -*/ #endif - +*/ #define countIdCanHardSoftFilterCan1 2 const FilterTo_FLEXCAN_RxMbFilterType IdCanHardSoftFilterCan1[countIdCanHardSoftFilterCan1] = { @@ -199,9 +230,7 @@ const FLEXCAN_RxMbFilterType IdCanFilterFifoCan1[countIdCanFilterFifoCan1] = { }; #endif - bool vCanPort_InitCan0() { - vCanPort_InitCAN0RxTxPin(); #if (CAN_DMA_EN == 1) @@ -233,10 +262,10 @@ bool vCanPort_InitCan0() { FLEXCAN_BAUD_500K, FLEXCAN_ID_STD, 0x55, - CAN0_ErrorInterrupt_CallBack, + NULL, + NULL, NULL, NULL, - NULL,//CAN0_TxInterruptCallBackType, DMA_TransferCompleteCallbackCan0, NULL @@ -338,10 +367,10 @@ bool vCanPort_InitCan1() { FLEXCAN_BAUD_500K, FLEXCAN_ID_STD, 0x55, - CAN1_ErrorInterrupt_CallBack, NULL, NULL, - NULL,//CAN1_TxInterruptCallBackType, + NULL, + NULL, DMA_TransferCompleteCallbackCan1, NULL diff --git a/CanPorts.h b/CanPorts.h index 046cade..543dc8c 100644 --- a/CanPorts.h +++ b/CanPorts.h @@ -8,7 +8,7 @@ #include "CanSerialPortFrame.h" #include "LoggerInterface.h" -#define CAN_DMA_EN 1 +#define CAN_DMA_EN 0 #define PROTOCOL_CAN_RAW 0