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.

[参考译文] TMS570LC4357:DMA 控制数据包完成后立即复位

Guru**** 2455560 points
Other Parts Discussed in Thread: HALCOGEN

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/639451/tms570lc4357-resetting-dma-control-packets-immediately-after-they-complete

器件型号:TMS570LC4357
主题中讨论的其他器件:HALCOGEN

在 DMA 控制包完成后立即复位(通过写入)时、我观察到一些非常奇怪的行为。 我已经在多个外设中观察到了这一点、因此我认为它与哪个外设无关。 具体而言、它似乎将传输的最后一个元素放置在第一个元素应移动的位置、并且不会在最后一个元素的存储器位置写入任何内容。

观察 DMA 外设指示传输完成和写入控制数据包之间的短暂延迟会使症状消失。 但是、我在 TRM 中看不到任何有关此要求的说明、因此我不知道延迟会在多长时间内保证正确的行为(以及延迟如何取决于时钟速度等)。 您能否澄清此用例的时序要求?

此帖子的其余部分汇总了我尝试过的各种内容、如果您想知道、这些内容不会产生任何影响。 我已经尝试了我能想到的所有东西、但可以随意建议其他东西。

我在 DCAN 和 MIBSPI 外设上都观察到了这一点。

以下等待 DMA 通道全部完成的形式提供了相同的结果:

  • 等待 FTCFLAG 中的位被置位
  • 等待 BTFLAG 中的位置位(我已将测试用例最小化为每个块一个帧)
  • 等待 FIFOASTAT 中的位清零(我的测试足够小、它始终会结束 FIFO A)
  • 等待挂起中的位清零

当在看到 DMA 通道完成和写入控制数据包之间插入时、以下形式的"短等待"似乎都会使问题消失:

  • 4个外设读取(但不是3个)
  • 3个外设读取+ DSB (但不是2个)
  • 4个外设读取+一个分支(但不是3个)
  • 12次从正常存储器读取(但不是11次)

以下形式的通道描述符写入都具有相同的结果:

  • 将相同的值写回 IDADDR
  • 向 IDADDR 写入不同的值
  • 向 ITCOUNT 写入相同的值
  • 向 ITCOUNT 写入不同的值

设置或清除 AIM 不会产生影响。

我可以通过写回映射存储器中的 DMA 缓冲器或完全禁用缓存来可靠地重现此问题。 请注意、要在禁用缓存的情况下重现此代码、我必须将所有相关代码放入 RAM 中。 我认为这是因为在没有缓存的情况下从闪存执行太慢、无法解决问题。 在这种情况下、上述"短暂等待"时间足够长的时间安排可能也有所不同。 我禁用了 I 高速缓存和 D 高速缓存、因为这是最简单的;除了更改代码运行所需的时间之外、我看不到 I 高速缓存是没有关系的。

我热切期待着对 DMA 硬件的工作做出一些澄清。

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

    我已经查看了上述每个标志的 TRM 描述。 我希望您使用的任何方法都不会出现任何问题。 您能否提供一些基于 Halcogen 的简化代码来重现此问题、以便我可以在工作台上进行调试? 我还想与我们的 DMA 和 R5/高速缓存专家进一步讨论、看看是否有一些互动在进行中、我们可能没有预料到、或者我们在 TRM 解释中错过了这些互动。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    卡盘、

    我可以解决这个问题、但可能需要几天时间。 您能想到一个我可以从开始的简单 DMA 示例吗?

    Brian

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

    Halcogen 中包含一个 MibSPI 和 DMA 示例、但它使用 DMA 将数据传输到用于 Tx 的 MibSPI 中、而不是将其移出用于 Rx。 也许这可以重新配置、以便 DMA 位于 THR Rx 侧而不是发送侧?

    C:\ti\Hercules \HALCoGen\v04.07.00\examples\TMS570LC43x\example_mibspidma.c