commit b870fb10dfc7a2196c654d264a6a44db93b35925 Author: cfif Date: Mon Sep 29 11:21:51 2025 +0300 Добавлены интерфейсы и драйверы diff --git a/SerialPorts.c b/SerialPorts.c new file mode 100644 index 0000000..dc6000d --- /dev/null +++ b/SerialPorts.c @@ -0,0 +1,134 @@ +// +// Created by ilya on 25.03.24. +// +#include "SerialPorts.h" + +tSerialPorts SERIAL_PORTS; + + +uint8_t buf_USART2_DMA[256]; + + +static void DMA_USART2_ErrorCallback() { + while (1) + { + __asm("nop"); + } +} + +static void DMA_USART2_TransferCompleteCallback() { + ++SERIAL_PORTS.Lin.UART_DMA_RECEIVED_LEN_BUF; + + if (SERIAL_PORTS.Lin.UART_DMA_RECEIVED_LEN_BUF >= SERIAL_PORTS.Lin.DMA_BUF_LEN) { + + SerialPort_RxDmaBufToQueue(&SERIAL_PORTS.Lin, buf_USART2_DMA); + + DMA_ModifyAddress(DMA_INSTANCE_0, SERIAL_PORTS.Lin.RX_DMA_CHANNEL, &(SERIAL_PORTS.Lin.UART->DATA), + (void *) ((uint32_t) (buf_USART2_DMA))); + } +} + +static void FCUART_IldeInterrupt_CallBack(uint8_t u8UartIndex) { + + SerialPort_RxDmaBufToQueue(&SERIAL_PORTS.Lin, buf_USART2_DMA); + + DMA_ModifyAddress(DMA_INSTANCE_0, SERIAL_PORTS.Lin.RX_DMA_CHANNEL, &(SERIAL_PORTS.Lin.UART->DATA), (void *)((uint32_t)(buf_USART2_DMA))); + + PROCESS_UNUSED_VAR(u8UartIndex) +} + +static void FCUART_ErrorInterrupt_CallBack(uint8_t u8UartIndex, uint32_t u32Error) { + PROCESS_UNUSED_VAR(u8UartIndex) + PROCESS_UNUSED_VAR(u32Error) +} + +static void FCUART_TxEmptyInterrupt_CallBack(uint8_t u8UartIndex, FCUART_DataType *pTxData) { + PROCESS_UNUSED_VAR(u8UartIndex) + PROCESS_UNUSED_VAR(pTxData) +} + +static void FCUART_TxCompleteInterrupt_CallBack(uint8_t u8UartIndex, FCUART_DataType *pTxData) { + PROCESS_UNUSED_VAR(u8UartIndex) + PROCESS_UNUSED_VAR(pTxData) +} + + +// Настройка порта +static void vSerialPort_InitUSART2(tSerialPortFlagchip *env) { + PORT_InitType tInitStruct = {0}; + GPIO_InitType tGpioInitStruct = {0}; + + // Port D6: MUX = ALT2, UART2_RX + tInitStruct.u32PortPins = PORT_PIN_6; + tInitStruct.uPortPinMux.u32PortPinMode = PORTD_6_FCUART2_RX; + PORT_InitPins(PORT_D, &tInitStruct); + + tGpioInitStruct.u32GpioPins = GPIO_PIN_6; + tGpioInitStruct.ePinDirection = GPIO_IN; + GPIO_InitPins(GPIO_D, &tGpioInitStruct); + + // Port D7: MUX = ALT2, UART2_TX + tInitStruct.u32PortPins = PORT_PIN_7; + tInitStruct.uPortPinMux.u32PortPinMode = PORTD_7_FCUART2_TX; + PORT_InitPins(PORT_D, &tInitStruct); + + tGpioInitStruct.u32GpioPins = GPIO_PIN_7; + tGpioInitStruct.ePinDirection = GPIO_OUT; + tGpioInitStruct.ePinLevel = GPIO_HIGH; + GPIO_InitPins(GPIO_D, &tGpioInitStruct); + + vSerialPortInitDMA( + env, + + FCUART2, + PCC_CLK_FCUART2, + 115200, + + 2, // UART0 = 0 ... UART7 = 7 + FCUART2_IRQn, // FCUART0_IRQn ... FCUART7_IRQn + 0xFF, + + DMA_CHANNEL_0, + DMA_REQ_FCUART2_RX, + + buf_USART2_DMA, + sizeof(buf_USART2_DMA), + + DMA0_IRQn, + 0xFF, // IRQ_DMA_PRIORITY + 2, // IRQ_DMA_CHANNEL_PRIORITY + + 1024, + 1024, + + DMA_USART2_TransferCompleteCallback, + DMA_USART2_ErrorCallback, + + FCUART_IldeInterrupt_CallBack, + FCUART_ErrorInterrupt_CallBack, + + FCUART_TxEmptyInterrupt_CallBack, + FCUART_TxCompleteInterrupt_CallBack + + + ); + + +} +///конец------------------------------------------Модем----------------------------------------------------------------- + +void SerialPorts_Init() { + + tSerialPorts *env = &SERIAL_PORTS; + + vSerialPort_InitUSART2(&env->Lin); + SERIAL_PORTS.Lin_IO = vSerialPortGetIo(&env->Lin); + +//// Виртуальный сериал порт + SerialPortP2p_Init(&env->cliVirtualPort, 3 * 1024, 1024); + env->cliVirtualInIo = SerialPortP2p_GetIoFirst(&env->cliVirtualPort); + env->cliVirtualOutIo = SerialPortP2p_GetIoSecond(&env->cliVirtualPort); +} + + + diff --git a/SerialPorts.h b/SerialPorts.h new file mode 100644 index 0000000..e583aea --- /dev/null +++ b/SerialPorts.h @@ -0,0 +1,26 @@ +// +// Created by ilya on 25.03.24. +// + +#ifndef HVAC_M7_SERIALPORTS_H +#define HVAC_M7_SERIALPORTS_H + +#include "SerialPortFlagchip.h" +#include "SerialPortP2p.h" + +typedef struct { + tSerialPortFlagchip Lin; + tSerialPortIO Lin_IO; + tSerialPortIO Lin_snif_IO; + + tSerialPortP2p cliVirtualPort; + tSerialPortIO cliVirtualInIo; + tSerialPortIO cliVirtualOutIo; + +} tSerialPorts; + +extern tSerialPorts SERIAL_PORTS; + +void SerialPorts_Init(); + +#endif //HVAC_M7_SERIALPORTS_H diff --git a/modular.json b/modular.json new file mode 100644 index 0000000..0dd1901 --- /dev/null +++ b/modular.json @@ -0,0 +1,10 @@ +{ + "cmake": { + "inc_dirs": [ + "./" + ], + "srcs": [ + "./**.c" + ] + } +} \ No newline at end of file