Обновление
This commit is contained in:
parent
9a06f77447
commit
084ac5a199
|
|
@ -24,6 +24,7 @@
|
|||
typedef struct {
|
||||
uint8_t UART_INDEX;
|
||||
DMA_ChannelType RX_DMA_CHANNEL;
|
||||
DMA_ChannelType TX_DMA_CHANNEL;
|
||||
FCUART_Type *UART;
|
||||
|
||||
uint32_t DMA_BUF_LEN;
|
||||
|
|
@ -39,6 +40,9 @@ typedef struct {
|
|||
DMA_ChannelCfgType chnCfg_RX;
|
||||
DMA_InterruptCfgType interruptCfg_RX;
|
||||
|
||||
DMA_ChannelCfgType chnCfg_TX;
|
||||
DMA_InterruptCfgType interruptCfg_TX;
|
||||
|
||||
uint8_t *dataBufTransmit;
|
||||
uint32_t dataBufTransmitLen;
|
||||
|
||||
|
|
@ -69,11 +73,26 @@ void vSerialPortInitDMA(
|
|||
uint8_t IRQ_DMA_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 rxSnifferLength,
|
||||
|
||||
DMA_TransferCompleteCallbackType pTransferCompleteNotify,
|
||||
DMA_TransferErrorCallbackType pTransferErrorNotify,
|
||||
DMA_TransferCompleteCallbackType pTransferCompleteNotifyRx,
|
||||
DMA_TransferErrorCallbackType pTransferErrorNotifyRx,
|
||||
|
||||
DMA_TransferCompleteCallbackType pTransferCompleteNotifyTx,
|
||||
DMA_TransferErrorCallbackType pTransferErrorNotifyTx,
|
||||
|
||||
FCUART_IdleInterrupt_CallBackType FCUART_IldeInterrupt_CallBack,
|
||||
FCUART_ErrorInterrupt_CallBackType FCUART_ErrorInterrupt_CallBack,
|
||||
|
|
|
|||
|
|
@ -38,11 +38,23 @@ void vSerialPortInitDMA(
|
|||
uint8_t IRQ_DMA_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 rxSnifferLength,
|
||||
|
||||
DMA_TransferCompleteCallbackType pTransferCompleteNotify,
|
||||
DMA_TransferErrorCallbackType pTransferErrorNotify,
|
||||
DMA_TransferCompleteCallbackType pTransferCompleteNotifyRx,
|
||||
DMA_TransferErrorCallbackType pTransferErrorNotifyRx,
|
||||
|
||||
DMA_TransferCompleteCallbackType pTransferCompleteNotifyTx,
|
||||
DMA_TransferErrorCallbackType pTransferErrorNotifyTx,
|
||||
|
||||
FCUART_IdleInterrupt_CallBackType FCUART_IldeInterrupt_CallBack,
|
||||
FCUART_ErrorInterrupt_CallBackType FCUART_ErrorInterrupt_CallBack,
|
||||
|
|
@ -54,6 +66,7 @@ void vSerialPortInitDMA(
|
|||
) {
|
||||
env->UART_INDEX = UART_INDEX;
|
||||
env->RX_DMA_CHANNEL = DMA_CHANNEL_RX;
|
||||
env->TX_DMA_CHANNEL = DMA_CHANNEL_TX;
|
||||
env->UART = uart;
|
||||
env->DMA_BUF_LEN = DMA_BUF_LEN_RX;
|
||||
env->UART_DMA_RECEIVED_LEN_BUF = 0;
|
||||
|
|
@ -97,9 +110,9 @@ void vSerialPortInitDMA(
|
|||
DMA_InitChannel(DMA_INSTANCE_0, DMA_CHANNEL_RX, &env->chnCfg_RX);
|
||||
|
||||
env->interruptCfg_RX.bTransferCompleteIntEn = true;
|
||||
env->interruptCfg_RX.pTransferCompleteNotify = pTransferCompleteNotify;
|
||||
env->interruptCfg_RX.pTransferCompleteNotify = pTransferCompleteNotifyRx;
|
||||
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_StartChannel(DMA_INSTANCE_0, DMA_CHANNEL_RX);
|
||||
|
|
@ -113,6 +126,49 @@ void vSerialPortInitDMA(
|
|||
//конец-----------------------------------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--------------------------------------------------------------------
|
||||
|
|
@ -126,6 +182,7 @@ void vSerialPortInitDMA(
|
|||
|
||||
if (u32PccFuncClk != 0U) {
|
||||
env->tInitCfg.bEnRxFullDma = true; // UART receiver full DMA disable
|
||||
env->tInitCfg.bEnTxEmptyDma = true;
|
||||
|
||||
env->tInitCfg.bEnTxFifo = true;
|
||||
env->tInitCfg.u8TxFifoWaterMark = 0U;
|
||||
|
|
@ -166,8 +223,10 @@ void vSerialPortInitDMA(
|
|||
|
||||
tRetVal = FCUART_SetInterrupt(UART_INDEX, &env->tInterruptCfg);
|
||||
|
||||
NVIC_SetPriority(IRQ_UART, UART_PRIORITY);
|
||||
NVIC_EnableIRQ(IRQ_UART);
|
||||
// NVIC_SetPriority(IRQ_UART, UART_PRIORITY);
|
||||
// NVIC_EnableIRQ(IRQ_UART);
|
||||
|
||||
FCUART_HWA_SetTxTransfer(env->UART, true);
|
||||
|
||||
tRetVal = FCUART_StartReceive(UART_INDEX);
|
||||
|
||||
|
|
@ -234,6 +293,27 @@ vSerialPortTransmitOverCore(tSerialPortFlagchip *env, uint8_t *data, uint16_t si
|
|||
|
||||
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;
|
||||
|
||||
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;
|
||||
|
||||
return sent;
|
||||
*/
|
||||
}
|
||||
|
||||
void SerialPort_TxEndTransmitted(tSerialPortFlagchip *env, uint8_t data) {
|
||||
|
|
|
|||
Loading…
Reference in New Issue