This commit is contained in:
cfif 2024-12-04 13:10:47 +03:00
commit 53fc83abf1
3 changed files with 253 additions and 0 deletions

166
SerialPorts.c Normal file
View File

@ -0,0 +1,166 @@
//
// Created by xemon on 29.08.22.
//
#include "SerialPorts.h"
#include "SerialPort.h"
#include "CanSerialPorts.h"
tSerialPorts SERIAL_PORTS;
uint8_t buf_UART1_DMA[128];
uint8_t buf_UART2_DMA[128];
uint8_t buf_UART4_DMA[128];
void vSerialPorts_InitRCC() {
//Включаем тактирование шины APB1 для устройств USART2, UART4
//Enable clock APB1 for USART2, UART4, UART5
RCC_EnableAPB1PeriphClk(RCC_APB1_PERIPH_USART2, ENABLE);
RCC_EnableAPB1PeriphClk(RCC_APB1_PERIPH_UART4, ENABLE);
#ifdef USE_GSM_AND_GNSS_SIMCOM
RCC_EnableAPB1PeriphClk(RCC_APB1_PERIPH_UART5, ENABLE);
#endif
//Включаем тактирование шины APB2 для устройств AFIO, USART1
//Enable clock APB1 -> AFIO, USART1
RCC_EnableAPB2PeriphClk(RCC_APB2_PERIPH_AFIO, ENABLE);
RCC_EnableAPB2PeriphClk(RCC_APB2_PERIPH_USART1, ENABLE);
}
static void vSerialPort_InitUART1(tSerialPortNation *env, tGpioPin *transmitePin, tGpioPin *recivePin) {
GPIO_ConfigPinRemap(GPIO_RMP_USART1, ENABLE);
//Init UART1 Rx Pin
GpioPin_InitConfigOnly(GPIOB, GPIO_PIN_7, GPIO_Mode_IN_FLOATING, GPIO_INPUT);
//Init UART1 Tx Pin
GpioPin_InitConfigOnly(GPIOB, GPIO_PIN_6, GPIO_Mode_AF_PP, GPIO_Speed_50MHz);
GpioPinSet(transmitePin, false);
GpioPinSet(recivePin, false);
// SerialPort_InitName(env, USART1, 115200, 0xFF, 1024);
vSerialPortInitDMA(env, USART1,
DMA1, DMA1_CH5, DMA1_Channel5_IRQn, DMA1_INT_TXC5,
DMA1, DMA1_CH4, DMA1_Channel4_IRQn, DMA1_INT_TXC4,
buf_UART1_DMA, sizeof(buf_UART1_DMA),
115200, USART1_IRQn , 0xFF, 512, 0
);
}
static void vSerialPort_InitUART2(tSerialPortNation *env) {
GPIO_ConfigPinRemap(GPIO_RMP1_USART2, ENABLE);
//Init UART2 Rx Pin
GpioPin_InitConfigOnly(GPIOD, GPIO_PIN_6, GPIO_Mode_IN_FLOATING, GPIO_INPUT);
//Init UART2 Tx Pin
GpioPin_InitConfigOnly(GPIOD, GPIO_PIN_5, GPIO_Mode_AF_OD, GPIO_Speed_50MHz);
// vSerialPortInitNameWithSniffer(env, USART2, 115200, 0xFF, 1024, 1024);
vSerialPortInitDMA(env, USART2,
DMA1, DMA1_CH6, DMA1_Channel6_IRQn, DMA1_INT_TXC6,
DMA1, DMA1_CH7, DMA1_Channel7_IRQn, DMA1_INT_TXC7,
buf_UART2_DMA, sizeof(buf_UART2_DMA),
115200, USART2_IRQn , 0xFF, 512, 512
);
}
static void vSerialPort_InitUART4(tSerialPortNation *env) {
//Init UART4 Rx Pin
GpioPin_InitConfigOnly(GPIOC, GPIO_PIN_11, GPIO_Mode_IN_FLOATING, GPIO_INPUT);
//Init UART4 Tx Pin
GpioPin_InitConfigOnly(GPIOC, GPIO_PIN_10, GPIO_Mode_AF_PP, GPIO_Speed_50MHz);
SerialPort_InitName(env, UART4, 115200, 0xFF, 1024);
vSerialPortInitDMA(env, UART4,
DMA2, DMA2_CH3, DMA2_Channel3_IRQn, DMA2_INT_TXC3,
DMA2, DMA2_CH5, DMA2_Channel5_IRQn, DMA2_INT_TXC5,
buf_UART4_DMA, sizeof(buf_UART4_DMA),
115200, UART4_IRQn, 0xFF, 512, 0
);
}
void USART2_IRQHandler() {
// vSerialPortIrqProcessing(&SERIAL_PORTS.TelitPort);
SerialPort_IrqProcessing_UartIdle(&SERIAL_PORTS.TelitPort);
}
/// UUSSBB
void USART1_IRQHandler() {
// vSerialPortIrqProcessing(&SERIAL_PORTS.ComIntPort);
SerialPort_IrqProcessing_UartIdle(&SERIAL_PORTS.ComIntPort);
}
void UART4_IRQHandler() {
// vSerialPortIrqProcessing(&SERIAL_PORTS.DebugPort);
SerialPort_IrqProcessing_UartIdle(&SERIAL_PORTS.DebugPort);
}
void DMA1_Channel5_IRQHandler(){
SerialPort_IrqProcessing_DmaRxLoop(&SERIAL_PORTS.ComIntPort);
}
void DMA1_Channel4_IRQHandler(){
SerialPort_IrqProcessing_DmaTx(&SERIAL_PORTS.ComIntPort );
}
void DMA1_Channel6_IRQHandler(){
SerialPort_IrqProcessing_DmaRxLoop(&SERIAL_PORTS.TelitPort);
}
void DMA1_Channel7_IRQHandler(){
SerialPort_IrqProcessing_DmaTx(&SERIAL_PORTS.TelitPort );
}
void DMA2_Channel3_IRQHandler() {
SerialPort_IrqProcessing_DmaRxLoop(&SERIAL_PORTS.DebugPort);
}
void DMA2_Channel5_IRQHandler() {
SerialPort_IrqProcessing_DmaTx(&SERIAL_PORTS.DebugPort);
}
void SerialPorts_Init(tRs485DirectionPins *power) {
tSerialPorts *env = &SERIAL_PORTS;
vSerialPorts_InitRCC();
vSerialPort_InitUART1(&env->ComIntPort, &power->transmit,
&power->receive);
vSerialPort_InitUART2(&env->TelitPort);
vSerialPort_InitUART4(&env->DebugPort);
env->ComIntIO = SerialPort_GetIo(&env->ComIntPort);
env->TelitIO = SerialPort_GetIo(&env->TelitPort);
env->TelitIOSniffer = SerialPort_GetSnifferIo(&env->TelitPort);
env->DebugIO = SerialPort_GetIo(&env->DebugPort);
env->ComIntHalfDuplex = vSerialPortHalfDuplexInit(&env->ComIntIO,
&power->transmit,
&power->receive);
env->ComIntHalfDuplexIo = vSerialPortHalfDuplexGetIo(&env->ComIntHalfDuplex);
SerialPortP2p_Init(&env->cliVirtualPort, 1 * 1024, 512);
env->cliVirtualInIo = SerialPortP2p_GetIoFirst(&env->cliVirtualPort);
env->cliVirtualOutIo = SerialPortP2p_GetIoSecond(&env->cliVirtualPort);
// SerialPortUsb_Init(&env->SerialPortUsb, 1024);
// env->SerialPortUsbIO = SerialPortUsb_GetIo(&env->SerialPortUsb);
vCanSerialPorts_InitRCC();
CanHWControlSet();
vCanSerialPort_InitCAN1(&env->SerialPortCan1);
vCanSerialPort_InitCAN2(&env->SerialPortCan2);
env->SerialPortCan2IO = CanPort_GetIo(&env->SerialPortCan2);
}

55
SerialPorts.h Normal file
View File

@ -0,0 +1,55 @@
//
// Created by xemon on 29.08.22.
//
#ifndef UVEOS_DEMO_ON_NIIET_MCU_SERIALPORTS_H
#define UVEOS_DEMO_ON_NIIET_MCU_SERIALPORTS_H
#include "SerialPortNation.h"
#include "SerialPortHalfDuplexIO.h"
#include "GpioPin.h"
#include "SerialPortP2p.h"
#include "SerialPort_USB.h"
#include "CanSerialPort.h"
typedef struct {
tGpioPin receive;
tGpioPin transmit;
} tRs485DirectionPins;
typedef struct {
tSerialPortNation TelitPort;
tSerialPortIO TelitIO;
tSerialPortNation ComIntPort;
tSerialPortIO ComIntIO;
tSerialPortNation DebugPort;
tSerialPortIO DebugIO;
tSerialPortHalfDuplex ComIntHalfDuplex;
tSerialPortIO ComIntHalfDuplexIo;
tSerialPortIO TelitIOSniffer;
tSerialPortP2p cliVirtualPort;
tSerialPortIO cliVirtualInIo;
tSerialPortIO cliVirtualOutIo;
TSerialPortUsbNation SerialPortUsb;
tSerialPortIO SerialPortUsbIO;
tCanSerialPortNation SerialPortCan1;
tSerialPortIO SerialPortCan1IO;
tCanSerialPortNation SerialPortCan2;
tSerialPortIO SerialPortCan2IO;
} tSerialPorts;
extern tSerialPorts SERIAL_PORTS;
void SerialPorts_Init(tRs485DirectionPins *power);
#endif //UVEOS_DEMO_ON_NIIET_MCU_SERIALPORTS_H

32
modular.json Normal file
View File

@ -0,0 +1,32 @@
{
"dep": [
{
"type": "git",
"provider": "NAVIGATOR_UVEOS_NATION_TELIT",
"repo": "SerialPort_NATION_N32G45x_v2"
},
{
"type": "git",
"provider": "NAVIGATOR_UVEOS_NATION_TELIT",
"repo": "SerialPortInterface"
},
{
"type": "git",
"provider": "NAVIGATOR_UVEOS_NATION_TELIT",
"repo": "SerialPortHalfDuplexInterface"
},
{
"type": "git",
"provider": "NAVIGATOR_UVEOS_NATION_TELIT",
"repo": "SerialPort_P2P_CmsisRtos"
}
],
"cmake": {
"inc_dirs": [
"./"
],
"srcs": [
"SerialPorts.c"
]
}
}