// // 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); }