commit 3e5a18ff2e696353dee001549129d50174e3e400 Author: cfif Date: Mon Jun 2 13:26:40 2025 +0300 Init diff --git a/SerialPorts.c b/SerialPorts.c new file mode 100644 index 0000000..3890ad8 --- /dev/null +++ b/SerialPorts.c @@ -0,0 +1,194 @@ +// +// 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); + +} + + + diff --git a/SerialPorts.h b/SerialPorts.h new file mode 100644 index 0000000..d66e114 --- /dev/null +++ b/SerialPorts.h @@ -0,0 +1,47 @@ +// +// Created by ilya on 25.03.24. +// + +#ifndef SMART_COMPONENTS_SERIALPORTS_H +#define SMART_COMPONENTS_SERIALPORTS_H + +#include "SerialPortArtery.h" +#include "SerialPortP2p.h" +#include "SerialPortHalfDuplexIO.h" + +//Пины RS485 +typedef struct { + tGpioPin receive; + tGpioPin transmit; +} tRs485DirectionPins; + +typedef struct { + //Usart Debug +// tSerialPortArtery Debug; +// tSerialPortIO Debug_IO; + //Usart модема + tSerialPortArtery Modem; + tSerialPortIO Modem_IO; + tSerialPortIO Modem_snif_IO; + //Usart-RS485 + tSerialPortArtery Rs485; + tSerialPortIO Rs485_IO; + + tSerialPortHalfDuplex Rs485_HalfDuplex; + tSerialPortIO Rs485_HalfDuplexIo; + + tSerialPortP2p cliVirtualPort; + tSerialPortIO cliVirtualInIo; + tSerialPortIO cliVirtualOutIo; + + tSerialPortP2p gnssVirtualPort; + tSerialPortIO gnssVirtualInIo; + tSerialPortIO gnssVirtualOutIo; + +} tSerialPorts; + +extern tSerialPorts SERIAL_PORTS; + +void SerialPorts_Init(tRs485DirectionPins *directionPins); + +#endif //SMART_COMPONENTS_SERIALPORTS_H diff --git a/modular.json b/modular.json new file mode 100644 index 0000000..0dd1901 --- /dev/null +++ b/modular.json @@ -0,0 +1,10 @@ +{ + "cmake": { + "inc_dirs": [ + "./" + ], + "srcs": [ + "./**.c" + ] + } +} \ No newline at end of file