HVAC_DEV_SerialPorts/SerialPorts.c

461 lines
18 KiB
C
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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