Изменена инициализация CAN в соответствии с интерфейсом нового драйвера

This commit is contained in:
cfif 2025-02-24 10:58:39 +03:00
parent 552378efde
commit 23feb4b9b4
2 changed files with 97 additions and 37 deletions

View File

@ -31,11 +31,64 @@ void vCanSerialPorts_InitRCC() {
RCC_EnableAPB1PeriphClk(RCC_APB1_PERIPH_CAN1 | RCC_APB1_PERIPH_CAN2, ENABLE); RCC_EnableAPB1PeriphClk(RCC_APB1_PERIPH_CAN1 | RCC_APB1_PERIPH_CAN2, ENABLE);
} }
void USB_LP_CAN1_RX0_IRQHandler(void) { void CanPort_SetSpeed(CAN_Module *CANx, eCanBaudRate canBaudRate) {
CanSerialPortIrqRxProcessing(&SERIAL_PORTS.SerialPortCan1);
if (CANx == CAN1) {
vCanSerialPortFrameInit(
&SERIAL_PORTS.SerialPortFrameCan1,
CAN1,
canBaudRate,
0x57,
CAN_STD_ID,
0,
20,
0,
20,
0
);
}
if (CANx == CAN2) {
vCanSerialPortFrameInit(
&SERIAL_PORTS.SerialPortFrameCan2,
CAN2,
canBaudRate,
0x57,
CAN_STD_ID,
0,
20,
0,
20,
0
);
}
} }
void vCanSerialPort_InitCAN1(tCanSerialPortNation *env) {
void USB_LP_CAN1_RX0_IRQHandler(void) {
CanSerialPortFrameIrqRxProcessing0(&SERIAL_PORTS.SerialPortFrameCan1);
}
void CAN1_RX1_IRQHandler(void) {
CanSerialPortFrameIrqRxProcessing1(&SERIAL_PORTS.SerialPortFrameCan1);
}
void CAN1_SCE_IRQHandler(void) {
__IO uint32_t err_index = 0;
if (CAN_GetFlagSTS(CAN1, CAN_FLAG_LEC) != RESET) {
err_index = CAN1->ESTS & 0x70;
CAN_ClearFlag(CAN1, CAN_FLAG_LEC);
if (err_index == 0x00000010) {
CAN_DeInit(CAN1);
CanPort_SetSpeed(CAN1, CAN_SERIAL_PORTS.canFrame1.canBaudRate);
}
}
}
void vCanSerialPort_InitCAN1(tCanSerialPortFrameNation *env) {
GPIO_InitType GPIO_InitStructure; GPIO_InitType GPIO_InitStructure;
GPIO_InitStruct(&GPIO_InitStructure); GPIO_InitStruct(&GPIO_InitStructure);
RCC_EnableAPB2PeriphClk(RCC_APB2_PERIPH_AFIO | RCC_APB2_PERIPH_GPIOB, ENABLE); RCC_EnableAPB2PeriphClk(RCC_APB2_PERIPH_AFIO | RCC_APB2_PERIPH_GPIOB, ENABLE);
@ -52,27 +105,33 @@ void vCanSerialPort_InitCAN1(tCanSerialPortNation *env) {
GPIO_ConfigPinRemap(GPIO_RMP2_CAN1, ENABLE); GPIO_ConfigPinRemap(GPIO_RMP2_CAN1, ENABLE);
vCanSerialPortInit(
env,
CAN1,
CAN_BAUD_RATE_250K,
0xFF,
CAN_STD_ID,
0x400,
true,
0x400,
0x00,
512,
0
);
} }
void CAN2_RX0_IRQHandler(void) { void CAN2_RX0_IRQHandler(void) {
CanSerialPortIrqRxProcessing(&SERIAL_PORTS.SerialPortCan2); CanSerialPortFrameIrqRxProcessing0(&SERIAL_PORTS.SerialPortFrameCan2);
} }
void vCanSerialPort_InitCAN2(tCanSerialPortNation *env) { void CAN2_RX1_IRQHandler(void) {
CanSerialPortFrameIrqRxProcessing1(&SERIAL_PORTS.SerialPortFrameCan2);
}
void CAN2_SCE_IRQHandler(void) {
__IO uint32_t err_index = CAN_GetFlagSTS(CAN2, CAN_FLAG_LEC);
if (err_index != RESET) {
err_index = CAN2->ESTS & 0x70;
CAN_ClearFlag(CAN2, CAN_FLAG_LEC);
if (err_index == 0x00000010) {
CAN_DeInit(CAN2);
CanPort_SetSpeed(CAN2, CAN_SERIAL_PORTS.canFrame2.canBaudRate);
}
}
}
void vCanSerialPort_InitCAN2(tCanSerialPortFrameNation *env) {
GPIO_InitType GPIO_InitStructure; GPIO_InitType GPIO_InitStructure;
GPIO_InitStruct(&GPIO_InitStructure); GPIO_InitStruct(&GPIO_InitStructure);
RCC_EnableAPB2PeriphClk(RCC_APB2_PERIPH_AFIO | RCC_APB2_PERIPH_GPIOD, ENABLE); RCC_EnableAPB2PeriphClk(RCC_APB2_PERIPH_AFIO | RCC_APB2_PERIPH_GPIOD, ENABLE);
@ -88,19 +147,20 @@ void vCanSerialPort_InitCAN2(tCanSerialPortNation *env) {
GPIO_ConfigPinRemap(GPIO_RMP3_CAN2, ENABLE); GPIO_ConfigPinRemap(GPIO_RMP3_CAN2, ENABLE);
vCanSerialPortInit( vCanSerialPortFrameInit(
env, env,
CAN2, CAN2,
CAN_BAUD_RATE_250K, CAN_BAUD_RATE_500K,
0xFF, 0x57,
CAN_STD_ID, CAN_STD_ID,
0x400, 0,
true, 20,
0x400, 0,
0x00, 20,
512,
0 0
); );
} }
void CanSerialPorts_Init() { void CanSerialPorts_Init() {
@ -109,10 +169,10 @@ void CanSerialPorts_Init() {
vCanSerialPorts_InitRCC(); vCanSerialPorts_InitRCC();
CanHWControlSet(); CanHWControlSet();
vCanSerialPort_InitCAN1(&env->can1); vCanSerialPort_InitCAN1(&env->canFrame1);
env->can1IO = CanPort_GetIo(&env->can1); env->canFrame1IO = CanPortFrame_GetIo(&env->canFrame1);
vCanSerialPort_InitCAN2(&env->can2); vCanSerialPort_InitCAN2(&env->canFrame2);
env->can2IO = CanPort_GetIo(&env->can2); env->canFrame2IO = CanPortFrame_GetIo(&env->canFrame2);
} }

View File

@ -2,22 +2,22 @@
// Created by cfif on 17.03.2024. // Created by cfif on 17.03.2024.
// //
#include "n32g45x.h" #include "n32g45x.h"
#include "CanSerialPort.h" #include "CanSerialPortFrame.h"
#ifndef NATION_CAN_TEST_CANSERIALPORTS_H #ifndef NATION_CAN_TEST_CANSERIALPORTS_H
#define NATION_CAN_TEST_CANSERIALPORTS_H #define NATION_CAN_TEST_CANSERIALPORTS_H
typedef struct { typedef struct {
tCanSerialPortNation can1; tCanSerialPortFrameNation canFrame1;
tSerialPortIO can1IO; tSerialPortFrameIO canFrame1IO;
tCanSerialPortNation can2; tCanSerialPortFrameNation canFrame2;
tSerialPortIO can2IO; tSerialPortFrameIO canFrame2IO;
} tCanSerialPorts; } tCanSerialPorts;
void CanSerialPorts_Init(); void CanSerialPorts_Init();
void vCanSerialPort_InitCAN1(tCanSerialPortNation *env); void vCanSerialPort_InitCAN1(tCanSerialPortFrameNation *env);
void vCanSerialPort_InitCAN2(tCanSerialPortNation *env); void vCanSerialPort_InitCAN2(tCanSerialPortFrameNation *env);
extern tCanSerialPorts CAN_SERIAL_PORTS; extern tCanSerialPorts CAN_SERIAL_PORTS;
void vCanSerialPorts_InitRCC(); void vCanSerialPorts_InitRCC();
void CanHWControlSet(); void CanHWControlSet();