From ecf5813de983ce4be4b6544e6a00cc4a9a6a1626 Mon Sep 17 00:00:00 2001 From: cfif Date: Mon, 20 Apr 2026 12:24:16 +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?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CanPorts.c | 158 ++++++++++++++++++++++++++++++++++------------------- 1 file changed, 101 insertions(+), 57 deletions(-) diff --git a/CanPorts.c b/CanPorts.c index d21d41f..f7047ac 100644 --- a/CanPorts.c +++ b/CanPorts.c @@ -37,7 +37,11 @@ static void CAN0_ErrorInterrupt_CallBack(uint8_t u8CanIndex, FLEXCAN_ErrorInfoTy } static void CAN0_RxInterrupt_CallBack(uint8_t u8CanIndex, FLEXCAN_RxMsgType *pRxCfg) { - CanSerialPortFrameIrqRxProcessingNO_DMA(CAN_PORTS.Can0_IO.env, pRxCfg); + CanSerialPortFrameIrqRxProcessingNO_DMA(CAN_PORTS.Can0_IO.env, pRxCfg); +} + +static void CAN0_RxFifoInterrupt_CallBack(uint8_t u8CanIndex, FLEXCAN_RxMsgType *pRxCfg) { + CanSerialPortFrameIrqRxProcessingNO_DMA(CAN_PORTS.Can0_IO.env, pRxCfg); } @@ -82,61 +86,99 @@ static void vCanPort_InitCAN0RxTxPin() { GPIO_InitPins(GPIO_C, &tGpioInitStruct); } -#define countIdCanSoftFilterCan0 31 -const FilterTo_FLEXCAN_RxMbFilterType IdCanSoftFilterCan0[countIdCanSoftFilterCan0] = { - {FLEXCAN_ID_STD, EMS_Veh_CANID, 0}, - {FLEXCAN_ID_STD, BCM_Powertrain_CANID, 0}, - {FLEXCAN_ID_STD, EMS_Veh_02_CANID, 0}, - {FLEXCAN_ID_STD, BCM_EEM_CANID, 0}, - {FLEXCAN_ID_STD, DMFR_Msg1_CANID, 0}, - {FLEXCAN_ID_STD, DMFL_Msg1_CANID, 0}, - {FLEXCAN_ID_STD, TM_Stat_CANID, 0}, - {FLEXCAN_ID_STD, TM_CP_CANID, 0}, - {FLEXCAN_ID_STD, HVC_CCU_Status_Msg_CANID, 0}, - {FLEXCAN_ID_STD, BCM_VEH_STATE_CANID, 0}, - {FLEXCAN_ID_STD, EMS_HVC_Req_Msg_CANID, 0}, - {FLEXCAN_ID_STD, HVC_Err_Status_Msg_CANID, 0}, - {FLEXCAN_ID_STD, BCM_CLIMATIC_DATA_CANID, 0}, - {FLEXCAN_ID_STD, VCU_CCU_Req_CANID, 0}, - {FLEXCAN_ID_STD, ESC_08_CANID, 0}, - {FLEXCAN_ID_STD, SMFL_status_CANID, 0}, - {FLEXCAN_ID_STD, SMFR_status_CANID, 0}, - {FLEXCAN_ID_STD, SMRL_status_CANID, 0}, - {FLEXCAN_ID_STD, SMRR_status_CANID, 0}, - {FLEXCAN_ID_STD, SDM_Cmd_CANID, 0}, - {FLEXCAN_ID_STD, VEH_VIN_CANID, 0}, - {FLEXCAN_ID_STD, OCUFL_MSG_CANID, 0}, - {FLEXCAN_ID_STD, OCUFR_MSG_CANID, 0}, - {FLEXCAN_ID_STD, OCURL_MSG_CANID, 0}, - {FLEXCAN_ID_STD, OCURR_MSG_CANID, 0}, - {FLEXCAN_ID_STD, DW_STATE_CANID, 0}, - {FLEXCAN_ID_STD, FIU_CCU1_CANID, 0}, - {FLEXCAN_ID_STD, FIU_CCU2_CANID, 0}, - {FLEXCAN_ID_STD, FIU_CCU3_CANID, 0}, - {FLEXCAN_ID_STD, Diag_To_CCU_CANID, PROTOCOL_CAN_UDS}, - {FLEXCAN_ID_STD, Diag_Functional_CANID, PROTOCOL_CAN_UDS}, +#define countIdCanHardSoftFilterCan0 31 +const FilterTo_FLEXCAN_RxMbFilterType IdCanHardSoftFilterCan0[countIdCanHardSoftFilterCan0] = { + {FLEXCAN_ID_STD, EMS_Veh_CANID, 0x7FF, 0}, + {FLEXCAN_ID_STD, BCM_Powertrain_CANID, 0x7FF, 0}, + {FLEXCAN_ID_STD, EMS_Veh_02_CANID, 0x7FF, 0}, + {FLEXCAN_ID_STD, BCM_EEM_CANID, 0x7FF, 0}, + {FLEXCAN_ID_STD, DMFR_Msg1_CANID, 0x7FF, 0}, + {FLEXCAN_ID_STD, DMFL_Msg1_CANID, 0x7FF, 0}, + {FLEXCAN_ID_STD, TM_Stat_CANID, 0x7FF, 0}, + {FLEXCAN_ID_STD, TM_CP_CANID, 0x7FF, 0}, + {FLEXCAN_ID_STD, HVC_CCU_Status_Msg_CANID, 0x7FF, 0}, + {FLEXCAN_ID_STD, BCM_VEH_STATE_CANID, 0x7FF, 0}, + {FLEXCAN_ID_STD, EMS_HVC_Req_Msg_CANID, 0x7FF, 0}, + {FLEXCAN_ID_STD, HVC_Err_Status_Msg_CANID, 0x7FF, 0}, + {FLEXCAN_ID_STD, BCM_CLIMATIC_DATA_CANID, 0x7FF, 0}, + {FLEXCAN_ID_STD, VCU_CCU_Req_CANID, 0x7FF, 0}, + {FLEXCAN_ID_STD, ESC_08_CANID, 0x7FF, 0}, + {FLEXCAN_ID_STD, SMFL_status_CANID, 0x7FF, 0}, + {FLEXCAN_ID_STD, SMFR_status_CANID, 0x7FF, 0}, + {FLEXCAN_ID_STD, SMRL_status_CANID, 0x7FF, 0}, + {FLEXCAN_ID_STD, SMRR_status_CANID, 0x7FF, 0}, + {FLEXCAN_ID_STD, SDM_Cmd_CANID, 0x7FF, 0}, + {FLEXCAN_ID_STD, VEH_VIN_CANID, 0x7FF, 0}, + {FLEXCAN_ID_STD, OCUFL_MSG_CANID, 0x7FF, 0}, + {FLEXCAN_ID_STD, OCUFR_MSG_CANID, 0x7FF, 0}, + {FLEXCAN_ID_STD, OCURL_MSG_CANID, 0x7FF, 0}, + {FLEXCAN_ID_STD, OCURR_MSG_CANID, 0x7FF, 0}, + {FLEXCAN_ID_STD, DW_STATE_CANID, 0x7FF, 0}, + {FLEXCAN_ID_STD, FIU_CCU1_CANID, 0x7FF, 0}, + {FLEXCAN_ID_STD, FIU_CCU2_CANID, 0x7FF, 0}, + {FLEXCAN_ID_STD, FIU_CCU3_CANID, 0x7FF, 0}, + {FLEXCAN_ID_STD, Diag_To_CCU_CANID, 0x7FF, PROTOCOL_CAN_UDS}, + {FLEXCAN_ID_STD, Diag_Functional_CANID, 0x7FF, PROTOCOL_CAN_UDS} }; - +/* #define countIdCanFilterFifoCan0 7 const FLEXCAN_RxMbFilterType IdCanFilterFifoCan0[countIdCanFilterFifoCan0] = { - {FLEXCAN_ID_STD, 0x100, 0xFFF}, - {FLEXCAN_ID_STD, 0x200, 0xFFF}, - {FLEXCAN_ID_STD, 0x300, 0xFFF}, - {FLEXCAN_ID_STD, 0x400, 0xFFF}, - {FLEXCAN_ID_STD, 0x500, 0xFFF}, - {FLEXCAN_ID_STD, Diag_To_CCU_CANID, 0xFFF}, - {FLEXCAN_ID_STD, Diag_Functional_CANID, 0xFFF} -}; - -#define countIdCanSoftFilterCan1 1 -const FilterTo_FLEXCAN_RxMbFilterType IdCanSoftFilterCan1[countIdCanSoftFilterCan1] = { - {FLEXCAN_ID_STD, XCP_CCU_RX_CANID, PROTOCOL_CAN_XCP} + {FLEXCAN_ID_STD, 0x100, 0x7FF}, + {FLEXCAN_ID_STD, 0x200, 0x7FF}, + {FLEXCAN_ID_STD, 0x300, 0x7FF}, + {FLEXCAN_ID_STD, 0x400, 0x7FF}, + {FLEXCAN_ID_STD, 0x500, 0x7FF}, + {FLEXCAN_ID_STD, Diag_To_CCU_CANID, 0x7FF}, + {FLEXCAN_ID_STD, Diag_Functional_CANID, 0x7FF} +}; +*/ +/* +#define countIdCanFilterFifoCan0 31 +const FLEXCAN_RxMbFilterType IdCanFilterFifoCan0[countIdCanFilterFifoCan0] = { + {FLEXCAN_ID_STD, EMS_Veh_CANID, 0x7FF}, + {FLEXCAN_ID_STD, BCM_Powertrain_CANID, 0x7FF}, + {FLEXCAN_ID_STD, EMS_Veh_02_CANID, 0x7FF}, + {FLEXCAN_ID_STD, BCM_EEM_CANID, 0x7FF}, + {FLEXCAN_ID_STD, DMFR_Msg1_CANID, 0x7FF}, + {FLEXCAN_ID_STD, DMFL_Msg1_CANID, 0x7FF}, + {FLEXCAN_ID_STD, TM_Stat_CANID, 0x7FF}, + {FLEXCAN_ID_STD, TM_CP_CANID, 0x7FF}, + {FLEXCAN_ID_STD, HVC_CCU_Status_Msg_CANID, 0x7FF}, + {FLEXCAN_ID_STD, BCM_VEH_STATE_CANID, 0x7FF}, + {FLEXCAN_ID_STD, EMS_HVC_Req_Msg_CANID, 0x7FF}, + {FLEXCAN_ID_STD, HVC_Err_Status_Msg_CANID, 0x7FF}, + {FLEXCAN_ID_STD, BCM_CLIMATIC_DATA_CANID, 0x7FF}, + {FLEXCAN_ID_STD, VCU_CCU_Req_CANID, 0x7FF}, + {FLEXCAN_ID_STD, ESC_08_CANID, 0x7FF}, + {FLEXCAN_ID_STD, SMFL_status_CANID, 0x7FF}, + {FLEXCAN_ID_STD, SMFR_status_CANID, 0x7FF}, + {FLEXCAN_ID_STD, SMRL_status_CANID, 0x7FF}, + {FLEXCAN_ID_STD, SMRR_status_CANID, 0x7FF}, + {FLEXCAN_ID_STD, SDM_Cmd_CANID, 0x7FF}, + {FLEXCAN_ID_STD, VEH_VIN_CANID, 0x7FF}, + {FLEXCAN_ID_STD, OCUFL_MSG_CANID, 0x7FF}, + {FLEXCAN_ID_STD, OCUFR_MSG_CANID, 0x7FF}, + {FLEXCAN_ID_STD, OCURL_MSG_CANID, 0x7FF}, + {FLEXCAN_ID_STD, OCURR_MSG_CANID, 0x7FF}, + {FLEXCAN_ID_STD, DW_STATE_CANID, 0x7FF}, + {FLEXCAN_ID_STD, FIU_CCU1_CANID, 0x7FF}, + {FLEXCAN_ID_STD, FIU_CCU2_CANID, 0x7FF}, + {FLEXCAN_ID_STD, FIU_CCU3_CANID, 0x7FF}, + {FLEXCAN_ID_STD, Diag_To_CCU_CANID, 0x7FF}, + {FLEXCAN_ID_STD, Diag_Functional_CANID, 0x7FF} +}; +*/ +#define countIdCanHardSoftFilterCan1 1 +const FilterTo_FLEXCAN_RxMbFilterType IdCanHardSoftFilterCan1[countIdCanHardSoftFilterCan1] = { + {FLEXCAN_ID_STD, XCP_CCU_RX_CANID, PROTOCOL_CAN_XCP} }; +/* #define countIdCanFilterFifoCan1 1 const FLEXCAN_RxMbFilterType IdCanFilterFifoCan1[countIdCanFilterFifoCan1] = { {FLEXCAN_ID_STD, 0, 0} }; +*/ /* uint32_t data[] = { @@ -198,11 +240,13 @@ static bool vCanPort_InitCan0() { (uint8_t *) &g_aRxDataBufCan0[0], size_aRxDataBuf, - IdCanSoftFilterCan0, - countIdCanSoftFilterCan0, + IdCanHardSoftFilterCan0, + countIdCanHardSoftFilterCan0, - IdCanFilterFifoCan0, - countIdCanFilterFifoCan0, +// IdCanSoftFilterCan0, +// countIdCanSoftFilterCan0, +// IdCanFilterFifoCan0, +// countIdCanFilterFifoCan0, DMA0_IRQn, 0xFF, @@ -212,8 +256,8 @@ static bool vCanPort_InitCan0() { FLEXCAN_ID_STD, 0x55, CAN0_ErrorInterrupt_CallBack, - NULL, CAN0_RxInterrupt_CallBack, + CAN0_RxFifoInterrupt_CallBack, NULL, DMA_TransferCompleteCallbackCan0, @@ -277,11 +321,11 @@ static bool vCanPort_InitCan1() { (uint8_t *) &g_aRxDataBufCan1[0], size_aRxDataBuf, - IdCanSoftFilterCan1, - countIdCanSoftFilterCan1, + IdCanHardSoftFilterCan1, + countIdCanHardSoftFilterCan1, - IdCanFilterFifoCan1, - countIdCanFilterFifoCan1, +// IdCanFilterFifoCan1, +// countIdCanFilterFifoCan1, DMA1_IRQn, @@ -324,7 +368,7 @@ void CanPorts_Init(tLoggerInterface *logger) { } CAN_PORTS.Can1_IO = CanPortFrame_GetIo(&CAN_PORTS.Can1); */ - } +} void CAN0_IRQHandler(void) { FLEXCAN_IRQHandler(0U);