From e8822526ac7bfb72ff73a00ccd2255b951c992be Mon Sep 17 00:00:00 2001 From: cfif Date: Wed, 10 Dec 2025 09:56:42 +0300 Subject: [PATCH] =?UTF-8?q?=D0=9E=D0=B1=D0=BD=D0=BE=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=D0=B8=D0=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Inc/SerialPortFlagchip.h | 27 +++++----- Src/SerialPortFlagchip.c | 106 +++++++++++++++++++++------------------ 2 files changed, 70 insertions(+), 63 deletions(-) diff --git a/Inc/SerialPortFlagchip.h b/Inc/SerialPortFlagchip.h index eaa7b04..e3f640e 100644 --- a/Inc/SerialPortFlagchip.h +++ b/Inc/SerialPortFlagchip.h @@ -36,9 +36,9 @@ typedef struct { FCUART_InitType tInitCfg; FCUART_InterruptType tInterruptCfg; - DMA_InitType dmaInitCfg; - DMA_ChannelCfgType chnCfg; - DMA_InterruptCfgType interruptCfg; + DMA_InitType dmaInitCfg_RX; + DMA_ChannelCfgType chnCfg_RX; + DMA_InterruptCfgType interruptCfg_RX; uint8_t *dataBufTransmit; uint32_t dataBufTransmitLen; @@ -55,7 +55,6 @@ void vSerialPortInitDMA( FCUART_Type *uart, uint32_t BoundRate, - uint8 UART_INDEX, // UART0 = 0 ... UART7 = 7 IRQn_Type IRQ_UART, // FCUART0_IRQn ... FCUART7_IRQn uint8 UART_PRIORITY, @@ -63,15 +62,13 @@ void vSerialPortInitDMA( uint8_t *dataBufTransmit, uint32_t dataBufTransmitLen, - DMA_ChannelType RX_DMA_CHANNEL, - DMA_RequestSourceType RX_DMA_CHANNEL_REQ, - - uint8_t *DMA_BUF, - uint16_t DMA_BUF_LEN, - - IRQn_Type IRQ_DMA, - uint8_t IRQ_DMA_PRIORITY, - uint8_t IRQ_DMA_CHANNEL_PRIORITY, + DMA_ChannelType DMA_CHANNEL_RX, + DMA_RequestSourceType DMA_CHANNEL_REQ_RX, + uint8_t *DMA_BUF_RX, + uint16_t DMA_BUF_LEN_RX, + IRQn_Type IRQ_DMA_RX, + uint8_t IRQ_DMA_PRIORITY_RX, + uint8_t IRQ_DMA_CHANNEL_PRIORITY_RX, uint32_t rxBufferLength, uint32_t rxSnifferLength, @@ -82,8 +79,8 @@ void vSerialPortInitDMA( FCUART_IdleInterrupt_CallBackType FCUART_IldeInterrupt_CallBack, FCUART_ErrorInterrupt_CallBackType FCUART_ErrorInterrupt_CallBack, - FCUART_TxRxInterrupt_CallBackType FCUART_TxEmptyInterrupt_CallBack, - FCUART_TxRxInterrupt_CallBackType FCUART_TxCompleteInterrupt_CallBack + FCUART_TxRxInterrupt_CallBackType FCUART_TxEmptyInterrupt_CallBack, + FCUART_TxRxInterrupt_CallBackType FCUART_TxCompleteInterrupt_CallBack ); tSerialPortIO vSerialPortGetIo(tSerialPortFlagchip *env); diff --git a/Src/SerialPortFlagchip.c b/Src/SerialPortFlagchip.c index 1db5c8f..6dfcbdf 100644 --- a/Src/SerialPortFlagchip.c +++ b/Src/SerialPortFlagchip.c @@ -23,7 +23,6 @@ void vSerialPortInitDMA( FCUART_Type *uart, uint32_t BoundRate, - uint8 UART_INDEX, // UART0 = 0 ... UART7 = 7 IRQn_Type IRQ_UART, // FCUART0_IRQn ... FCUART7_IRQn uint8 UART_PRIORITY, @@ -31,15 +30,13 @@ void vSerialPortInitDMA( uint8_t *dataBufTransmit, uint32_t dataBufTransmitLen, - DMA_ChannelType RX_DMA_CHANNEL, - DMA_RequestSourceType RX_DMA_CHANNEL_REQ, - - uint8_t *DMA_BUF, - uint16_t DMA_BUF_LEN, - - IRQn_Type IRQ_DMA, - uint8_t IRQ_DMA_PRIORITY, - uint8_t IRQ_DMA_CHANNEL_PRIORITY, + DMA_ChannelType DMA_CHANNEL_RX, + DMA_RequestSourceType DMA_CHANNEL_REQ_RX, + uint8_t *DMA_BUF_RX, + uint16_t DMA_BUF_LEN_RX, + IRQn_Type IRQ_DMA_RX, + uint8_t IRQ_DMA_PRIORITY_RX, + uint8_t IRQ_DMA_CHANNEL_PRIORITY_RX, uint32_t rxBufferLength, uint32_t rxSnifferLength, @@ -56,15 +53,12 @@ void vSerialPortInitDMA( ) { env->UART_INDEX = UART_INDEX; - env->RX_DMA_CHANNEL = RX_DMA_CHANNEL; + env->RX_DMA_CHANNEL = DMA_CHANNEL_RX; env->UART = uart; - env->DMA_BUF_LEN = DMA_BUF_LEN; - + env->DMA_BUF_LEN = DMA_BUF_LEN_RX; env->UART_DMA_RECEIVED_LEN_BUF = 0; - env->dataBufTransmit = dataBufTransmit; env->dataBufTransmitLen = dataBufTransmitLen; - env->txAccessQueue = osMessageQueueNew(1, 1, NULL); env->rxDataQueue = osMessageQueueNew(rxBufferLength, 1, NULL); @@ -74,46 +68,58 @@ void vSerialPortInitDMA( env->rxDataSnifferQueue = 0; } - env->dmaInitCfg.eArbitrationAlgorithm = DMA_ARBITRATION_ALGORITHM_FIXED_PRIORITY; - env->dmaInitCfg.bHaltOnError = false; - DMA_Init(DMA_INSTANCE_0, &env->dmaInitCfg); + //начало-----------------------------------DMA-RX------------------------------------------------------------------- + //начало-----------------------------------DMA-RX------------------------------------------------------------------- + //начало-----------------------------------DMA-RX------------------------------------------------------------------- - env->chnCfg.pSrcBuffer = &(uart->DATA); - env->chnCfg.pDestBuffer = DMA_BUF; - env->chnCfg.u32BlockSize = 1U; - env->chnCfg.u16BlockCount = 1U; - env->chnCfg.u8ChannelPriority = IRQ_DMA_CHANNEL_PRIORITY; - env->chnCfg.eSrcDataSize = DMA_TRANSFER_SIZE_1B; - env->chnCfg.eDestDataSize = DMA_TRANSFER_SIZE_1B; - env->chnCfg.eSrcIncMode = DMA_INCREMENT_DISABLE; - env->chnCfg.eDestIncMode = DMA_INCREMENT_DATA_SIZE; - env->chnCfg.bSrcBlockOffsetEn = false; - env->chnCfg.bDestBlockOffsetEn = false; - env->chnCfg.s32BlockOffset = 0; - env->chnCfg.bSrcAddrLoopbackEn = false; - env->chnCfg.bDestAddrLoopbackEn = false; - env->chnCfg.bAutoStop = false; + env->dmaInitCfg_RX.eArbitrationAlgorithm = DMA_ARBITRATION_ALGORITHM_FIXED_PRIORITY; + env->dmaInitCfg_RX.bHaltOnError = false; + DMA_Init(DMA_INSTANCE_0, &env->dmaInitCfg_RX); - env->chnCfg.bSrcCircularBufferEn = false; - env->chnCfg.u32SrcCircBufferSize = 0U; - env->chnCfg.bDestCircularBufferEn = true; - env->chnCfg.u32DestCircBufferSize = DMA_BUF_LEN; + env->chnCfg_RX.pSrcBuffer = &(uart->DATA); + env->chnCfg_RX.pDestBuffer = DMA_BUF_RX; + env->chnCfg_RX.u32BlockSize = 1U; + env->chnCfg_RX.u16BlockCount = 1U; + env->chnCfg_RX.u8ChannelPriority = IRQ_DMA_CHANNEL_PRIORITY_RX; + env->chnCfg_RX.eSrcDataSize = DMA_TRANSFER_SIZE_1B; + env->chnCfg_RX.eDestDataSize = DMA_TRANSFER_SIZE_1B; + env->chnCfg_RX.eSrcIncMode = DMA_INCREMENT_DISABLE; + env->chnCfg_RX.eDestIncMode = DMA_INCREMENT_DATA_SIZE; + env->chnCfg_RX.bSrcBlockOffsetEn = false; + env->chnCfg_RX.bDestBlockOffsetEn = false; + env->chnCfg_RX.s32BlockOffset = 0; + env->chnCfg_RX.bSrcAddrLoopbackEn = false; + env->chnCfg_RX.bDestAddrLoopbackEn = false; + env->chnCfg_RX.bAutoStop = false; - env->chnCfg.eTriggerSrc = RX_DMA_CHANNEL_REQ; - DMA_InitChannel(DMA_INSTANCE_0, RX_DMA_CHANNEL, &env->chnCfg); + env->chnCfg_RX.bSrcCircularBufferEn = false; + env->chnCfg_RX.u32SrcCircBufferSize = 0U; + env->chnCfg_RX.bDestCircularBufferEn = true; + env->chnCfg_RX.u32DestCircBufferSize = DMA_BUF_LEN_RX; - env->interruptCfg.bTransferCompleteIntEn = true; - env->interruptCfg.pTransferCompleteNotify = pTransferCompleteNotify; - env->interruptCfg.bTransferErrorIntEn = true; - env->interruptCfg.pTransferErrorNotify = pTransferErrorNotify; - DMA_InitChannelInterrupt(DMA_INSTANCE_0, RX_DMA_CHANNEL, &env->interruptCfg); + env->chnCfg_RX.eTriggerSrc = DMA_CHANNEL_REQ_RX; + DMA_InitChannel(DMA_INSTANCE_0, DMA_CHANNEL_RX, &env->chnCfg_RX); - DMA_StartChannel(DMA_INSTANCE_0, RX_DMA_CHANNEL); + env->interruptCfg_RX.bTransferCompleteIntEn = true; + env->interruptCfg_RX.pTransferCompleteNotify = pTransferCompleteNotify; + env->interruptCfg_RX.bTransferErrorIntEn = true; + env->interruptCfg_RX.pTransferErrorNotify = pTransferErrorNotify; + DMA_InitChannelInterrupt(DMA_INSTANCE_0, DMA_CHANNEL_RX, &env->interruptCfg_RX); - NVIC_SetPriority(DMA_Error_IRQn, IRQ_DMA_PRIORITY); - NVIC_SetPriority(IRQ_DMA, IRQ_DMA_PRIORITY); - NVIC_EnableIRQ(IRQ_DMA); + DMA_StartChannel(DMA_INSTANCE_0, DMA_CHANNEL_RX); + NVIC_SetPriority(DMA_Error_IRQn, IRQ_DMA_PRIORITY_RX); + NVIC_SetPriority(IRQ_DMA_RX, IRQ_DMA_PRIORITY_RX); + NVIC_EnableIRQ(IRQ_DMA_RX); + + //конец-----------------------------------DMA-RX-------------------------------------------------------------------- + //конец-----------------------------------DMA-RX-------------------------------------------------------------------- + //конец-----------------------------------DMA-RX-------------------------------------------------------------------- + + + //начало------------------------------------UART-------------------------------------------------------------------- + //начало------------------------------------UART-------------------------------------------------------------------- + //начало------------------------------------UART-------------------------------------------------------------------- FCUART_ErrorType tRetVal; uint32_t u32PccFuncClk; @@ -172,6 +178,10 @@ void vSerialPortInitDMA( } } + //конец------------------------------------UART--------------------------------------------------------------------- + //конец------------------------------------UART--------------------------------------------------------------------- + //конец------------------------------------UART--------------------------------------------------------------------- + }