Part Number:IWR6843ISK
在这个例程中,工程师给uart_logging串口(即代码中标注的UART-3)配置了DMA:
UART_Params_init(&uartParams);
uartParams.writeDataMode = UART_DATA_BINARY;
uartParams.readDataMode = UART_DATA_BINARY;
uartParams.clockFrequency = gMmwMssMCB.cfg.sysClockFrequency;
uartParams.baudRate = gMmwMssMCB.cfg.loggingBaudRate;
uartParams.isPinMuxDone = 1U;
uartParams.dmaHandle = dmaHandle;
uartParams.txDMAChannel = 1U;
uartParams.rxDMAChannel = 2U;
可是我找不到配置DMA后标志位的位置和相关的设置,请问这个DMA配置完后的des在哪里?应该如何配置这个des?相关中断位在哪里读取?
Nancy Wang:
Guifeng Xu 说:找不到配置DMA后标志位的位置和相关的设置
哪个标志位?
Guifeng Xu 说:这个DMA配置完后的des在哪里?
des具体指什么?
,
Guifeng Xu:
DMA是配置了软件中断吗?如何设置DMA传输多少数据再中断?这个中断指的是DMA复制、转移数据完成后的中断位des指的是DMA将数据转移到了哪里,是目标地址
,
Chris Meng:
你好,
建议你看看mmwave sdk里相关驱动代码:
mmwave_sdk_03_05_00_04\packages\ti\drivers\uart\src\uartsci_dma.c
,
Guifeng Xu:
你好,我已经看到相关代码,但是还是不是很了解
dmaHandle = DMA_open(0, &dmaParams, &errCode);
uartParams.dmaHandle = dmaHandle; uartParams.txDMAChannel = 1U; uartParams.rxDMAChannel = 2U;
这两段是如何设置DMA目的地址的
,
Chris Meng:
你好,
请仔细看看代码,我截取了部分信息:
nt32_t UartSci_initiateTxDMA( UartSci_Driver* ptrUartSciDriver, uint32_t srcAddress, uint32_t numBytes, bool pollingMode){ UartSci_DriverDMA* ptrDriverDMA; int32_t retVal; uint32_t pollStatus = 0U; int32_t errCode = 0;
/* Get the DMA Block: */ ptrDriverDMA = (UartSci_DriverDMA*)ptrUartSciDriver->ptrDMAInfo;
/* Disable the UART Transmit DMA mode */ UartSci_disableTxDMA(ptrDriverDMA->ptrHwCfg->ptrSCIRegs);
/* Most of the fields for the Transmit DMA Control packet are initialized. * Only setup the data fields which change on a per DMA Transaction basis */ ptrDriverDMA->txDMACtrlPktParams.srcAddr = srcAddress; ptrDriverDMA->txDMACtrlPktParams.frameXferCnt = numBytes;
,
Guifeng Xu:
我看到了这里,但是我不知道哪里调用了这个函数设置了srcAddress,所以我无法使用uart_read()读取到任何数据…
,
Guifeng Xu:
您可以告诉我uart设置了dma以及其通道之后,应该如何发送或者读取数据吗?
,
Chris Meng:
你好,
建议你尝试一下驱动里的测试例程,各种模式都有支持。
C:\ti\mmwave_sdk_03_05_00_04\packages\ti\drivers\uart\test
,
Guifeng Xu:
我已经看了这个测试例程,但是它配置完UARTparams的DMAhandle和dmaChannel之后直接调用UART_read()或者UART_write()就能够使用了,然而相同的配置方法在这个例程中却无法使用,可能是我了解的比较少,您可以详细说说这个UART与DMA配合的工作流程以及DMA将UART的缓存设置在了哪里吗?我配置了通道后在哪里写入UART数据或者从UART读取数据呢?
,
Chris Meng:
你好,
应该是有些初始化没有正确配置。建议你在UART的驱动测试例程里精简一下代码,注释掉你认为没有用的代码,然后对比你的代码,看初始化,配置方面有什么差异。