diff --git a/CanPorts.c b/CanPorts.c index a49b869..bf97890 100644 --- a/CanPorts.c +++ b/CanPorts.c @@ -5,6 +5,7 @@ #include "string.h" #include "fc7xxx_driver_port.h" #include "fc7xxx_driver_gpio.h" +#include "candb.h" tCanPorts CAN_PORTS; @@ -12,10 +13,11 @@ typedef struct { uint32_t u32CanRAM[4]; } Can_RamType; -ALIGN(256) Can_RamType g_aRxDataBuf[16]; // dma ring buffer size is 256 +#define size_aRxDataBuf 16 +ALIGN(256) Can_RamType g_aRxDataBufCan0[size_aRxDataBuf]; // dma ring buffer size is 256 static void DMA_TransferCompleteCallback(void) { - CanSerialPortFrameIrqRxProcessing(CAN_PORTS.Can0_IO.env, (uint32_t *)&g_aRxDataBuf[0]); + CanSerialPortFrameIrqRxProcessing(CAN_PORTS.Can0_IO.env, (uint32_t *) &g_aRxDataBufCan0[0]); } @@ -59,14 +61,64 @@ static void vCanPort_InitCAN0RxTxPin() { GPIO_InitPins(GPIO_C, &tGpioInitStruct); } -const FilterTo_FLEXCAN_RxMbFilterType IdCanFilter[4] = {{FLEXCAN_ID_STD, 1, 1, 0}, - {FLEXCAN_ID_STD, 2, 2, 1}, - {FLEXCAN_ID_STD, 3, 3, 1}, - {FLEXCAN_ID_EXT, 0x3, 0x3, 2}}; +#define countIdCanSoftFilterCan0 31 +const FilterTo_FLEXCAN_RxMbFilterType IdCanSoftFilterCan0[countIdCanSoftFilterCan0] = { + {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, 1}, + {FLEXCAN_ID_STD, Diag_Functional_CANID, 0x7FF, 1}, +}; + +#define countIdCanFilterFifoCan0 8 +const FLEXCAN_RxMbFilterType IdCanFilterFifoCan0[countIdCanFilterFifoCan0] = { + {FLEXCAN_ID_STD, 0x100, 0x700}, + {FLEXCAN_ID_STD, 0x200, 0x700}, + {FLEXCAN_ID_STD, 0x300, 0x700}, + {FLEXCAN_ID_STD, 0x400, 0x700}, + {FLEXCAN_ID_STD, 0x500, 0x700}, + {FLEXCAN_ID_STD, 0x600, 0x700}, + {FLEXCAN_ID_STD, Diag_To_CCU_CANID, 0x7FF}, + {FLEXCAN_ID_STD, Diag_Functional_CANID, 0x7FF} +}; + static void vCanPort_InitCan0() { vCanPort_InitCAN0RxTxPin(); + + uint32_t z[31]; + + for (uint8_t i=0; i<31; ++i) { + z[i] = IdCanSoftFilterCan0[i].u32RxCanId; + } + vCanSerialPortFrameDMAInit( &CAN_PORTS.Can0, @@ -79,11 +131,14 @@ static void vCanPort_InitCan0() { DMA_REQ_FLEXCAN0, - (uint8_t *)&g_aRxDataBuf[0], - 16, + (uint8_t *) &g_aRxDataBufCan0[0], + size_aRxDataBuf, - IdCanFilter, - 4, + IdCanSoftFilterCan0, + countIdCanSoftFilterCan0, + + IdCanFilterFifoCan0, + countIdCanFilterFifoCan0, DMA1_IRQn, 0xFF, @@ -111,22 +166,18 @@ void CanPorts_Init() { } -void CAN0_IRQHandler(void) -{ +void CAN0_IRQHandler(void) { FLEXCAN_IRQHandler(0U); } -void CAN1_IRQHandler(void) -{ +void CAN1_IRQHandler(void) { FLEXCAN_IRQHandler(1U); } -void CAN2_IRQHandler(void) -{ +void CAN2_IRQHandler(void) { FLEXCAN_IRQHandler(2U); } -void CAN3_IRQHandler(void) -{ +void CAN3_IRQHandler(void) { FLEXCAN_IRQHandler(3U); } \ No newline at end of file