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.

[参考译文] AM2434:在回调模式下向 DMA 添加空闲中断

Guru**** 2407400 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1332644/am2434-add-idle-interrupt-to-dma-in-callback-mode

器件型号:AM2434

您好!

我当前正在 AM243x 上以回调模式使用 UART DMA 从 UART 端口连续读取数据。 因此、如果 DMA 缓冲区已满、将调用 ISR、在其中进一步处理数据。

但我没有找到有关此主题的任何内容、所以我的问题是、如果可以添加空闲中断或超时、如果 DMA 缓冲区中已经有数据、则没有更多可用数据、从而不会丢失其中任何数据? 如果是,为达到这一目标,必须采取什么措施?

提前感谢您。

丹尼尔

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Daniel、您好!

    感谢您访问德州仪器 E2E 支持论坛。

    我们的域专家今天到场、因此将推迟回复。 请期待一两天内得到回复。

    此致、

    图沙尔

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    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.

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Anil 您好!

    感谢您的答复。 那么、这意味着如果在特定的时间内没有接收到数据(DMA 缓冲区未满)、我必须使用外部软件计时器来读取 DMA 缓冲区? 或者、是否有可以像在 UART_IER 寄存器中一样在非 DMA 模式下激活的内部超时?  

    此致、

    丹尼尔