From c117fc598b60fe07d019b2d39558ac0e5f49460a Mon Sep 17 00:00:00 2001 From: cfif Date: Tue, 21 Apr 2026 09:29:52 +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 | 180 +++++++++++++++++++++++++---------------------------- CanPorts.h | 2 + 2 files changed, 87 insertions(+), 95 deletions(-) diff --git a/CanPorts.c b/CanPorts.c index 23e2ffc..8d1e3b1 100644 --- a/CanPorts.c +++ b/CanPorts.c @@ -13,6 +13,8 @@ tCanPorts CAN_PORTS; +#if (CAN_DMA_EN == 1) + typedef struct { uint32_t u32CanRAM[4]; } Can_RamType; @@ -28,7 +30,7 @@ static void DMA_TransferCompleteCallbackCan0(void) { 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) { FLEXCAN_ClrErrorInfo(u8CanIndex, pErrorInfo); @@ -45,6 +47,22 @@ static void CAN0_RxFifoInterrupt_CallBack(uint8_t u8CanIndex, FLEXCAN_RxMsgType } +static void CAN1_ErrorInterrupt_CallBack(uint8_t u8CanIndex, FLEXCAN_ErrorInfoType *pErrorInfo) { + 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); +} + +static void CAN1_RxFifoInterrupt_CallBack(uint8_t u8CanIndex, FLEXCAN_RxMsgType *pRxCfg) { + CanSerialPortFrameIrqRxProcessingNO_DMA(CAN_PORTS.Can1_IO.env, pRxCfg); +} + +#endif + //static void DMA_ErrorCallback(void) { // while (1) { @@ -120,7 +138,8 @@ const FilterTo_FLEXCAN_RxMbFilterType IdCanHardSoftFilterCan0[countIdCanHardSoft {FLEXCAN_ID_STD, FIU_CCU2_CANID, 0x7FF, 0}, {FLEXCAN_ID_STD, FIU_CCU3_CANID, 0x7FF, 0} }; -/* + +#if (CAN_DMA_EN == 1) #define countIdCanFilterFifoCan0 7 const FLEXCAN_RxMbFilterType IdCanFilterFifoCan0[countIdCanFilterFifoCan0] = { {FLEXCAN_ID_STD, 0x100, 0x7FF}, @@ -131,100 +150,26 @@ const FLEXCAN_RxMbFilterType IdCanFilterFifoCan0[countIdCanFilterFifoCan0] = { {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} -}; -*/ +#endif + + #define countIdCanHardSoftFilterCan1 1 const FilterTo_FLEXCAN_RxMbFilterType IdCanHardSoftFilterCan1[countIdCanHardSoftFilterCan1] = { - {FLEXCAN_ID_STD, XCP_CCU_RX_CANID, PROTOCOL_CAN_XCP} + {FLEXCAN_ID_STD, XCP_CCU_RX_CANID, 0x7FF, PROTOCOL_CAN_XCP} }; -/* + +#if (CAN_DMA_EN == 1) #define countIdCanFilterFifoCan1 1 const FLEXCAN_RxMbFilterType IdCanFilterFifoCan1[countIdCanFilterFifoCan1] = { {FLEXCAN_ID_STD, 0, 0} }; -*/ - -/* - uint32_t data[] = { - 0x00000150, // 50 01 00 00 - 0x00000152, // 52 01 00 00 - 0x00000153, // 53 01 00 00 - 0x00000157, // 57 01 00 00 - 0x00000243, // 43 02 00 00 - 0x00000244, // 44 02 00 00 - 0x00000247, // 47 02 00 00 - 0x0000024C, // 4C 02 00 00 - 0x0000025A, // 5A 02 00 00 - 0x00000280, // 80 02 00 00 - 0x00000298, // 98 02 00 00 - 0x00000305, // 05 03 00 00 - 0x00000365, // 65 03 00 00 - 0x0000039D, // 9D 03 00 00 - 0x000003C1, // C1 03 00 00 - 0x000004D0, // D0 04 00 00 - 0x000004D1, // D1 04 00 00 - 0x000004D2, // D2 04 00 00 - 0x000004D3, // D3 04 00 00 - 0x0000050F, // 0F 05 00 00 - 0x0000051A, // 1A 05 00 00 - 0x00000521, // 21 05 00 00 - 0x00000522, // 22 05 00 00 - 0x00000523, // 23 05 00 00 - 0x00000524, // 24 05 00 00 - 0x00000589, // 89 05 00 00 - 0x000005A1, // A1 05 00 00 - 0x000005A2, // A2 05 00 00 - 0x000005A3 // A3 05 00 00 -}; - */ +#endif static bool vCanPort_InitCan0() { vCanPort_InitCAN0RxTxPin(); -/* - uint32_t z[31]; - uint32_t mask = 0; - for (uint8_t i=0; i<29; ++i) { - z[i] = IdCanSoftFilterCan0[i].u32RxCanId; - mask |= z[i]; - } -*/ +#if (CAN_DMA_EN == 1) bool result = vCanSerialPortFrameDMAInit( &CAN_PORTS.Can0, @@ -243,10 +188,8 @@ static bool vCanPort_InitCan0() { IdCanHardSoftFilterCan0, countIdCanHardSoftFilterCan0, -// IdCanSoftFilterCan0, -// countIdCanSoftFilterCan0, -// IdCanFilterFifoCan0, -// countIdCanFilterFifoCan0, + IdCanFilterFifoCan0, + countIdCanFilterFifoCan0, DMA0_IRQn, 0xFF, @@ -255,14 +198,39 @@ static bool vCanPort_InitCan0() { FLEXCAN_BAUD_500K, FLEXCAN_ID_STD, 0x55, - CAN0_ErrorInterrupt_CallBack, - CAN0_RxInterrupt_CallBack, - CAN0_RxFifoInterrupt_CallBack, + NULL, + NULL, + NULL, NULL, DMA_TransferCompleteCallbackCan0, NULL ); +#else + + bool result = vCanSerialPortFrameMbInit( + &CAN_PORTS.Can0, + + FLEXCAN0, + 0, // CAN0 = 0 ... CAN3 = 3 + FlexCAN0_IRQn, // // FlexCAN0_IRQn ... FlexCAN3_IRQn + + 0xFF, + IdCanHardSoftFilterCan0, + countIdCanHardSoftFilterCan0, + + + FLEXCAN_BAUD_500K, + FLEXCAN_ID_STD, + 0x55, + CAN0_ErrorInterrupt_CallBack, + CAN0_RxInterrupt_CallBack, + CAN0_RxFifoInterrupt_CallBack, + NULL + ); + +#endif + return result; } @@ -306,11 +274,12 @@ static bool vCanPort_InitCan1() { vCanPort_InitCAN1RxTxPin(); +#if (CAN_DMA_EN == 1) bool result = vCanSerialPortFrameDMAInit( &CAN_PORTS.Can1, FLEXCAN1, - 1, // CAN0 = 0 ... CAN3 = 3 + 0, // CAN0 = 0 ... CAN3 = 3 FlexCAN1_IRQn, // // FlexCAN0_IRQn ... FlexCAN3_IRQn 0xFF, @@ -324,9 +293,8 @@ static bool vCanPort_InitCan1() { IdCanHardSoftFilterCan1, countIdCanHardSoftFilterCan1, -// IdCanFilterFifoCan1, -// countIdCanFilterFifoCan1, - + IdCanFilterFifoCan1, + countIdCanFilterFifoCan1, DMA1_IRQn, 0xFF, @@ -343,7 +311,29 @@ static bool vCanPort_InitCan1() { DMA_TransferCompleteCallbackCan1, NULL ); +#else + bool result = vCanSerialPortFrameMbInit( + &CAN_PORTS.Can1, + FLEXCAN1, + 1, // CAN0 = 0 ... CAN3 = 3 + FlexCAN1_IRQn, // // FlexCAN0_IRQn ... FlexCAN3_IRQn + + 0xFF, + IdCanHardSoftFilterCan1, + countIdCanHardSoftFilterCan1, + + + FLEXCAN_BAUD_500K, + FLEXCAN_ID_STD, + 0x55, + CAN1_ErrorInterrupt_CallBack, + CAN1_RxInterrupt_CallBack, + CAN1_RxFifoInterrupt_CallBack, + NULL + ); + +#endif return result; } diff --git a/CanPorts.h b/CanPorts.h index d804075..ba4962c 100644 --- a/CanPorts.h +++ b/CanPorts.h @@ -8,6 +8,8 @@ #include "CanSerialPortFrame.h" #include "LoggerInterface.h" +#define CAN_DMA_EN 0 + #define PROTOCOL_CAN_RAW 0 #define PROTOCOL_CAN_XCP 1