Обновление

This commit is contained in:
cfif 2025-12-09 16:15:17 +03:00
parent 6623f9d676
commit ea1f782fc3
2 changed files with 30 additions and 32 deletions

View File

@ -18,6 +18,9 @@
#include "fc7xxx_driver_gpio.h"
#include "fc7xxx_driver_dma.h"
#define UART_RX_FIFO_WATERMARK 15U
typedef struct {
uint8_t UART_INDEX;
DMA_ChannelType RX_DMA_CHANNEL;
@ -26,6 +29,7 @@ typedef struct {
uint32_t DMA_BUF_LEN;
uint32_t UART_DMA_RECEIVED_LEN_BUF;
uint32_t UART_DMA_RECEIVED_POINTER_BUF;
FCUART_DataType s_tFCUART_TxMsg;
@ -42,7 +46,7 @@ typedef struct {
osMessageQueueId_t txAccessQueue;
osMessageQueueId_t rxDataQueue;
osMessageQueueId_t rxDataSnifferQueue;
osMessageQueueId_t rxDataSnifferSecondQueue;
} tSerialPortFlagchip;

View File

@ -74,9 +74,6 @@ void vSerialPortInitDMA(
env->rxDataSnifferQueue = 0;
}
FCUART_InitMemory(UART_INDEX);
env->dmaInitCfg.eArbitrationAlgorithm = DMA_ARBITRATION_ALGORITHM_FIXED_PRIORITY;
env->dmaInitCfg.bHaltOnError = false;
DMA_Init(DMA_INSTANCE_0, &env->dmaInitCfg);
@ -84,6 +81,7 @@ void vSerialPortInitDMA(
env->chnCfg.pSrcBuffer = &(uart->DATA);
env->chnCfg.pDestBuffer = DMA_BUF;
env->chnCfg.u32BlockSize = 1U;
//env->chnCfg.u32BlockSize = (UART_RX_FIFO_WATERMARK + 1U);;
env->chnCfg.u16BlockCount = 1U;
env->chnCfg.u8ChannelPriority = IRQ_DMA_CHANNEL_PRIORITY;
env->chnCfg.eSrcDataSize = DMA_TRANSFER_SIZE_1B;
@ -96,10 +94,17 @@ void vSerialPortInitDMA(
env->chnCfg.bSrcAddrLoopbackEn = false;
env->chnCfg.bDestAddrLoopbackEn = false;
env->chnCfg.bAutoStop = false;
//env->chnCfg.bSrcCircularBufferEn = false;
//env->chnCfg.u32SrcCircBufferSize = 0U;
//env->chnCfg.bDestCircularBufferEn = false;
//env->chnCfg.u32DestCircBufferSize = 0U;
env->chnCfg.bSrcCircularBufferEn = false;
env->chnCfg.u32SrcCircBufferSize = 0U;
env->chnCfg.bDestCircularBufferEn = false;
env->chnCfg.u32DestCircBufferSize = 0U;
env->chnCfg.bDestCircularBufferEn = true;
env->chnCfg.u32DestCircBufferSize = DMA_BUF_LEN;
env->chnCfg.eTriggerSrc = RX_DMA_CHANNEL_REQ;
DMA_InitChannel(DMA_INSTANCE_0, RX_DMA_CHANNEL, &env->chnCfg);
@ -111,23 +116,30 @@ void vSerialPortInitDMA(
DMA_StartChannel(DMA_INSTANCE_0, RX_DMA_CHANNEL);
//NVIC_SetPriorityGrouping(NVIC_PRIORITY_GROUP_4);
NVIC_SetPriority(DMA_Error_IRQn, IRQ_DMA_PRIORITY);
NVIC_SetPriority(IRQ_DMA, IRQ_DMA_PRIORITY);
NVIC_EnableIRQ(IRQ_DMA);
FCUART_ErrorType tRetVal;
uint32_t u32PccFuncClk;
FCUART_InitMemory(UART_INDEX);
u32PccFuncClk = PCC_GetPccFunctionClock(s_ePccUartTable[UART_INDEX]);
if (u32PccFuncClk != 0U) {
env->tInitCfg.bEnRxFullDma = true; // UART receiver full DMA disable
env->tInitCfg.bEnRxFifo = false; // UART fifo disable
env->tInitCfg.bEnTxFifo = true; // UART tx fifo enable
env->tInitCfg.u8TxFifoWaterMark = 0U; // UART tx fifo 16 bytes trigger
//env->tInitCfg.bEnRxFifo = false; // UART fifo disable
//env->tInitCfg.bEnTxFifo = true; // UART tx fifo enable
//env->tInitCfg.u8TxFifoWaterMark = 0U; // UART tx fifo 16 bytes trigger
env->tInitCfg.bEnTxFifo = true;
env->tInitCfg.u8TxFifoWaterMark = 0U;
env->tInitCfg.bEnRxFifo = true;
env->tInitCfg.u8RxFifoWaterMark = 0U;
env->tInitCfg.eIdleCharNum = FCUART_IDLE_CHARCTER_64; // UART idle character number 64
env->tInitCfg.eIdleStart = FCUART_START_AFTER_STOPBIT; // UART idle character type
@ -162,11 +174,11 @@ void vSerialPortInitDMA(
tRetVal = FCUART_SetInterrupt(UART_INDEX, &env->tInterruptCfg);
tRetVal = FCUART_StartReceive(UART_INDEX);
NVIC_SetPriority(IRQ_UART, UART_PRIORITY);
NVIC_EnableIRQ(IRQ_UART);
tRetVal = FCUART_StartReceive(UART_INDEX);
}
}
@ -220,14 +232,6 @@ static uint16_t vSerialPortReceiveSniffer(tSerialPortFlagchip *env, uint8_t *dat
: 0;
}
static uint16_t
vSerialPortReceiveSnifferSecond(tSerialPortFlagchip *env, uint8_t *data, uint16_t size, uint32_t timeout) {
return env->rxDataSnifferSecondQueue
? vSerialPortReceiveQueue(env, data, size, timeout, env->rxDataSnifferSecondQueue)
: 0;
}
static uint16_t
vSerialPortTransmitOverCore(tSerialPortFlagchip *env, uint8_t *data, uint16_t size, uint32_t timeout) {
@ -236,7 +240,6 @@ vSerialPortTransmitOverCore(tSerialPortFlagchip *env, uint8_t *data, uint16_t si
FCUART_ErrorType tRetVal;
// memcpy(env->dataBufTransmit, data, size);
tRetVal = FCUART_AssignTxInterruptData(env->UART_INDEX, env->dataBufTransmit, size);
tRetVal = FCUART_StartTransmit(env->UART_INDEX);
@ -293,12 +296,3 @@ tSerialPortIO vSerialPortGetSnifferIo(tSerialPortFlagchip *env) {
};
return io;
}
tSerialPortIO SerialPort_GetSnifferSecondIo(tSerialPortFlagchip *env) {
tSerialPortIO io = {
.env = env,
.receive = (SerialPortIOTransaction) vSerialPortReceiveSnifferSecond,
.transmit = vSerialPortTransmitterGet(env)
};
return io;
}