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:在不使用 ISR 的非阻塞模式下使用 DMA 运行 UART

Guru**** 2526700 points


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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1549658/am2434-running-uart-with-dma-in-non-blocking-mode-without-and-isr

器件型号:AM2434


工具/软件:

您好、

我尝试使 UART 与 DMA 在非阻塞模式下运行。
我在 SDK 中找到了低级驱动程序示例、这真的很有帮助。

问题是我不想使用中断、因为我已经在内部处理缓冲区。
我希望只要调用 UART 和 DMA 请求而不调用完成中断、就直接运行这些请求。

有没有办法做到这一点?
我已经尝试在参数中将回调设置为 NULL。
但这不是正确的方法、因为它会使代码在运行时失败。

提前感谢您。

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

    你好 

    我只是想了解您是否不需要 UART DMA 中断回调。

    那么、您如何确认 DMA 操作已完成? 再次启动 DMA。

    我真的不明白您需要在没有回调的情况下进入 DMA 的要求。

    如果您进入阻塞模式、则控制权仍在信标中、直到 DMA 完成。 这对您的要求没有帮助吗?

    此致、

    Anil.

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

    尊敬的 Anil:

    很抱歉缺少详细信息。 实际上、该要求规定我不应该有中断、但我还需要在调用下一个发送请求(在传输中)之前检查 DMA 是否已完成、并且我需要在发送请求之前检查 DMA 接收缓冲区是否为空、以便接收更多内容。 因此、我的问题可以分为两个部分:

    1.如何使带有 DMA 的 UART 在没有回调的情况下正常工作?
    2.如何检查 DMA 是否已完成传输?

    P.S.:我有一个想法,我可以使用 HwiP_DisableInt () 禁用中断本身,但我实际上还没有尝试。

    感谢您的答复。
    等待另一个 Slight smile

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

    你好 Hatem Salah、

    对于上述问题、我们需要自定义实现 UART + DMA 驱动程序。

    这是一个 UDMA_eventRegister  启用中断的 API。 因此、对该函数进行注释后、DMA 仅在轮询模式下工作。

    完成此更改后、编译驱动程序。

    接下来、 每次需要轮询时 UDMA_dequeraw 则它要么完成事务、要么不完成事务。 完成此操作后、您可以启动新事务。

    请查看 UART_DMA_ISR 例程。 在此代码中、我们  仅执行这些功能。

    如果您遇到任何问题、请告诉我。

    此致、

    Anil.

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

    这真的很有帮助。 非常感谢。