Hi Ma Hui,
I referred your demo code. And initial the lpuart as below. But I cannot receive anything in g_ui8RxBuffer[], am I lost something? By the way, because our protocol is based on 16-bit big-endian mode, could I configure kEDMATransferSize_1Bytes to kEDMATransferSize_2Bytes and make transform from big-endian to little-endian in 16-bit type?
Thanks in advance!
void InitUartDrv(void)
{
uint32_t dmaBaseAddr;
uint32_t dmaChannel;
uint32_t baseAddr = g_lpuartBaseAddr[0];
/*
* initial lpuart driver for commlink
*/
lpuartUserConfig.clockSource = kClockLpuartSrcPllFllSel;
lpuartUserConfig.baudRate = 2000000;
lpuartUserConfig.bitCountPerChar = kLpuart8BitsPerChar;
lpuartUserConfig.parityMode = kLpuartParityDisabled;
lpuartUserConfig.stopBitCount = kLpuartOneStopBit;
eDmaUserConfig.chnArbitration = kEDMAChnArbitrationRoundrobin;
EDMA_DRV_Init(&eDmaState, &eDmaUserConfig);
/*
* @ ToDo: allocate eDMA channel dynamically
* both for lpuart transmit and receive
* Channel 0 - LPUART RX
* Channel 1 - LPUART TX
*/
LPUART_DRV_EdmaInit(0, &lpuartEdmaState, &lpuartUserConfig);
/*
* re-initial RX to use eDMA + circular buffer
*/
dmaBaseAddr = VIRTUAL_CHN_TO_EDMA_MODULE_REGBASE(lpuartEdmaState.edmaLpuartRx.channel);
dmaChannel = VIRTUAL_CHN_TO_EDMA_CHN(lpuartEdmaState.edmaLpuartRx.channel);
/* Setup destination */
EDMA_HAL_HTCDSetDestAddr(dmaBaseAddr, dmaChannel, (uint32_t)(&g_ui8RxBuffer[0]));
EDMA_HAL_HTCDSetDestOffset(dmaBaseAddr, dmaChannel, 1);
EDMA_HAL_HTCDSetDestLastAdjust(dmaBaseAddr, dmaChannel, 0);
/* Setup source */
EDMA_HAL_HTCDSetSrcAddr(dmaBaseAddr, dmaChannel, LPUART_HAL_GetDataRegAddr(baseAddr));
EDMA_HAL_HTCDSetSrcOffset(dmaBaseAddr, dmaChannel, 0);
EDMA_HAL_HTCDSetSrcLastAdjust(dmaBaseAddr, dmaChannel, 0);
/* Setup transfer properties */
EDMA_HAL_HTCDSetNbytes(dmaBaseAddr, dmaChannel, 1);
EDMA_HAL_HTCDSetChannelMinorLink(dmaBaseAddr, dmaChannel, 0, false);
EDMA_HAL_HTCDSetMajorCount(dmaBaseAddr, dmaChannel, 1);
EDMA_HAL_HTCDSetAttribute(dmaBaseAddr, dmaChannel, kEDMAModuloDisable, kEDMAModulo1Mbytes, kEDMATransferSize_1Bytes, kEDMATransferSize_1Bytes);
EDMA_HAL_HTCDSetScatterGatherCmd(dmaBaseAddr, dmaChannel, false);
EDMA_HAL_HTCDSetDisableDmaRequestAfterTCDDoneCmd(dmaBaseAddr, dmaChannel, false);
/*
* Finally, enable the LPUART receiver
* Enable DMA trigger when receive data register full
*/
LPUART_HAL_SetRxDmaCmd(baseAddr, true);
LPUART_HAL_SetReceiverCmd(baseAddr, true);
}
B.R.
Jin Xin