Обновление

This commit is contained in:
cfif 2025-12-09 10:50:30 +03:00
parent 82840cff76
commit 983966f58c
2 changed files with 19 additions and 11 deletions

View File

@ -27,8 +27,6 @@ typedef struct {
uint32_t UART_DMA_RECEIVED_LEN_BUF;
uint8 s_SampleTmp[4];
FCUART_DataType s_tFCUART_TxMsg;
FCUART_InitType tInitCfg;
@ -38,6 +36,8 @@ typedef struct {
DMA_ChannelCfgType chnCfg;
DMA_InterruptCfgType interruptCfg;
uint8_t dataBufTransmit[512];
osMessageQueueId_t txAccessQueue;
osMessageQueueId_t rxDataQueue;
osMessageQueueId_t rxDataSnifferQueue;
@ -82,6 +82,7 @@ tSerialPortIO vSerialPortGetIo(tSerialPortFlagchip *env);
void SerialPort_RxDmaBufToQueue(tSerialPortFlagchip *env, const void *pSrcBuffer);
void SerialPort_TxEndTransmitted(tSerialPortFlagchip *env, uint8_t data);
/*
#define vSerialPortInitDMAName(ENV, NAME, DMA, RX_DMA_CHANNEL, RX_DMA_CHANNEL_MUX, RX_DMAMUX_DMAREQ_ID, RX_DMA_Channel_IRQ, RX_DMA_FDT_FLAG, DMA_BUF, DMA_BUF_LEN, TX_DMA_CHANNEL, TX_DMA_CHANNEL_MUX, TX_DMAMUX_DMAREQ_ID, TX_DMA_Channel_IRQ, TX_DMA_FDT_FLAG, SWAP, BOUND_RATE, PRIORITY, LEN) \
vSerialPortInitDMA(ENV, NAME, DMA, RX_DMA_CHANNEL, RX_DMA_CHANNEL_MUX, RX_DMAMUX_DMAREQ_ID, RX_DMA_Channel_IRQ, RX_DMA_FDT_FLAG, DMA_BUF, DMA_BUF_LEN, TX_DMA_CHANNEL, TX_DMA_CHANNEL_MUX, TX_DMAMUX_DMAREQ_ID, TX_DMA_Channel_IRQ, TX_DMA_FDT_FLAG, SWAP, BOUND_RATE, NAME##_IRQn, CRM_##NAME##_PERIPH_CLOCK, PRIORITY, LEN, 0)

View File

@ -68,9 +68,10 @@ void vSerialPortInitDMA(
env->rxDataSnifferQueue = 0;
}
FCUART_InitMemory(UART_INDEX);
FCUART_InitMemory(UART_INDEX);
env->dmaInitCfg.eArbitrationAlgorithm = DMA_ARBITRATION_ALGORITHM_FIXED_PRIORITY;
env->dmaInitCfg.bHaltOnError = false;
DMA_Init(DMA_INSTANCE_0, &env->dmaInitCfg);
@ -107,10 +108,9 @@ void vSerialPortInitDMA(
//NVIC_SetPriorityGrouping(NVIC_PRIORITY_GROUP_4);
NVIC_EnableIRQ(IRQ_DMA);
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;
@ -138,7 +138,7 @@ void vSerialPortInitDMA(
if (tRetVal == FCUART_ERROR_OK) {
env->s_tFCUART_TxMsg.pDatas = (uint8_t *) env->s_SampleTmp; // data buffer must set an array address
env->s_tFCUART_TxMsg.pDatas = (uint8_t *) env->dataBufTransmit; // data buffer must set an array address
env->s_tFCUART_TxMsg.u32DataLen = 0;
env->tInterruptCfg.pTxBuf = &env->s_tFCUART_TxMsg;
@ -149,17 +149,19 @@ void vSerialPortInitDMA(
env->tInterruptCfg.bEnRxInterrupt = false;
env->tInterruptCfg.pRxNotify = NULL;
env->tInterruptCfg.bEnTxInterrupt = true;
env->tInterruptCfg.bEnTxInterrupt = false;
env->tInterruptCfg.pTxEmptyNotify = FCUART_TxEmptyInterrupt_CallBack;
env->tInterruptCfg.pTxCompleteNotify = FCUART_TxCompleteInterrupt_CallBack;
tRetVal = FCUART_BufTransmitted(UART_INDEX, &env->tInterruptCfg);
tRetVal = FCUART_SetInterrupt(UART_INDEX, &env->tInterruptCfg);
NVIC_EnableIRQ(IRQ_UART);
NVIC_SetPriority(IRQ_UART, UART_PRIORITY);
tRetVal = FCUART_StartReceive(UART_INDEX);
NVIC_SetPriority(IRQ_UART, UART_PRIORITY);
NVIC_EnableIRQ(IRQ_UART);
}
}
@ -229,7 +231,8 @@ vSerialPortTransmitOverCore(tSerialPortFlagchip *env, uint8_t *data, uint16_t si
FCUART_ErrorType tRetVal;
tRetVal = FCUART_AssignTxInterruptData(env->UART_INDEX, (uint8 *) data, size);
memcpy(env->dataBufTransmit, data, size);
tRetVal = FCUART_AssignTxInterruptData(env->UART_INDEX, env->dataBufTransmit, size);
tRetVal = FCUART_StartTransmit(env->UART_INDEX);
@ -242,6 +245,10 @@ vSerialPortTransmitOverCore(tSerialPortFlagchip *env, uint8_t *data, uint16_t si
return sent;
}
void SerialPort_TxEndTransmitted(tSerialPortFlagchip *env, uint8_t data) {
osMessageQueuePut(env->txAccessQueue, &data, 0x0, 0U);
}
void SerialPort_RxDmaBufToQueue(tSerialPortFlagchip *env, const void *pSrcBuffer) {
for (uint32_t i = 0; i < env->UART_DMA_RECEIVED_LEN_BUF; ++i) {