Обновление

This commit is contained in:
cfif 2026-04-21 09:29:52 +03:00
parent e9880f8cee
commit c117fc598b
2 changed files with 87 additions and 95 deletions

View File

@ -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;
}

View File

@ -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