工具/软件:
您好、
我尝试使 UART 与 DMA 在非阻塞模式下运行。
我在 SDK 中找到了低级驱动程序示例、这真的很有帮助。
问题是我不想使用中断、因为我已经在内部处理缓冲区。
我希望只要调用 UART 和 DMA 请求而不调用完成中断、就直接运行这些请求。
有没有办法做到这一点?
我已经尝试在参数中将回调设置为 NULL。
但这不是正确的方法、因为它会使代码在运行时失败。
提前感谢您。
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.
工具/软件:
您好、
我尝试使 UART 与 DMA 在非阻塞模式下运行。
我在 SDK 中找到了低级驱动程序示例、这真的很有帮助。
问题是我不想使用中断、因为我已经在内部处理缓冲区。
我希望只要调用 UART 和 DMA 请求而不调用完成中断、就直接运行这些请求。
有没有办法做到这一点?
我已经尝试在参数中将回调设置为 NULL。
但这不是正确的方法、因为它会使代码在运行时失败。
提前感谢您。
你好 Hatem Salah、
我只是想了解您是否不需要 UART DMA 中断回调。
那么、您如何确认 DMA 操作已完成? 再次启动 DMA。
我真的不明白您需要在没有回调的情况下进入 DMA 的要求。
如果您进入阻塞模式、则控制权仍在信标中、直到 DMA 完成。 这对您的要求没有帮助吗?
此致、
Anil.
尊敬的 Anil:
很抱歉缺少详细信息。 实际上、该要求规定我不应该有中断、但我还需要在调用下一个发送请求(在传输中)之前检查 DMA 是否已完成、并且我需要在发送请求之前检查 DMA 接收缓冲区是否为空、以便接收更多内容。 因此、我的问题可以分为两个部分:
1.如何使带有 DMA 的 UART 在没有回调的情况下正常工作?
2.如何检查 DMA 是否已完成传输?
P.S.:我有一个想法,我可以使用 HwiP_DisableInt () 禁用中断本身,但我实际上还没有尝试。
感谢您的答复。
等待另一个
你好 Hatem Salah、
对于上述问题、我们需要自定义实现 UART + DMA 驱动程序。
这是一个 UDMA_eventRegister 启用中断的 API。 因此、对该函数进行注释后、DMA 仅在轮询模式下工作。

完成此更改后、编译驱动程序。
接下来、 每次需要轮询时 UDMA_dequeraw 则它要么完成事务、要么不完成事务。 完成此操作后、您可以启动新事务。
请查看 UART_DMA_ISR 例程。 在此代码中、我们 仅执行这些功能。
如果您遇到任何问题、请告诉我。

此致、
Anil.