HVAC_DEV_V2_SerialPorts/SerialPorts.c

199 lines
5.6 KiB
C

//
// Created by cfif on 05.05.23.
//
#include "SerialPorts.h"
#include "at32f435_437.h"
tSerialPorts SERIAL_PORTS;
uint8_t buf_USART3_DMA[256];
// IDLE прерывание
void USART3_IRQHandler() {
SerialPort_IrqProcessing_UartIdle(&SERIAL_PORTS.DEBUG_USART3);
}
// RX
void DMA1_Channel1_IRQHandler(void) {
SerialPort_IrqProcessing_DmaRxLoop(&SERIAL_PORTS.DEBUG_USART3);
}
// TX
void DMA1_Channel2_IRQHandler(void) {
SerialPort_IrqProcessing_DmaTx(&SERIAL_PORTS.DEBUG_USART3);
}
// Настройка порта
static void vSerialPort_InitUSART3(tSerialPortArtery *env) {
gpio_init_type GPIO_InitStruct;
gpio_default_para_init(&GPIO_InitStruct);
GPIO_InitStruct.gpio_drive_strength = GPIO_DRIVE_STRENGTH_STRONGER;
GPIO_InitStruct.gpio_out_type = GPIO_OUTPUT_PUSH_PULL;
GPIO_InitStruct.gpio_mode = GPIO_MODE_MUX;
GPIO_InitStruct.gpio_pins = GPIO_PINS_4;
GPIO_InitStruct.gpio_pull = GPIO_PULL_NONE;
gpio_init(GPIOC, &GPIO_InitStruct);
GPIO_InitStruct.gpio_pins = GPIO_PINS_5;
gpio_init(GPIOC, &GPIO_InitStruct);
gpio_pin_mux_config(GPIOC, GPIO_PINS_SOURCE4, GPIO_MUX_7);
gpio_pin_mux_config(GPIOC, GPIO_PINS_SOURCE5, GPIO_MUX_7);
vSerialPortInitDmaWithNameAndSniffer(
env, USART3, 921600,
1, 1, 1, 2,
false, 0xFF,
buf_USART3_DMA, sizeof(buf_USART3_DMA),
1024, 0
);
}
uint8_t buf_USART2_DMA[256];
// IDLE прерывание
void USART2_IRQHandler() {
SerialPort_IrqProcessing_UartIdle(&SERIAL_PORTS.Rs485_USART2);
}
// RX
void DMA1_Channel7_IRQHandler(void) {
SerialPort_IrqProcessing_DmaRxLoop(&SERIAL_PORTS.Rs485_USART2);
}
// TX
void DMA2_Channel7_IRQHandler(void) {
SerialPort_IrqProcessing_DmaTx(&SERIAL_PORTS.Rs485_USART2);
}
// Настройка порта
static void vSerialPort_InitUSART2(tSerialPortArtery *env) {
gpio_init_type GPIO_InitStruct;
gpio_default_para_init(&GPIO_InitStruct);
GPIO_InitStruct.gpio_drive_strength = GPIO_DRIVE_STRENGTH_STRONGER;
GPIO_InitStruct.gpio_out_type = GPIO_OUTPUT_PUSH_PULL;
GPIO_InitStruct.gpio_mode = GPIO_MODE_MUX;
GPIO_InitStruct.gpio_pins = GPIO_PINS_2 | GPIO_PINS_3;
GPIO_InitStruct.gpio_pull = GPIO_PULL_NONE;
gpio_init(GPIOA, &GPIO_InitStruct);
gpio_pin_mux_config(GPIOA, GPIO_PINS_SOURCE2, GPIO_MUX_7);
gpio_pin_mux_config(GPIOA, GPIO_PINS_SOURCE3, GPIO_MUX_7);
vSerialPortInitDmaWithNameAndSniffer(
env, USART2, 115200,
1, 7, 2, 7,
false, 0xFF,
buf_USART2_DMA, sizeof(buf_USART2_DMA),
1024, 0
);
}
/*
uint8_t buf_UART4_DMA[256];
// IDLE прерывание
void USART4_IRQHandler() {
SerialPort_IrqProcessing_UartIdle(&SERIAL_PORTS.LIN1_UART4);
}
// RX
void DMA1_Channel3_IRQHandler(void) {
SerialPort_IrqProcessing_DmaRxLoop(&SERIAL_PORTS.LIN1_UART4);
}
// TX
void DMA1_Channel4_IRQHandler(void) {
SerialPort_IrqProcessing_DmaTx(&SERIAL_PORTS.LIN1_UART4);
}
*/
void UART4_IRQHandler(void) {
SerialPort_IrqProcessing_UartLin(&SERIAL_PORTS.LIN1_UART4);
}
// Настройка порта
static void vSerialPort_InitUSART4(tSerialPortArtery *env) {
gpio_init_type GPIO_InitStruct;
gpio_default_para_init(&GPIO_InitStruct);
GPIO_InitStruct.gpio_drive_strength = GPIO_DRIVE_STRENGTH_STRONGER;
GPIO_InitStruct.gpio_out_type = GPIO_OUTPUT_PUSH_PULL;
GPIO_InitStruct.gpio_mode = GPIO_MODE_MUX;
GPIO_InitStruct.gpio_pins = GPIO_PINS_1;
GPIO_InitStruct.gpio_pull = GPIO_PULL_NONE;
gpio_init(GPIOA, &GPIO_InitStruct);
GPIO_InitStruct.gpio_pins = GPIO_PINS_0;
gpio_init(GPIOA, &GPIO_InitStruct);
gpio_pin_mux_config(GPIOA, GPIO_PINS_SOURCE1, GPIO_MUX_8);
gpio_pin_mux_config(GPIOA, GPIO_PINS_SOURCE0, GPIO_MUX_8);
/*
vSerialPortInitDmaWithNameAndSniffer(
env, UART4, 9600,
1, 3, 1, 4,
false, 0xFF,
buf_UART4_DMA, sizeof(buf_UART4_DMA),
256, 0
);
*/
vSerialPortLinInit(
env,
UART4,
false,
9600,
UART4_IRQn,
CRM_UART4_PERIPH_CLOCK,
0xFF,
16,
0
);
}
void SerialPorts_Init(tRs485DirectionPins *directionPins) {
tSerialPorts *env = &SERIAL_PORTS;
// LIN5
vSerialPort_InitUSART4(&env->LIN1_UART4);
SERIAL_PORTS.LIN1_UART4_IO = vSerialPortGetIo(&SERIAL_PORTS.LIN1_UART4);
vSerialPort_InitUSART3(&env->DEBUG_USART3);
SERIAL_PORTS.DEBUG_USART3_IO = vSerialPortGetIo(&SERIAL_PORTS.DEBUG_USART3);
vSerialPort_InitUSART2(&env->Rs485_USART2);
SERIAL_PORTS.Rs485_USART2_IO = vSerialPortGetIo(&SERIAL_PORTS.Rs485_USART2);
SERIAL_PORTS.Rs485_USART2_HalfDuplex = vSerialPortHalfDuplexInit(&SERIAL_PORTS.Rs485_USART2_IO,
&directionPins->transmit,
&directionPins->receive);
SERIAL_PORTS.Rs485_USART2_HalfDuplexIo = vSerialPortHalfDuplexGetIo(&SERIAL_PORTS.Rs485_USART2_HalfDuplex);
SerialPortVirt_Init(&env->cliVirtualPortOut, 4096);
env->cliVirtualPortOut_Io = SerialPortVirt_GetIo(&env->cliVirtualPortOut);
SerialPortUsb_Init(&env->SerialPortUsb1, 1, 1024, 0);
env->SerialPortUsb1IO = SerialPortUsb_GetIo(&env->SerialPortUsb1);
env->SerialPortUsb1SnifferIO = SerialPortUsb_GetSnifferIo(&env->SerialPortUsb1);
SerialPortUsb_Init(&env->SerialPortUsb2, 2, 1024, 0);
env->SerialPortUsb2IO = SerialPortUsb_GetIo(&env->SerialPortUsb2);
env->SerialPortUsb2SnifferIO = SerialPortUsb_GetSnifferIo(&env->SerialPortUsb2);
}