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