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.

[参考译文] TM4C1294NCPDT:取消 DMA 传输

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/602918/tm4c1294ncpdt-cancel-dma-transfer

器件型号:TM4C1294NCPDT

您好!

是否可以取消正在进行的 UDMA 传输? 如果是、最好的方法是什么?

谢谢、

SINA

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    是的,对 TivaWare 函数 uDMAChannelDisable()的调用将阻止 UDMA 响应任何额外的请求。 是否要在单个请求的传输过程中停止 DMA? 您能给我一些关于您正尝试做什么的更多信息吗?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    尊敬的 Bob:

    感谢您的回复。 我在 TM4C129的 UART 连接上接收来自和外部器件的数据包。 我有一个 DMA 设置、用于将数据包传输到缓冲区。 我尝试处理的问题是发送方在数据包中间停止发送的情况。 换言之、我接收到一个不完整的数据包。 我已经了解了如何使用乒乓 DMA 设置来检测 DMA 的启动(这里还有另一个线程)。 因此、当我检测到 DMA 已启动时、我会启动计时器。 如果在给定的时间间隔内未接收到完整的数据包、我的计时器将触发中断。 在此中断中、我需要取消 DMA 传输(例如、如果我的数据包是50字节、并且我只接收了30字节、DMA 引擎仍在等待20字节的到来)、否则、如果发送者稍后开始发送新的数据包、 所有后续接收的数据将不同步。

    此致、
    SINA
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    如果您不使用 UART FIFO 并使用基本 DMA 模式、我认为它将起作用。 这样、您就会为每个字节获得一个 DMA 请求、并在每个请求中传输一个字节。 如果在超时之前没有获得数据包中的全部50个字节、则禁用数据包并重新配置它、以进行50次传输、每次传输一个字节、然后重新启用。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    尊敬的 Bob:

    我无法使用基本 DMA 模式、因为我使用乒乓模式来检测传输的开始(乒乓模式配置为第一次传输1个字节(因此我获得了一个中断来检测传输的开始) 第二次传输配置为49字节。

    此致、
    SINA
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    它应该仍然有效。 实际上、只要仲裁数目等于 FIFO DMA 请求的大小、就可以使用 FIFO。 例如、如果将 FIFO 通知设置为半满、则仲裁大小为8。 不要禁用单个请求。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    感谢 Bob。 我将查看它。

    SINA