Обновление

This commit is contained in:
cfif 2025-12-09 16:15:17 +03:00
parent 3332b747db
commit ae1e97fa26
1 changed files with 29 additions and 24 deletions

View File

@ -7,13 +7,12 @@
tSerialPorts SERIAL_PORTS; tSerialPorts SERIAL_PORTS;
uint8_t buf_USART2_TRANSMITTED[512]; uint8_t buf_USART2_TRANSMITTED[256];
uint8_t buf_USART2_DMA[256]; ALIGN(256) uint8_t buf_USART2_DMA[6];
static void DMA_USART2_ErrorCallback() { static void DMA_USART2_ErrorCallback() {
while (1) while (1) {
{
__asm("nop"); __asm("nop");
} }
} }
@ -21,20 +20,29 @@ static void DMA_USART2_ErrorCallback() {
static void DMA_USART2_TransferCompleteCallback() { static void DMA_USART2_TransferCompleteCallback() {
++SERIAL_PORTS.SerialPortLog.UART_DMA_RECEIVED_LEN_BUF; ++SERIAL_PORTS.SerialPortLog.UART_DMA_RECEIVED_LEN_BUF;
if (SERIAL_PORTS.SerialPortLog.UART_DMA_RECEIVED_LEN_BUF >= SERIAL_PORTS.SerialPortLog.DMA_BUF_LEN) { SerialPortTransmit(&SERIAL_PORTS.cliVirtualInIo,
(uint8_t *) &buf_USART2_DMA[SERIAL_PORTS.SerialPortLog.UART_DMA_RECEIVED_POINTER_BUF],
SERIAL_PORTS.SerialPortLog.UART_DMA_RECEIVED_LEN_BUF, 0);
SERIAL_PORTS.SerialPortLog.UART_DMA_RECEIVED_POINTER_BUF += SERIAL_PORTS.SerialPortLog.UART_DMA_RECEIVED_LEN_BUF;
SERIAL_PORTS.SerialPortLog.UART_DMA_RECEIVED_LEN_BUF = 0;
if (SERIAL_PORTS.SerialPortLog.UART_DMA_RECEIVED_POINTER_BUF >= SERIAL_PORTS.SerialPortLog.DMA_BUF_LEN)
SERIAL_PORTS.SerialPortLog.UART_DMA_RECEIVED_POINTER_BUF = 0;
SerialPort_RxDmaBufToQueue(&SERIAL_PORTS.SerialPortLog, buf_USART2_DMA); // DMA_ModifyAddress(DMA_INSTANCE_0, SERIAL_PORTS.SerialPortLog.RX_DMA_CHANNEL, &(SERIAL_PORTS.SerialPortLog.UART->DATA),
// (void *) ((uint32_t) (buf_USART2_DMA)));
DMA_ModifyAddress(DMA_INSTANCE_0, SERIAL_PORTS.SerialPortLog.RX_DMA_CHANNEL, &(SERIAL_PORTS.SerialPortLog.UART->DATA),
(void *) ((uint32_t) (buf_USART2_DMA)));
}
} }
static void FCUART_IldeInterrupt_CallBack(uint8_t u8UartIndex) { static void FCUART_IldeInterrupt_CallBack(uint8_t u8UartIndex) {
SerialPort_RxDmaBufToQueue(&SERIAL_PORTS.SerialPortLog, buf_USART2_DMA); SerialPortTransmit(&SERIAL_PORTS.cliVirtualInIo,
(uint8_t *) &buf_USART2_DMA[SERIAL_PORTS.SerialPortLog.UART_DMA_RECEIVED_POINTER_BUF],
SERIAL_PORTS.SerialPortLog.UART_DMA_RECEIVED_LEN_BUF, 0);
SERIAL_PORTS.SerialPortLog.UART_DMA_RECEIVED_POINTER_BUF += SERIAL_PORTS.SerialPortLog.UART_DMA_RECEIVED_LEN_BUF;
SERIAL_PORTS.SerialPortLog.UART_DMA_RECEIVED_LEN_BUF = 0;
if (SERIAL_PORTS.SerialPortLog.UART_DMA_RECEIVED_POINTER_BUF >= SERIAL_PORTS.SerialPortLog.DMA_BUF_LEN)
SERIAL_PORTS.SerialPortLog.UART_DMA_RECEIVED_POINTER_BUF = 0;
DMA_ModifyAddress(DMA_INSTANCE_0, SERIAL_PORTS.SerialPortLog.RX_DMA_CHANNEL, &(SERIAL_PORTS.SerialPortLog.UART->DATA), (void *)((uint32_t)(buf_USART2_DMA))); // DMA_ModifyAddress(DMA_INSTANCE_0, SERIAL_PORTS.SerialPortLog.RX_DMA_CHANNEL, &(SERIAL_PORTS.SerialPortLog.UART->DATA), (void *)((uint32_t)(buf_USART2_DMA)));
PROCESS_UNUSED_VAR(u8UartIndex) PROCESS_UNUSED_VAR(u8UartIndex)
} }
@ -52,13 +60,11 @@ static void FCUART_TxEmptyInterrupt_CallBack(uint8_t u8UartIndex, FCUART_DataTyp
} }
static void FCUART_TxCompleteInterrupt_CallBack(uint8_t u8UartIndex, FCUART_DataType *pTxData) { static void FCUART_TxCompleteInterrupt_CallBack(uint8_t u8UartIndex, FCUART_DataType *pTxData) {
asm("nop");
if (u8UartIndex == SERIAL_PORTS.SerialPortLog.UART_INDEX) { if (u8UartIndex == SERIAL_PORTS.SerialPortLog.UART_INDEX) {
SerialPort_TxEndTransmitted(SERIAL_PORTS.SerialPortLog_IO.env, 1); SerialPort_TxEndTransmitted(SERIAL_PORTS.SerialPortLog_IO.env, 1);
} }
PROCESS_UNUSED_VAR(u8UartIndex)
PROCESS_UNUSED_VAR(pTxData) PROCESS_UNUSED_VAR(pTxData)
} }
@ -76,7 +82,7 @@ static void vSerialPort_InitUSART2(tSerialPortFlagchip *env) {
tInitStruct.uPortPinMux.u32PortPinMode = PORTD_6_FCUART2_RX; tInitStruct.uPortPinMux.u32PortPinMode = PORTD_6_FCUART2_RX;
PORT_InitPins(PORT_D, &tInitStruct); PORT_InitPins(PORT_D, &tInitStruct);
tGpioInitStruct.u32GpioPins = GPIO_PIN_6; tGpioInitStruct.u32GpioPins = GPIO_PIN_6;
tGpioInitStruct.ePinDirection = GPIO_IN; tGpioInitStruct.ePinDirection = GPIO_IN;
GPIO_InitPins(GPIO_D, &tGpioInitStruct); GPIO_InitPins(GPIO_D, &tGpioInitStruct);
@ -85,9 +91,9 @@ static void vSerialPort_InitUSART2(tSerialPortFlagchip *env) {
tInitStruct.uPortPinMux.u32PortPinMode = PORTD_7_FCUART2_TX; tInitStruct.uPortPinMux.u32PortPinMode = PORTD_7_FCUART2_TX;
PORT_InitPins(PORT_D, &tInitStruct); PORT_InitPins(PORT_D, &tInitStruct);
tGpioInitStruct.u32GpioPins = GPIO_PIN_7; tGpioInitStruct.u32GpioPins = GPIO_PIN_7;
tGpioInitStruct.ePinDirection = GPIO_OUT; tGpioInitStruct.ePinDirection = GPIO_OUT;
tGpioInitStruct.ePinLevel = GPIO_HIGH; tGpioInitStruct.ePinLevel = GPIO_HIGH;
GPIO_InitPins(GPIO_D, &tGpioInitStruct); GPIO_InitPins(GPIO_D, &tGpioInitStruct);
vSerialPortInitDMA( vSerialPortInitDMA(
@ -110,11 +116,11 @@ static void vSerialPort_InitUSART2(tSerialPortFlagchip *env) {
sizeof(buf_USART2_DMA), sizeof(buf_USART2_DMA),
DMA0_IRQn, DMA0_IRQn,
0x55, // IRQ_DMA_PRIORITY 0xFF, // IRQ_DMA_PRIORITY
2, // IRQ_DMA_CHANNEL_PRIORITY DMA0_IRQn, // IRQ_DMA_CHANNEL_PRIORITY
1024, 1024,
1024, 0,
DMA_USART2_TransferCompleteCallback, DMA_USART2_TransferCompleteCallback,
DMA_USART2_ErrorCallback, DMA_USART2_ErrorCallback,
@ -136,14 +142,13 @@ void SerialPorts_Init() {
tSerialPorts *env = &SERIAL_PORTS; tSerialPorts *env = &SERIAL_PORTS;
vSerialPort_InitUSART2(&env->SerialPortLog); //// Виртуальный сериал порт
SERIAL_PORTS.SerialPortLog_IO = vSerialPortGetIo(&env->SerialPortLog);
//// Виртуальный сериал порт
SerialPortP2p_Init(&env->cliVirtualPort, 4 * 1024, 1024); SerialPortP2p_Init(&env->cliVirtualPort, 4 * 1024, 1024);
env->cliVirtualInIo = SerialPortP2p_GetIoFirst(&env->cliVirtualPort); env->cliVirtualInIo = SerialPortP2p_GetIoFirst(&env->cliVirtualPort);
env->cliVirtualOutIo = SerialPortP2p_GetIoSecond(&env->cliVirtualPort); env->cliVirtualOutIo = SerialPortP2p_GetIoSecond(&env->cliVirtualPort);
vSerialPort_InitUSART2(&env->SerialPortLog);
SERIAL_PORTS.SerialPortLog_IO = vSerialPortGetIo(&env->SerialPortLog);
} }