您好!
我当前正在 AM243x 上以回调模式使用 UART DMA 从 UART 端口连续读取数据。 因此、如果 DMA 缓冲区已满、将调用 ISR、在其中进一步处理数据。
但我没有找到有关此主题的任何内容、所以我的问题是、如果可以添加空闲中断或超时、如果 DMA 缓冲区中已经有数据、则没有更多可用数据、从而不会丢失其中任何数据? 如果是,为达到这一目标,必须采取什么措施?
提前感谢您。
丹尼尔
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
您好!
我当前正在 AM243x 上以回调模式使用 UART DMA 从 UART 端口连续读取数据。 因此、如果 DMA 缓冲区已满、将调用 ISR、在其中进一步处理数据。
但我没有找到有关此主题的任何内容、所以我的问题是、如果可以添加空闲中断或超时、如果 DMA 缓冲区中已经有数据、则没有更多可用数据、从而不会丢失其中任何数据? 如果是,为达到这一目标,必须采取什么措施?
提前感谢您。
丹尼尔
Daniel、您好!
我正在尝试了解您的应用程序。
因此,在上述 情况下,我们只能配置 DMA 从 UART 读取多少个字节。 但是,在这里,用户需要等待直到目标缓冲区被填充为 DMA 回调. 如果缓冲区未被填满,用户不会获取 DMA 完成回调。
现在我们可以 改进上述方法 。
例如,我们可以调用以下 API 通过 DMA 读取 UART 数据。 在 API 的下面还有一个函数、 udma_ringQueueRaw 函数,这种类型的开头 DMA 让我们假设我们可以假设 DMA 可以读取数据100字节在 X 秒,但现在 DMA 将只读取几个字节不完成100字节.
UART_LLD_readDma
在这里、我们可以在调用计时器后启动计时器、 udma_ringQueueRaw 功能。 如果 DMA 在时隙中接收到所有数据字节,则清除 计时器。 如果在时隙中没有接收所有数据,你可能会得到计时器中断,你可以做任何你想要的。 但是,用户不知道 DMA 从 UART 读取了多少字节。
此致、
S.Anil.