Обновление
This commit is contained in:
parent
82840cff76
commit
983966f58c
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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) {
|
||||
|
|
|
|||
Loading…
Reference in New Issue