Обновление

This commit is contained in:
cfif 2026-02-03 13:22:43 +03:00
parent 7c893d8719
commit fbb6fd8914
2 changed files with 88 additions and 2 deletions

View File

@ -15,10 +15,14 @@ typedef struct {
#define size_aRxDataBuf 16 #define size_aRxDataBuf 16
ALIGN(256) Can_RamType g_aRxDataBufCan0[size_aRxDataBuf]; // dma ring buffer size is 256 ALIGN(256) Can_RamType g_aRxDataBufCan0[size_aRxDataBuf]; // dma ring buffer size is 256
ALIGN(256) Can_RamType g_aRxDataBufCan1[size_aRxDataBuf]; // dma ring buffer size is 256
static void DMA_TransferCompleteCallback(void) { static void DMA_TransferCompleteCallbackCan0(void) {
CanSerialPortFrameIrqRxProcessing(CAN_PORTS.Can0_IO.env, (uint32_t *) &g_aRxDataBufCan0[0]); 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]);
} }
//static void DMA_ErrorCallback(void) { //static void DMA_ErrorCallback(void) {
@ -186,7 +190,84 @@ static void vCanPort_InitCan0() {
NULL, NULL,
NULL, NULL,
DMA_TransferCompleteCallback, DMA_TransferCompleteCallbackCan0,
NULL
);
}
static void vCanPort_InitCAN1RxTxPin() {
PORT_InitType tInitStruct = {0U};
GPIO_InitType tGpioInitStruct = {0};
// CAN1_STB
// PortD 28: MUX = GPIO output
tInitStruct.u32PortPins = PORT_PIN_28;
tInitStruct.uPortPinMux.u32PortPinMode = PORT_GPIO_MODE;
PORT_InitPins(PORT_D, &tInitStruct);
tGpioInitStruct.u32GpioPins = PORT_PIN_28;
tGpioInitStruct.ePinDirection = GPIO_OUT;
tGpioInitStruct.ePinLevel = GPIO_LOW;
GPIO_InitPins(GPIO_D, &tGpioInitStruct);
// PortA 12: MUX = ALT3, CAN1_RX
tInitStruct.u32PortPins = PORT_PIN_12;
tInitStruct.uPortPinMux.u32PortPinMode = PORTA_12_FLEXCAN1_RX;
tInitStruct.bPullEn = FALSE;
tInitStruct.ePullSel = PORT_PULL_UP;
PORT_InitPins(PORT_A, &tInitStruct);
tGpioInitStruct.u32GpioPins = PORT_PIN_12;
tGpioInitStruct.ePinDirection = GPIO_IN;
GPIO_InitPins((GPIO_InstanceType) PORT_A, &tGpioInitStruct);
// PortA 13: MUX = ALT3, CAN1_TX
tInitStruct.u32PortPins = PORT_PIN_13;
tInitStruct.uPortPinMux.u32PortPinMode = PORTA_13_FLEXCAN1_TX;
PORT_InitPins(PORT_A, &tInitStruct);
tGpioInitStruct.u32GpioPins = PORT_PIN_13;
tGpioInitStruct.ePinDirection = GPIO_OUT;
tGpioInitStruct.ePinLevel = GPIO_HIGH;
GPIO_InitPins(GPIO_A, &tGpioInitStruct);
}
static void vCanPort_InitCan1() {
vCanPort_InitCAN1RxTxPin();
vCanSerialPortFrameDMAInit(
&CAN_PORTS.Can1,
FLEXCAN0,
1, // CAN0 = 0 ... CAN3 = 3
FlexCAN1_IRQn, // // FlexCAN0_IRQn ... FlexCAN3_IRQn
0xFF,
DMA_CHANNEL_1,
DMA_REQ_FLEXCAN1,
(uint8_t *) &g_aRxDataBufCan0[0],
size_aRxDataBuf,
IdCanSoftFilterCan0,
countIdCanSoftFilterCan0,
IdCanFilterFifoCan0,
countIdCanFilterFifoCan0,
DMA1_IRQn,
0xFF,
DMA1_IRQn,
FLEXCAN_BAUD_500K,
FLEXCAN_ID_STD,
0x55,
NULL,
NULL,
NULL,
NULL,
DMA_TransferCompleteCallbackCan1,
NULL NULL
); );
@ -198,6 +279,9 @@ void CanPorts_Init() {
vCanPort_InitCan0(); vCanPort_InitCan0();
CAN_PORTS.Can0_IO = CanPortFrame_GetIo(&CAN_PORTS.Can0); CAN_PORTS.Can0_IO = CanPortFrame_GetIo(&CAN_PORTS.Can0);
CAN_PORTS.Can1.reInit = false;
vCanPort_InitCan1();
CAN_PORTS.Can1_IO = CanPortFrame_GetIo(&CAN_PORTS.Can1);
} }
void CAN0_IRQHandler(void) { void CAN0_IRQHandler(void) {

View File

@ -21,6 +21,8 @@
typedef struct { typedef struct {
tCanSerialPortFrameFlagchip Can0; tCanSerialPortFrameFlagchip Can0;
tSerialPortFrameIO Can0_IO; tSerialPortFrameIO Can0_IO;
tCanSerialPortFrameFlagchip Can1;
tSerialPortFrameIO Can1_IO;
} tCanPorts; } tCanPorts;
extern tCanPorts CAN_PORTS; extern tCanPorts CAN_PORTS;