Обновление

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
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]);
}
static void DMA_TransferCompleteCallbackCan1(void) {
CanSerialPortFrameIrqRxProcessing(CAN_PORTS.Can1_IO.env, (uint32_t *) &g_aRxDataBufCan1[0]);
}
//static void DMA_ErrorCallback(void) {
@ -186,7 +190,84 @@ static void vCanPort_InitCan0() {
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
);
@ -198,6 +279,9 @@ void CanPorts_Init() {
vCanPort_InitCan0();
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) {

View File

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