// // Created by cfif on 05.05.23. // #include "SerialPorts.h" #include "at32f435_437.h" tSerialPorts SERIAL_PORTS; //void USART3_IRQHandler() { // vSerialPortIrqProcessing(&SERIAL_PORTS.GONEC1); //} uint8_t buf_USART3_DMA[3200]; // IDLE прерывание void USART3_IRQHandler() { // Смотрим idle прерывание // if (usart_flag_get(SERIAL_PORTS.MBEE.uart, USART_IDLEF_FLAG)) { // // Сброс прерывания // usart_data_receive(SERIAL_PORTS.MBEE.uart); // // vSerialPortIrqProcessingDMAloop(&SERIAL_PORTS.MBEE, SERIAL_PORTS.MBEE.dma_rx_init_struct.buffer_size - // SERIAL_PORTS.MBEE.dma_channel->dtcnt); // // } SerialPort_IrqProcessing_UartIdle(&SERIAL_PORTS.Rs485); } // RX void DMA1_Channel3_IRQHandler(void) { // if (dma_flag_get(DMA1_FDT3_FLAG)) { // // vSerialPortIrqProcessingDMAloop(&SERIAL_PORTS.MBEE, // SERIAL_PORTS.MBEE.dma_rx_init_struct.buffer_size); // SERIAL_PORTS.MBEE.offset = 0; // dma_flag_clear(DMA1_FDT3_FLAG); // } SerialPort_IrqProcessing_DmaRxLoop(&SERIAL_PORTS.Rs485); } // TX void DMA1_Channel4_IRQHandler(void) { // if (dma_flag_get(DMA1_FDT4_FLAG)) { // dma_flag_clear(DMA1_FDT4_FLAG); //// osMutexRelease(SERIAL_PORTS.GONEC1.dmaAccess); // } SerialPort_IrqProcessing_DmaTx(&SERIAL_PORTS.Rs485); } // Настройка порта радиомодуля 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_PINS_11; GPIO_InitStruct.gpio_pull = GPIO_PULL_NONE; gpio_init(GPIOC, &GPIO_InitStruct); gpio_pin_mux_config(GPIOC, GPIO_PINS_SOURCE10, GPIO_MUX_7); gpio_pin_mux_config(GPIOC, GPIO_PINS_SOURCE11, GPIO_MUX_7); vSerialPortInitDmaWithNameAndSniffer( env, USART3, 115200, 1, 3, 1, 4, false, 0xFF, buf_USART3_DMA, sizeof(buf_USART3_DMA), 3200, 3200 ); } /* //начало------------------------------------Радиомодуль----------------------------------------------------------------- //начало------------------------------------Радиомодуль----------------------------------------------------------------- //начало------------------------------------Радиомодуль----------------------------------------------------------------- //void USART3_IRQHandler() { // vSerialPortIrqProcessing(&SERIAL_PORTS.GONEC1); //} uint8_t buf_USART3_DMA[3200]; // IDLE прерывание void USART3_IRQHandler() { // Смотрим idle прерывание // if (usart_flag_get(SERIAL_PORTS.MBEE.uart, USART_IDLEF_FLAG)) { // // Сброс прерывания // usart_data_receive(SERIAL_PORTS.MBEE.uart); // // vSerialPortIrqProcessingDMAloop(&SERIAL_PORTS.MBEE, SERIAL_PORTS.MBEE.dma_rx_init_struct.buffer_size - // SERIAL_PORTS.MBEE.dma_channel->dtcnt); // // } SerialPort_IrqProcessing_UartIdle(&SERIAL_PORTS.MBEE); } // RX void DMA1_Channel3_IRQHandler(void) { // if (dma_flag_get(DMA1_FDT3_FLAG)) { // // vSerialPortIrqProcessingDMAloop(&SERIAL_PORTS.MBEE, // SERIAL_PORTS.MBEE.dma_rx_init_struct.buffer_size); // SERIAL_PORTS.MBEE.offset = 0; // dma_flag_clear(DMA1_FDT3_FLAG); // } SerialPort_IrqProcessing_DmaRxLoop(&SERIAL_PORTS.MBEE); } // TX void DMA1_Channel4_IRQHandler(void) { // if (dma_flag_get(DMA1_FDT4_FLAG)) { // dma_flag_clear(DMA1_FDT4_FLAG); //// osMutexRelease(SERIAL_PORTS.GONEC1.dmaAccess); // } SerialPort_IrqProcessing_DmaTx(&SERIAL_PORTS.MBEE); } // Настройка порта радиомодуля 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_PINS_11; GPIO_InitStruct.gpio_pull = GPIO_PULL_NONE; gpio_init(GPIOB, &GPIO_InitStruct); // GPIO_InitStruct.gpio_pull = GPIO_PULL_DOWN; GPIO_InitStruct.gpio_pins = GPIO_PINS_14; 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); gpio_pin_mux_config(GPIOB, GPIO_PINS_SOURCE14, GPIO_MUX_7); // gpio_pin_mux_config(GPIOB, GPIO_PINS_SOURCE13, GPIO_MUX_8); // vSerialPortInitNameWithSniffer(env, USART3, true, 115200, 0x55, 1024, 1024); // env->dmaAccess = osMutexNew(NULL); // vSerialPortInitDMAName(env, USART3, DMA1, // DMA1_CHANNEL3, DMA1MUX_CHANNEL3, DMAMUX_DMAREQ_ID_USART3_RX, DMA1_Channel3_IRQn, // DMA1_FDT3_FLAG, // buf_USART3_DMA, sizeof(buf_USART3_DMA), // DMA1_CHANNEL4, DMA1MUX_CHANNEL4, DMAMUX_DMAREQ_ID_USART3_TX, DMA1_Channel4_IRQn, // DMA1_FDT4_FLAG, // false, 9600, 0x59, 3200); vSerialPortInitDmaExtWithNameAndSniffer( env, USART3, 9600, 1, 3, 1, 4, false, USART_HARDWARE_FLOW_RTS, 0x59, buf_USART3_DMA, sizeof(buf_USART3_DMA), 3200, 0 ); } void SerialMBEEInit(tSerialPorts *env, uint32_t bt) { vSerialPortInitDmaExtWithNameAndSniffer( &env->MBEE, USART3, bt, 1, 3, 1, 4, false, USART_HARDWARE_FLOW_RTS, 0x59, buf_USART3_DMA, sizeof(buf_USART3_DMA), 3200, 0 ); } //конец-------------------------------------Радиомодуль----------------------------------------------------------------- //конец-------------------------------------Радиомодуль----------------------------------------------------------------- //конец-------------------------------------Радиомодуль----------------------------------------------------------------- //начало-------------------------------------ГНСС----------------------------------------------------------------------- //начало-------------------------------------ГНСС----------------------------------------------------------------------- //начало-------------------------------------ГНСС----------------------------------------------------------------------- uint8_t buf_USART2_DMA[100]; //void USART2_IRQHandler() { // vSerialPortIrqProcessing(&SERIAL_PORTS.PRO04); //} // IDLE прерывание void USART2_IRQHandler() { // Смотрим idle прерывание // if (usart_flag_get(SERIAL_PORTS.PRO04.uart, USART_IDLEF_FLAG)) { // // Сброс прерывания // usart_data_receive(SERIAL_PORTS.PRO04.uart); // // vSerialPortIrqProcessingDMAloop(&SERIAL_PORTS.PRO04, SERIAL_PORTS.PRO04.dma_rx_init_struct.buffer_size - // SERIAL_PORTS.PRO04.dma_channel->dtcnt); // // } SerialPort_IrqProcessing_UartIdle(&SERIAL_PORTS.PRO04); } // RX void DMA1_Channel6_IRQHandler(void) { // if (dma_flag_get(DMA1_FDT6_FLAG)) { // // vSerialPortIrqProcessingDMAloop(&SERIAL_PORTS.PRO04, // SERIAL_PORTS.PRO04.dma_rx_init_struct.buffer_size); // SERIAL_PORTS.PRO04.offset = 0; // dma_flag_clear(DMA1_FDT6_FLAG); // } SerialPort_IrqProcessing_DmaRxLoop(&SERIAL_PORTS.PRO04); } // TX void DMA1_Channel7_IRQHandler(void) { // if (dma_flag_get(DMA1_FDT7_FLAG)) { // dma_flag_clear(DMA1_FDT7_FLAG); // osMutexRelease(SERIAL_PORTS.PRO04.dmaAccess); // } SerialPort_IrqProcessing_DmaTx(&SERIAL_PORTS.PRO04); } // Настройка порта PRO04 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); // vSerialPortInitName(env, USART2, false, 115200, 0xFF, 256); // env->dmaAccess = osMutexNew(NULL); // vSerialPortInitDMAName(env, USART2, DMA1, // DMA1_CHANNEL6, DMA1MUX_CHANNEL6, DMAMUX_DMAREQ_ID_USART2_RX, DMA1_Channel6_IRQn, // DMA1_FDT6_FLAG, // buf_USART2_DMA, sizeof(buf_USART2_DMA), // DMA1_CHANNEL7, DMA1MUX_CHANNEL7, DMAMUX_DMAREQ_ID_USART2_TX, DMA1_Channel7_IRQn, // DMA1_FDT7_FLAG, // false, 115200, 0xFF, 256); vSerialPortInitDmaWithNameAndSniffer( env, USART2, 115200, 1, 6, 1, 7, false, 0xFF, buf_USART2_DMA, sizeof(buf_USART2_DMA), 256, 256 ); } //конец--------------------------------------ГНСС----------------------------------------------------------------------- //конец--------------------------------------ГНСС----------------------------------------------------------------------- //конец--------------------------------------ГНСС----------------------------------------------------------------------- //начало-------------------------------------Модем----------------------------------------------------------------------- //начало-------------------------------------Модем----------------------------------------------------------------------- //начало-------------------------------------Модем----------------------------------------------------------------------- uint8_t buf_USART1_DMA[2048]; //void USART1_IRQHandler() { // vSerialPortIrqProcessing(&SERIAL_PORTS.GSM); //} // IDLE прерывание void USART1_IRQHandler() { SerialPort_IrqProcessing_UartIdle(&SERIAL_PORTS.GSM); // Смотрим idle прерывание // if (usart_flag_get(SERIAL_PORTS.GSM.uart, USART_IDLEF_FLAG)) { // // Сброс прерывания // usart_data_receive(SERIAL_PORTS.GSM.uart); // // vSerialPortIrqProcessingDMAloop(&SERIAL_PORTS.PRO04, SERIAL_PORTS.GSM.dma_rx_init_struct.buffer_size - // SERIAL_PORTS.GSM.dma_channel->dtcnt); // // } } // RX void DMA1_Channel1_IRQHandler(void) { SerialPort_IrqProcessing_DmaRxLoop(&SERIAL_PORTS.GSM); // if (dma_flag_get(DMA1_FDT1_FLAG)) { // // vSerialPortIrqProcessingDMAloop(&SERIAL_PORTS.GSM, // SERIAL_PORTS.GSM.dma_rx_init_struct.buffer_size); // SERIAL_PORTS.GSM.offset = 0; // dma_flag_clear(DMA1_FDT1_FLAG); // } } // TX void DMA1_Channel2_IRQHandler(void) { SerialPort_IrqProcessing_DmaTx(&SERIAL_PORTS.GSM); // // if (dma_flag_get(DMA1_FDT2_FLAG)) { // dma_flag_clear(DMA1_FDT2_FLAG); //// osMutexRelease(SERIAL_PORTS.PRO04.dmaAccess); // } } // Настройка порта GSM static void vSerialPort_InitUSART1(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(GPIOA, &GPIO_InitStruct); GPIO_InitStruct.gpio_pins = GPIO_PINS_6; gpio_init(GPIOB, &GPIO_InitStruct); gpio_pin_mux_config(GPIOA, GPIO_PINS_SOURCE10, GPIO_MUX_7); gpio_pin_mux_config(GPIOB, GPIO_PINS_SOURCE6, GPIO_MUX_7); // vSerialPortInitName(env, USART1, false, 115200, 0xFF, 256); // env->dmaAccess = osMutexNew(NULL); vSerialPortInitDmaWithNameAndSniffer( env, USART1, 115200, 1, 1, 1, 2, false, 0xFF, buf_USART1_DMA, sizeof(buf_USART1_DMA), 1024, 1024 ); // vSerialPortInitDMAName(env, USART1, DMA1, // DMA1_CHANNEL1, DMA1MUX_CHANNEL1, DMAMUX_DMAREQ_ID_USART1_RX, DMA1_Channel1_IRQn, // DMA1_FDT1_FLAG, // buf_USART1_DMA, sizeof(buf_USART1_DMA), // DMA1_CHANNEL2, DMA1MUX_CHANNEL2, DMAMUX_DMAREQ_ID_USART1_TX, DMA1_Channel2_IRQn, // DMA1_FDT2_FLAG, // false, 115200, 0xFF, 256); } //конец--------------------------------------Модем----------------------------------------------------------------------- //конец--------------------------------------Модем----------------------------------------------------------------------- //конец--------------------------------------Модем----------------------------------------------------------------------- //начало--------------------------------Командный интерфейс-------------------------------------------------------------- //начало--------------------------------Командный интерфейс-------------------------------------------------------------- //начало--------------------------------Командный интерфейс-------------------------------------------------------------- uint8_t buf_USART6_DMA[512]; //void USART1_IRQHandler() { // vSerialPortIrqProcessing(&SERIAL_PORTS.GSM); //} // IDLE прерывание void USART6_IRQHandler() { SerialPort_IrqProcessing_UartIdle(&SERIAL_PORTS.ComInt); } // RX void DMA2_Channel1_IRQHandler(void) { SerialPort_IrqProcessing_DmaRxLoop(&SERIAL_PORTS.ComInt); } // TX void DMA2_Channel2_IRQHandler(void) { SerialPort_IrqProcessing_DmaTx(&SERIAL_PORTS.ComInt); } // Настройка порта командного интерфейса static void vSerialPort_InitUSART6(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_6 | GPIO_PINS_7; GPIO_InitStruct.gpio_pull = GPIO_PULL_NONE; gpio_init(GPIOC, &GPIO_InitStruct); gpio_pin_mux_config(GPIOC, GPIO_PINS_SOURCE6, GPIO_MUX_8); gpio_pin_mux_config(GPIOC, GPIO_PINS_SOURCE7, GPIO_MUX_8); vSerialPortInitDmaWithNameAndSniffer( env, USART6, 115200, 2, 1, 2, 2, false, 0xFF, buf_USART6_DMA, sizeof(buf_USART6_DMA), 1024, 0 ); // vSerialPortInitDMAName(env, USART1, DMA1, // DMA1_CHANNEL1, DMA1MUX_CHANNEL1, DMAMUX_DMAREQ_ID_USART1_RX, DMA1_Channel1_IRQn, // DMA1_FDT1_FLAG, // buf_USART1_DMA, sizeof(buf_USART1_DMA), // DMA1_CHANNEL2, DMA1MUX_CHANNEL2, DMAMUX_DMAREQ_ID_USART1_TX, DMA1_Channel2_IRQn, // DMA1_FDT2_FLAG, // false, 115200, 0xFF, 256); } //конец---------------------------------Командный интерфейс-------------------------------------------------------------- //конец---------------------------------Командный интерфейс-------------------------------------------------------------- //конец---------------------------------Командный интерфейс-------------------------------------------------------------- */ void SerialPorts_Init(tRs485DirectionPins *directionPins) { tSerialPorts *env = &SERIAL_PORTS; vSerialPort_InitUSART3(&env->Rs485); SERIAL_PORTS.Rs485_IO = vSerialPortGetIo(&SERIAL_PORTS.Rs485); SERIAL_PORTS.Rs485_HalfDuplex = vSerialPortHalfDuplexInit(&SERIAL_PORTS.Rs485_IO, &directionPins->de); SERIAL_PORTS.Rs485_HalfDuplexIo = vSerialPortHalfDuplexGetIo(&SERIAL_PORTS.Rs485_HalfDuplex); /* vSerialPort_InitUSART2(&env->PRO04); SERIAL_PORTS.PRO04IO = vSerialPortGetIo(&SERIAL_PORTS.PRO04); SERIAL_PORTS.PRO04_snif_IO = vSerialPortGetSnifferIo(&SERIAL_PORTS.PRO04); vSerialPort_InitUSART3(&env->MBEE); SERIAL_PORTS.MBEEIO = vSerialPortGetIo(&SERIAL_PORTS.MBEE); vSerialPort_InitUSART1(&env->GSM); SERIAL_PORTS.GSMIO = vSerialPortGetIo(&SERIAL_PORTS.GSM); SERIAL_PORTS.GSM_snif_IO = vSerialPortGetSnifferIo(&SERIAL_PORTS.GSM); vSerialPort_InitUSART6(&env->ComInt); SERIAL_PORTS.ComIntIO = vSerialPortGetIo(&SERIAL_PORTS.ComInt); */ SerialPortP2p_Init(&env->cliVirtualPort, 5 * 1024, 1024); env->cliVirtualInIo = SerialPortP2p_GetIoFirst(&env->cliVirtualPort); env->cliVirtualOutIo = SerialPortP2p_GetIoSecond(&env->cliVirtualPort); SerialPortUsb_Init(&env->SerialPortUsb, 1024); env->SerialPortUsbIO = SerialPortUsb_GetIo(&env->SerialPortUsb); }