Обновление
This commit is contained in:
parent
6623f9d676
commit
ea1f782fc3
|
|
@ -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;
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -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.u32SrcCircBufferSize = 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;
|
||||
}
|
||||
Loading…
Reference in New Issue