Обновление
This commit is contained in:
parent
9a06f77447
commit
084ac5a199
|
|
@ -24,6 +24,7 @@
|
||||||
typedef struct {
|
typedef struct {
|
||||||
uint8_t UART_INDEX;
|
uint8_t UART_INDEX;
|
||||||
DMA_ChannelType RX_DMA_CHANNEL;
|
DMA_ChannelType RX_DMA_CHANNEL;
|
||||||
|
DMA_ChannelType TX_DMA_CHANNEL;
|
||||||
FCUART_Type *UART;
|
FCUART_Type *UART;
|
||||||
|
|
||||||
uint32_t DMA_BUF_LEN;
|
uint32_t DMA_BUF_LEN;
|
||||||
|
|
@ -39,6 +40,9 @@ typedef struct {
|
||||||
DMA_ChannelCfgType chnCfg_RX;
|
DMA_ChannelCfgType chnCfg_RX;
|
||||||
DMA_InterruptCfgType interruptCfg_RX;
|
DMA_InterruptCfgType interruptCfg_RX;
|
||||||
|
|
||||||
|
DMA_ChannelCfgType chnCfg_TX;
|
||||||
|
DMA_InterruptCfgType interruptCfg_TX;
|
||||||
|
|
||||||
uint8_t *dataBufTransmit;
|
uint8_t *dataBufTransmit;
|
||||||
uint32_t dataBufTransmitLen;
|
uint32_t dataBufTransmitLen;
|
||||||
|
|
||||||
|
|
@ -69,11 +73,26 @@ void vSerialPortInitDMA(
|
||||||
uint8_t IRQ_DMA_PRIORITY_RX,
|
uint8_t IRQ_DMA_PRIORITY_RX,
|
||||||
uint8_t IRQ_DMA_CHANNEL_PRIORITY_RX,
|
uint8_t IRQ_DMA_CHANNEL_PRIORITY_RX,
|
||||||
|
|
||||||
|
|
||||||
|
DMA_ChannelType DMA_CHANNEL_TX,
|
||||||
|
DMA_RequestSourceType DMA_CHANNEL_REQ_TX,
|
||||||
|
uint8_t *DMA_BUF_TX,
|
||||||
|
uint16_t DMA_BUF_LEN_TX,
|
||||||
|
IRQn_Type IRQ_DMA_TX,
|
||||||
|
uint8_t IRQ_DMA_PRIORITY_TX,
|
||||||
|
uint8_t IRQ_DMA_CHANNEL_PRIORITY_TX,
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
uint32_t rxBufferLength,
|
uint32_t rxBufferLength,
|
||||||
uint32_t rxSnifferLength,
|
uint32_t rxSnifferLength,
|
||||||
|
|
||||||
DMA_TransferCompleteCallbackType pTransferCompleteNotify,
|
DMA_TransferCompleteCallbackType pTransferCompleteNotifyRx,
|
||||||
DMA_TransferErrorCallbackType pTransferErrorNotify,
|
DMA_TransferErrorCallbackType pTransferErrorNotifyRx,
|
||||||
|
|
||||||
|
DMA_TransferCompleteCallbackType pTransferCompleteNotifyTx,
|
||||||
|
DMA_TransferErrorCallbackType pTransferErrorNotifyTx,
|
||||||
|
|
||||||
FCUART_IdleInterrupt_CallBackType FCUART_IldeInterrupt_CallBack,
|
FCUART_IdleInterrupt_CallBackType FCUART_IldeInterrupt_CallBack,
|
||||||
FCUART_ErrorInterrupt_CallBackType FCUART_ErrorInterrupt_CallBack,
|
FCUART_ErrorInterrupt_CallBackType FCUART_ErrorInterrupt_CallBack,
|
||||||
|
|
|
||||||
|
|
@ -38,11 +38,23 @@ void vSerialPortInitDMA(
|
||||||
uint8_t IRQ_DMA_PRIORITY_RX,
|
uint8_t IRQ_DMA_PRIORITY_RX,
|
||||||
uint8_t IRQ_DMA_CHANNEL_PRIORITY_RX,
|
uint8_t IRQ_DMA_CHANNEL_PRIORITY_RX,
|
||||||
|
|
||||||
|
DMA_ChannelType DMA_CHANNEL_TX,
|
||||||
|
DMA_RequestSourceType DMA_CHANNEL_REQ_TX,
|
||||||
|
uint8_t *DMA_BUF_TX,
|
||||||
|
uint16_t DMA_BUF_LEN_TX,
|
||||||
|
IRQn_Type IRQ_DMA_TX,
|
||||||
|
uint8_t IRQ_DMA_PRIORITY_TX,
|
||||||
|
uint8_t IRQ_DMA_CHANNEL_PRIORITY_TX,
|
||||||
|
|
||||||
|
|
||||||
uint32_t rxBufferLength,
|
uint32_t rxBufferLength,
|
||||||
uint32_t rxSnifferLength,
|
uint32_t rxSnifferLength,
|
||||||
|
|
||||||
DMA_TransferCompleteCallbackType pTransferCompleteNotify,
|
DMA_TransferCompleteCallbackType pTransferCompleteNotifyRx,
|
||||||
DMA_TransferErrorCallbackType pTransferErrorNotify,
|
DMA_TransferErrorCallbackType pTransferErrorNotifyRx,
|
||||||
|
|
||||||
|
DMA_TransferCompleteCallbackType pTransferCompleteNotifyTx,
|
||||||
|
DMA_TransferErrorCallbackType pTransferErrorNotifyTx,
|
||||||
|
|
||||||
FCUART_IdleInterrupt_CallBackType FCUART_IldeInterrupt_CallBack,
|
FCUART_IdleInterrupt_CallBackType FCUART_IldeInterrupt_CallBack,
|
||||||
FCUART_ErrorInterrupt_CallBackType FCUART_ErrorInterrupt_CallBack,
|
FCUART_ErrorInterrupt_CallBackType FCUART_ErrorInterrupt_CallBack,
|
||||||
|
|
@ -54,6 +66,7 @@ void vSerialPortInitDMA(
|
||||||
) {
|
) {
|
||||||
env->UART_INDEX = UART_INDEX;
|
env->UART_INDEX = UART_INDEX;
|
||||||
env->RX_DMA_CHANNEL = DMA_CHANNEL_RX;
|
env->RX_DMA_CHANNEL = DMA_CHANNEL_RX;
|
||||||
|
env->TX_DMA_CHANNEL = DMA_CHANNEL_TX;
|
||||||
env->UART = uart;
|
env->UART = uart;
|
||||||
env->DMA_BUF_LEN = DMA_BUF_LEN_RX;
|
env->DMA_BUF_LEN = DMA_BUF_LEN_RX;
|
||||||
env->UART_DMA_RECEIVED_LEN_BUF = 0;
|
env->UART_DMA_RECEIVED_LEN_BUF = 0;
|
||||||
|
|
@ -97,9 +110,9 @@ void vSerialPortInitDMA(
|
||||||
DMA_InitChannel(DMA_INSTANCE_0, DMA_CHANNEL_RX, &env->chnCfg_RX);
|
DMA_InitChannel(DMA_INSTANCE_0, DMA_CHANNEL_RX, &env->chnCfg_RX);
|
||||||
|
|
||||||
env->interruptCfg_RX.bTransferCompleteIntEn = true;
|
env->interruptCfg_RX.bTransferCompleteIntEn = true;
|
||||||
env->interruptCfg_RX.pTransferCompleteNotify = pTransferCompleteNotify;
|
env->interruptCfg_RX.pTransferCompleteNotify = pTransferCompleteNotifyRx;
|
||||||
env->interruptCfg_RX.bTransferErrorIntEn = true;
|
env->interruptCfg_RX.bTransferErrorIntEn = true;
|
||||||
env->interruptCfg_RX.pTransferErrorNotify = pTransferErrorNotify;
|
env->interruptCfg_RX.pTransferErrorNotify = pTransferErrorNotifyRx;
|
||||||
DMA_InitChannelInterrupt(DMA_INSTANCE_0, DMA_CHANNEL_RX, &env->interruptCfg_RX);
|
DMA_InitChannelInterrupt(DMA_INSTANCE_0, DMA_CHANNEL_RX, &env->interruptCfg_RX);
|
||||||
|
|
||||||
DMA_StartChannel(DMA_INSTANCE_0, DMA_CHANNEL_RX);
|
DMA_StartChannel(DMA_INSTANCE_0, DMA_CHANNEL_RX);
|
||||||
|
|
@ -113,6 +126,49 @@ void vSerialPortInitDMA(
|
||||||
//конец-----------------------------------DMA-RX--------------------------------------------------------------------
|
//конец-----------------------------------DMA-RX--------------------------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
|
//начало-----------------------------------DMA-TX-------------------------------------------------------------------
|
||||||
|
//начало-----------------------------------DMA-TX-------------------------------------------------------------------
|
||||||
|
//начало-----------------------------------DMA-TX-------------------------------------------------------------------
|
||||||
|
|
||||||
|
env->chnCfg_TX.pSrcBuffer = DMA_BUF_TX;
|
||||||
|
env->chnCfg_TX.pDestBuffer = &(uart->DATA);
|
||||||
|
env->chnCfg_TX.u32BlockSize = 1U;
|
||||||
|
env->chnCfg_TX.u16BlockCount = 1U;
|
||||||
|
env->chnCfg_TX.u8ChannelPriority = IRQ_DMA_CHANNEL_PRIORITY_TX;
|
||||||
|
env->chnCfg_TX.eSrcDataSize = DMA_TRANSFER_SIZE_1B;
|
||||||
|
env->chnCfg_TX.eDestDataSize = DMA_TRANSFER_SIZE_1B;
|
||||||
|
env->chnCfg_TX.eSrcIncMode = DMA_INCREMENT_DATA_SIZE;
|
||||||
|
env->chnCfg_TX.eDestIncMode = DMA_INCREMENT_DISABLE;
|
||||||
|
env->chnCfg_TX.bSrcBlockOffsetEn = false;
|
||||||
|
env->chnCfg_TX.bDestBlockOffsetEn = false;
|
||||||
|
env->chnCfg_TX.s32BlockOffset = 0;
|
||||||
|
env->chnCfg_TX.bSrcAddrLoopbackEn = false;
|
||||||
|
env->chnCfg_TX.bDestAddrLoopbackEn = false;
|
||||||
|
env->chnCfg_TX.bAutoStop = true;
|
||||||
|
|
||||||
|
env->chnCfg_TX.bSrcCircularBufferEn = false;
|
||||||
|
env->chnCfg_TX.u32SrcCircBufferSize = 0U;
|
||||||
|
env->chnCfg_TX.bDestCircularBufferEn = false;
|
||||||
|
env->chnCfg_TX.u32DestCircBufferSize = 0U;
|
||||||
|
|
||||||
|
env->chnCfg_TX.eTriggerSrc = DMA_CHANNEL_REQ_TX;
|
||||||
|
DMA_InitChannel(DMA_INSTANCE_0, DMA_CHANNEL_TX, &env->chnCfg_TX);
|
||||||
|
|
||||||
|
env->interruptCfg_TX.bTransferCompleteIntEn = true;
|
||||||
|
env->interruptCfg_TX.pTransferCompleteNotify = pTransferCompleteNotifyTx;
|
||||||
|
env->interruptCfg_TX.bTransferErrorIntEn = true;
|
||||||
|
env->interruptCfg_TX.pTransferErrorNotify = pTransferErrorNotifyTx;
|
||||||
|
DMA_InitChannelInterrupt(DMA_INSTANCE_0, DMA_CHANNEL_TX, &env->interruptCfg_TX);
|
||||||
|
|
||||||
|
// DMA_StartChannel(DMA_INSTANCE_0, DMA_CHANNEL_TX);
|
||||||
|
|
||||||
|
NVIC_SetPriority(IRQ_DMA_TX, IRQ_DMA_PRIORITY_TX);
|
||||||
|
NVIC_EnableIRQ(IRQ_DMA_TX);
|
||||||
|
|
||||||
|
//конец-----------------------------------DMA-TX--------------------------------------------------------------------
|
||||||
|
//конец-----------------------------------DMA-TX--------------------------------------------------------------------
|
||||||
|
//конец-----------------------------------DMA-TX--------------------------------------------------------------------
|
||||||
|
|
||||||
//начало------------------------------------UART--------------------------------------------------------------------
|
//начало------------------------------------UART--------------------------------------------------------------------
|
||||||
//начало------------------------------------UART--------------------------------------------------------------------
|
//начало------------------------------------UART--------------------------------------------------------------------
|
||||||
//начало------------------------------------UART--------------------------------------------------------------------
|
//начало------------------------------------UART--------------------------------------------------------------------
|
||||||
|
|
@ -126,6 +182,7 @@ void vSerialPortInitDMA(
|
||||||
|
|
||||||
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.bEnTxEmptyDma = true;
|
||||||
|
|
||||||
env->tInitCfg.bEnTxFifo = true;
|
env->tInitCfg.bEnTxFifo = true;
|
||||||
env->tInitCfg.u8TxFifoWaterMark = 0U;
|
env->tInitCfg.u8TxFifoWaterMark = 0U;
|
||||||
|
|
@ -166,8 +223,10 @@ void vSerialPortInitDMA(
|
||||||
|
|
||||||
tRetVal = FCUART_SetInterrupt(UART_INDEX, &env->tInterruptCfg);
|
tRetVal = FCUART_SetInterrupt(UART_INDEX, &env->tInterruptCfg);
|
||||||
|
|
||||||
NVIC_SetPriority(IRQ_UART, UART_PRIORITY);
|
// NVIC_SetPriority(IRQ_UART, UART_PRIORITY);
|
||||||
NVIC_EnableIRQ(IRQ_UART);
|
// NVIC_EnableIRQ(IRQ_UART);
|
||||||
|
|
||||||
|
FCUART_HWA_SetTxTransfer(env->UART, true);
|
||||||
|
|
||||||
tRetVal = FCUART_StartReceive(UART_INDEX);
|
tRetVal = FCUART_StartReceive(UART_INDEX);
|
||||||
|
|
||||||
|
|
@ -234,6 +293,27 @@ vSerialPortTransmitOverCore(tSerialPortFlagchip *env, uint8_t *data, uint16_t si
|
||||||
|
|
||||||
uint16_t sent = 0;
|
uint16_t sent = 0;
|
||||||
|
|
||||||
|
if (size > 0) {
|
||||||
|
|
||||||
|
DMA_ModifyAddress(DMA_INSTANCE_0, env->TX_DMA_CHANNEL, data, NULL);
|
||||||
|
DMA_ModifySize(DMA_INSTANCE_0, env->TX_DMA_CHANNEL, size);
|
||||||
|
|
||||||
|
DMA_StartChannel(DMA_INSTANCE_0, env->TX_DMA_CHANNEL);
|
||||||
|
|
||||||
|
uint8_t res;
|
||||||
|
|
||||||
|
sent = (osMessageQueueGet(env->txAccessQueue, &res, 0, timeout) == osOK) ? size : 0;
|
||||||
|
|
||||||
|
DMA_StopChannel(DMA_INSTANCE_0, env->TX_DMA_CHANNEL);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
return sent;
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
uint16_t sent = 0;
|
||||||
|
|
||||||
FCUART_ErrorType tRetVal;
|
FCUART_ErrorType tRetVal;
|
||||||
|
|
||||||
tRetVal = FCUART_AssignTxInterruptData(env->UART_INDEX, env->dataBufTransmit, size);
|
tRetVal = FCUART_AssignTxInterruptData(env->UART_INDEX, env->dataBufTransmit, size);
|
||||||
|
|
@ -247,6 +327,7 @@ vSerialPortTransmitOverCore(tSerialPortFlagchip *env, uint8_t *data, uint16_t si
|
||||||
sent = (osMessageQueueGet(env->txAccessQueue, &res, 0, timeout) == osOK) ? size : 0;
|
sent = (osMessageQueueGet(env->txAccessQueue, &res, 0, timeout) == osOK) ? size : 0;
|
||||||
|
|
||||||
return sent;
|
return sent;
|
||||||
|
*/
|
||||||
}
|
}
|
||||||
|
|
||||||
void SerialPort_TxEndTransmitted(tSerialPortFlagchip *env, uint8_t data) {
|
void SerialPort_TxEndTransmitted(tSerialPortFlagchip *env, uint8_t data) {
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue