Обновление
This commit is contained in:
parent
7c893d8719
commit
fbb6fd8914
88
CanPorts.c
88
CanPorts.c
|
|
@ -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) {
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue