Обновление
This commit is contained in:
parent
6623f9d676
commit
ea1f782fc3
|
|
@ -18,6 +18,9 @@
|
||||||
#include "fc7xxx_driver_gpio.h"
|
#include "fc7xxx_driver_gpio.h"
|
||||||
#include "fc7xxx_driver_dma.h"
|
#include "fc7xxx_driver_dma.h"
|
||||||
|
|
||||||
|
|
||||||
|
#define UART_RX_FIFO_WATERMARK 15U
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
uint8_t UART_INDEX;
|
uint8_t UART_INDEX;
|
||||||
DMA_ChannelType RX_DMA_CHANNEL;
|
DMA_ChannelType RX_DMA_CHANNEL;
|
||||||
|
|
@ -26,6 +29,7 @@ typedef struct {
|
||||||
uint32_t DMA_BUF_LEN;
|
uint32_t DMA_BUF_LEN;
|
||||||
|
|
||||||
uint32_t UART_DMA_RECEIVED_LEN_BUF;
|
uint32_t UART_DMA_RECEIVED_LEN_BUF;
|
||||||
|
uint32_t UART_DMA_RECEIVED_POINTER_BUF;
|
||||||
|
|
||||||
FCUART_DataType s_tFCUART_TxMsg;
|
FCUART_DataType s_tFCUART_TxMsg;
|
||||||
|
|
||||||
|
|
@ -42,7 +46,7 @@ typedef struct {
|
||||||
osMessageQueueId_t txAccessQueue;
|
osMessageQueueId_t txAccessQueue;
|
||||||
osMessageQueueId_t rxDataQueue;
|
osMessageQueueId_t rxDataQueue;
|
||||||
osMessageQueueId_t rxDataSnifferQueue;
|
osMessageQueueId_t rxDataSnifferQueue;
|
||||||
osMessageQueueId_t rxDataSnifferSecondQueue;
|
|
||||||
} tSerialPortFlagchip;
|
} tSerialPortFlagchip;
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -74,9 +74,6 @@ void vSerialPortInitDMA(
|
||||||
env->rxDataSnifferQueue = 0;
|
env->rxDataSnifferQueue = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
FCUART_InitMemory(UART_INDEX);
|
|
||||||
|
|
||||||
env->dmaInitCfg.eArbitrationAlgorithm = DMA_ARBITRATION_ALGORITHM_FIXED_PRIORITY;
|
env->dmaInitCfg.eArbitrationAlgorithm = DMA_ARBITRATION_ALGORITHM_FIXED_PRIORITY;
|
||||||
env->dmaInitCfg.bHaltOnError = false;
|
env->dmaInitCfg.bHaltOnError = false;
|
||||||
DMA_Init(DMA_INSTANCE_0, &env->dmaInitCfg);
|
DMA_Init(DMA_INSTANCE_0, &env->dmaInitCfg);
|
||||||
|
|
@ -84,6 +81,7 @@ void vSerialPortInitDMA(
|
||||||
env->chnCfg.pSrcBuffer = &(uart->DATA);
|
env->chnCfg.pSrcBuffer = &(uart->DATA);
|
||||||
env->chnCfg.pDestBuffer = DMA_BUF;
|
env->chnCfg.pDestBuffer = DMA_BUF;
|
||||||
env->chnCfg.u32BlockSize = 1U;
|
env->chnCfg.u32BlockSize = 1U;
|
||||||
|
//env->chnCfg.u32BlockSize = (UART_RX_FIFO_WATERMARK + 1U);;
|
||||||
env->chnCfg.u16BlockCount = 1U;
|
env->chnCfg.u16BlockCount = 1U;
|
||||||
env->chnCfg.u8ChannelPriority = IRQ_DMA_CHANNEL_PRIORITY;
|
env->chnCfg.u8ChannelPriority = IRQ_DMA_CHANNEL_PRIORITY;
|
||||||
env->chnCfg.eSrcDataSize = DMA_TRANSFER_SIZE_1B;
|
env->chnCfg.eSrcDataSize = DMA_TRANSFER_SIZE_1B;
|
||||||
|
|
@ -96,10 +94,17 @@ void vSerialPortInitDMA(
|
||||||
env->chnCfg.bSrcAddrLoopbackEn = false;
|
env->chnCfg.bSrcAddrLoopbackEn = false;
|
||||||
env->chnCfg.bDestAddrLoopbackEn = false;
|
env->chnCfg.bDestAddrLoopbackEn = false;
|
||||||
env->chnCfg.bAutoStop = 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.bSrcCircularBufferEn = false;
|
||||||
env->chnCfg.u32SrcCircBufferSize = 0U;
|
env->chnCfg.u32SrcCircBufferSize = 0U;
|
||||||
env->chnCfg.bDestCircularBufferEn = false;
|
env->chnCfg.bDestCircularBufferEn = true;
|
||||||
env->chnCfg.u32DestCircBufferSize = 0U;
|
env->chnCfg.u32DestCircBufferSize = DMA_BUF_LEN;
|
||||||
|
|
||||||
env->chnCfg.eTriggerSrc = RX_DMA_CHANNEL_REQ;
|
env->chnCfg.eTriggerSrc = RX_DMA_CHANNEL_REQ;
|
||||||
DMA_InitChannel(DMA_INSTANCE_0, RX_DMA_CHANNEL, &env->chnCfg);
|
DMA_InitChannel(DMA_INSTANCE_0, RX_DMA_CHANNEL, &env->chnCfg);
|
||||||
|
|
||||||
|
|
@ -111,23 +116,30 @@ void vSerialPortInitDMA(
|
||||||
|
|
||||||
DMA_StartChannel(DMA_INSTANCE_0, RX_DMA_CHANNEL);
|
DMA_StartChannel(DMA_INSTANCE_0, RX_DMA_CHANNEL);
|
||||||
|
|
||||||
//NVIC_SetPriorityGrouping(NVIC_PRIORITY_GROUP_4);
|
|
||||||
|
|
||||||
NVIC_SetPriority(DMA_Error_IRQn, IRQ_DMA_PRIORITY);
|
NVIC_SetPriority(DMA_Error_IRQn, IRQ_DMA_PRIORITY);
|
||||||
NVIC_SetPriority(IRQ_DMA, IRQ_DMA_PRIORITY);
|
NVIC_SetPriority(IRQ_DMA, IRQ_DMA_PRIORITY);
|
||||||
NVIC_EnableIRQ(IRQ_DMA);
|
NVIC_EnableIRQ(IRQ_DMA);
|
||||||
|
|
||||||
|
|
||||||
FCUART_ErrorType tRetVal;
|
FCUART_ErrorType tRetVal;
|
||||||
uint32_t u32PccFuncClk;
|
uint32_t u32PccFuncClk;
|
||||||
|
|
||||||
|
FCUART_InitMemory(UART_INDEX);
|
||||||
|
|
||||||
u32PccFuncClk = PCC_GetPccFunctionClock(s_ePccUartTable[UART_INDEX]);
|
u32PccFuncClk = PCC_GetPccFunctionClock(s_ePccUartTable[UART_INDEX]);
|
||||||
|
|
||||||
if (u32PccFuncClk != 0U) {
|
if (u32PccFuncClk != 0U) {
|
||||||
env->tInitCfg.bEnRxFullDma = true; // UART receiver full DMA disable
|
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.bEnRxFifo = false; // UART fifo disable
|
||||||
env->tInitCfg.u8TxFifoWaterMark = 0U; // UART tx fifo 16 bytes trigger
|
//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.eIdleCharNum = FCUART_IDLE_CHARCTER_64; // UART idle character number 64
|
||||||
env->tInitCfg.eIdleStart = FCUART_START_AFTER_STOPBIT; // UART idle character type
|
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_SetInterrupt(UART_INDEX, &env->tInterruptCfg);
|
||||||
|
|
||||||
tRetVal = FCUART_StartReceive(UART_INDEX);
|
|
||||||
|
|
||||||
NVIC_SetPriority(IRQ_UART, UART_PRIORITY);
|
NVIC_SetPriority(IRQ_UART, UART_PRIORITY);
|
||||||
NVIC_EnableIRQ(IRQ_UART);
|
NVIC_EnableIRQ(IRQ_UART);
|
||||||
|
|
||||||
|
tRetVal = FCUART_StartReceive(UART_INDEX);
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -220,14 +232,6 @@ static uint16_t vSerialPortReceiveSniffer(tSerialPortFlagchip *env, uint8_t *dat
|
||||||
: 0;
|
: 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
|
static uint16_t
|
||||||
vSerialPortTransmitOverCore(tSerialPortFlagchip *env, uint8_t *data, uint16_t size, uint32_t timeout) {
|
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;
|
FCUART_ErrorType tRetVal;
|
||||||
|
|
||||||
// memcpy(env->dataBufTransmit, data, size);
|
|
||||||
tRetVal = FCUART_AssignTxInterruptData(env->UART_INDEX, env->dataBufTransmit, size);
|
tRetVal = FCUART_AssignTxInterruptData(env->UART_INDEX, env->dataBufTransmit, size);
|
||||||
|
|
||||||
tRetVal = FCUART_StartTransmit(env->UART_INDEX);
|
tRetVal = FCUART_StartTransmit(env->UART_INDEX);
|
||||||
|
|
@ -293,12 +296,3 @@ tSerialPortIO vSerialPortGetSnifferIo(tSerialPortFlagchip *env) {
|
||||||
};
|
};
|
||||||
return io;
|
return io;
|
||||||
}
|
}
|
||||||
|
|
||||||
tSerialPortIO SerialPort_GetSnifferSecondIo(tSerialPortFlagchip *env) {
|
|
||||||
tSerialPortIO io = {
|
|
||||||
.env = env,
|
|
||||||
.receive = (SerialPortIOTransaction) vSerialPortReceiveSnifferSecond,
|
|
||||||
.transmit = vSerialPortTransmitterGet(env)
|
|
||||||
};
|
|
||||||
return io;
|
|
||||||
}
|
|
||||||
Loading…
Reference in New Issue