SMART_COMPONENTS_SerialPorts/SerialPorts.c

195 lines
6.3 KiB
C

//
// Created by ilya on 25.03.24.
//
#include "SerialPorts.h"
#include "at32f435_437.h"
tSerialPorts SERIAL_PORTS;
///начало-----------------------------------------Rs485-----------------------------------------------------------------
uint8_t buf_UART7_DMA[256];
// IDLE прерывание
void UART7_IRQHandler() {
SerialPort_IrqProcessing_UartIdle(&SERIAL_PORTS.Rs485);
}
// RX
void DMA1_Channel1_IRQHandler(void) {
SerialPort_IrqProcessing_DmaRxLoop(&SERIAL_PORTS.Rs485);
}
// TX
void DMA1_Channel2_IRQHandler(void) {
SerialPort_IrqProcessing_DmaTx(&SERIAL_PORTS.Rs485);
}
static void vSerialPort_InitUART7(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_3;
GPIO_InitStruct.gpio_pull = GPIO_PULL_NONE;
gpio_init(GPIOB, &GPIO_InitStruct);
GPIO_InitStruct.gpio_pins = GPIO_PINS_4;
gpio_init(GPIOB, &GPIO_InitStruct);
gpio_pin_mux_config(GPIOB, GPIO_PINS_SOURCE3, GPIO_MUX_8);
gpio_pin_mux_config(GPIOB, GPIO_PINS_SOURCE4, GPIO_MUX_8);
vSerialPortInitDmaWithNameAndSniffer(
env,
UART7, 115200,
1, 1, 1, 2,
false,
0x58,
buf_UART7_DMA, sizeof(buf_UART7_DMA),
256, 0
);
}
///начало-----------------------------------------Модем-----------------------------------------------------------------
uint8_t buf_USART3_DMA[1024*2];
// IDLE прерывание
void USART3_IRQHandler() {
SerialPort_IrqProcessing_UartIdle(&SERIAL_PORTS.Modem);
// SerialPort_IrqProcessingFilter_UartIdle(&SERIAL_PORTS.Modem, &SERIAL_PORTS.gnssVirtualInIo,
// &counterBufFilterStr, BufFilterStr, sizeof(BufFilterStr),
// FilterStr, 1);
}
// RX
void DMA1_Channel3_IRQHandler(void) {
SerialPort_IrqProcessing_DmaRxLoop(&SERIAL_PORTS.Modem);
// SerialPort_IrqProcessingFilter_DmaRxLoop(&SERIAL_PORTS.Modem, &SERIAL_PORTS.gnssVirtualInIo,
// &counterBufFilterStr, BufFilterStr, sizeof(BufFilterStr),
// FilterStr, 1);
}
// TX
void DMA1_Channel4_IRQHandler(void) {
SerialPort_IrqProcessing_DmaTx(&SERIAL_PORTS.Modem);
}
// Настройка порта
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_10;
GPIO_InitStruct.gpio_pull = GPIO_PULL_NONE;
gpio_init(GPIOB, &GPIO_InitStruct);
GPIO_InitStruct.gpio_pins = GPIO_PINS_11;
gpio_init(GPIOB, &GPIO_InitStruct);
gpio_pin_mux_config(GPIOB, GPIO_PINS_SOURCE10, GPIO_MUX_7);
gpio_pin_mux_config(GPIOB, GPIO_PINS_SOURCE11, GPIO_MUX_7);
vSerialPortInitDmaWithNameAndSniffer(
env,
USART3, 115200,
1, 3, 1, 4,
false,
0x56,
buf_USART3_DMA, sizeof(buf_USART3_DMA),
1024 * 6, 2048
);
}
///конец------------------------------------------Модем-----------------------------------------------------------------
/*
uint8_t buf_USART2_DMA[256];
// IDLE прерывание
void USART2_IRQHandler() {
SerialPort_IrqProcessing_UartIdle(&SERIAL_PORTS.Debug);
}
// RX
void DMA1_Channel5_IRQHandler(void) {
SerialPort_IrqProcessing_DmaRxLoop(&SERIAL_PORTS.Debug);
}
// TX
void DMA1_Channel6_IRQHandler(void) {
SerialPort_IrqProcessing_DmaTx(&SERIAL_PORTS.Debug);
}
// Настройка порта радиомодуля
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_5;
GPIO_InitStruct.gpio_pull = GPIO_PULL_NONE;
gpio_init(GPIOD, &GPIO_InitStruct);
GPIO_InitStruct.gpio_pins = GPIO_PINS_6;
gpio_init(GPIOD, &GPIO_InitStruct);
gpio_pin_mux_config(GPIOD, GPIO_PINS_SOURCE5, GPIO_MUX_7);
gpio_pin_mux_config(GPIOD, GPIO_PINS_SOURCE6, GPIO_MUX_7);
vSerialPortInitDmaWithNameAndSniffer(
env,
USART2, 115200,
1, 5, 1, 6,
false,
0x59,
buf_USART2_DMA, sizeof(buf_USART2_DMA),
256, 0
);
}
*/
///конец---------------------------------------Debug_Usart--------------------------------------------------------------
void SerialPorts_Init(tRs485DirectionPins *directionPins) {
tSerialPorts *env = &SERIAL_PORTS;
// Usart1 Rs485
vSerialPort_InitUART7(&env->Rs485);
SERIAL_PORTS.Rs485_IO = vSerialPortGetIo(&SERIAL_PORTS.Rs485);
SERIAL_PORTS.Rs485_HalfDuplex = vSerialPortHalfDuplexInit(&SERIAL_PORTS.Rs485_IO,
&directionPins->transmit,
&directionPins->receive);
SERIAL_PORTS.Rs485_HalfDuplexIo = vSerialPortHalfDuplexGetIo(&SERIAL_PORTS.Rs485_HalfDuplex);
//// Usart3 Модем
vSerialPort_InitUSART3(&env->Modem);
SERIAL_PORTS.Modem_IO = vSerialPortGetIo(&SERIAL_PORTS.Modem);
SERIAL_PORTS.Modem_snif_IO = vSerialPortGetSnifferIo(&SERIAL_PORTS.Modem);
//// Usart2 Debug-usart
// vSerialPort_InitUSART2(&env->Debug);
// SERIAL_PORTS.Debug_IO = vSerialPortGetIo(&env->Debug);
//// Виртуальный сериал порт
SerialPortP2p_Init(&env->cliVirtualPort, 3 * 1024, 1024);
env->cliVirtualInIo = SerialPortP2p_GetIoFirst(&env->cliVirtualPort);
env->cliVirtualOutIo = SerialPortP2p_GetIoSecond(&env->cliVirtualPort);
SerialPortP2p_Init(&env->gnssVirtualPort, 256, 256);
env->gnssVirtualInIo = SerialPortP2p_GetIoFirst(&env->gnssVirtualPort);
env->gnssVirtualOutIo = SerialPortP2p_GetIoSecond(&env->gnssVirtualPort);
}