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.

[参考译文] TMS470R1B1M:即使 DMA_STOP 或 DMA_halt 被置位、DMA 传输计数也不会更新

Guru**** 2620915 points

Other Parts Discussed in Thread: SM470R1B1M-HT, TMS470R1B1M

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/789098/tms470r1b1m-dma-transfer-count-not-updating-even-if-dma_stop-or-dma_halt-is-set

器件型号:TMS470R1B1M
主题中讨论的其他器件:SM470R1B1M-HT

我将 DMA 传输与 SCI3接收功能结合使用。 除了一个例外、一切似乎都正常工作:当我收到的字符数少于 DMATC 中指定的字符数(在我的例子中:20)时、我需要知道多少个。 除了处理接收到完整字符数时调用的 DMA 中断之外、我还使用计时器中断来检查 DMATC 是否发生了变化。 为了强制和更新 DMATC、我尝试设置 DMA_STOP 或 DMA_Halt 或两者。 然后、我读出 DMATC 并清除 DMA_STOP/DMA_HALT 位。 但是、即使  我在缓冲区中看到已经接收到很多字符(少于20个)、DMATC 也始终为20。

如何在 DMA 传输完成之前强制 DMATC 更新? 或者、 如果 SCI RX 小于指定的计数、我如何知道它已接收到多少个字符?   

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    首先、不再建议在新设计中使用 TMS470R1B1M。 您是否使用 SM470R1B1M-HT?

    当使用 SCI 接收任意长度字符串时、出于您引用的原因、我始终使用中断来接收、而不是 DMA。 我使用 DMA 来发送字符串。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Bob、您好-感谢您的回复。

    这不是一种新设计。 此设计已使用10年、目前仅具有 RS485和 RS232端口。 我想添加一个 USB 端口。 现在、我已将评估板修补到现有设计中、它正在工作。 但是、如果您无法启动传输速率、USB 的优点是什么。 使用 RX 中断时、我的波特率达到57600。 任何较高的字符都会丢失。 这就是我想要使用 DMA 的原因。

    根据 SPNU194第11页、传输计数(DMATC)寄存器  仅在以下情况下更新

    (1) 区块传输完成后

    (2) DMA 控制器切换到另一个通道时

    (3) 或、当程序设置 DMA_STOP 位或 DMA_HALT 位时

    如果(3)正确、我可以实现任意长度消息的 DMA RX。 但是(3)无法正常工作、因此文档不正确或我做了错误的事情。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我认为文件不正确。 自从我使用该器件以来、已经有很长的时间了、但我记得、除非控制数据包已经完成或已经仲裁出队列、否则无法确定传输计数。 我将提交一份文件更正请求,但我怀疑有计划更新该文件。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    谢谢、Bob。 不是我希望学到的,而是它的样子。

    此致、

    Tony Poeltl