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.

[参考译文] TM4C123GE6PM:CPU 与 UDMA 总线共享问题

Guru**** 2391415 points
Other Parts Discussed in Thread: EK-TM4C123GXL

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1225841/tm4c123ge6pm-cpu-vs-udma-bus-sharing-question

器件型号:TM4C123GE6PM
主题中讨论的其他器件:EK-TM4C123GXL

您好!

有一个关于 uDMA 和 CPU 如何共享总线的一般问题。  我一直在阅读数据表、力图绕过这个问题。  在下面所示的第9.2节"功能说明"中表示 uDMA 使用  备用 之间的空闲时间。  我很难更好地理解这意味着什么、尤其是在 SSI RX FIFO 中乒乓数据块到存储块的用例中、这也是我的用例。

我的应用将 CPU 置于主循环中、检查存储器中的变量、而 uDMA 应将数据从 SSI RS 移动到仲裁大小为4字节的存储器区域。  我认为 CPU 和 uDMA 共享同一条总线到存储器、因此我的问题如下。

1.在 CPU 不运行时 DMA 只访问内存吗?  因此、如果我不断轮询 RAM 中的标志、这是否会由于读取标志(存储器位置)而抑制 DMA 的性能?

2.如何知道 CPU 何时对 DMA 进行节流或者反之?  我在这里感到困惑、因为我已读取它们共享一条总线、但 uDMA 通常使用备用的 CPU 周期?

谢谢

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

    尊敬的 Robert:

     我认为下面的图表可以更好地帮助理解数据路径。 访问 SRAM 将通过总线矩阵。 红色路径在 DMA 和 SRAM 之间、而蓝色路径在 CPU 和 SRAM 之间。 CPU 不能花费每个周期通过系统总线读取 SRAM 它还需要通过 ICODE 和解码总线从闪存中提取代码和数据。 只要 CPU 有可用的空闲周期、DMA 就会使用这些周期来访问 SRAM。 CPU 的优先级高于由总线矩阵确定的 DMA。 如果 CPU 完全占据了 SRAM、而我认为这不是问题、那么 DMA 必须等待。  

      

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

    尊敬的 Charles:

    您在这里为很多客户提供支持!  谢谢!

    那么、用于估算 DMA 与 CPU 存取量的方法是什么?  只需查看汇编代码并比较闪存与 SRAM 的指令?  听起来 DMA 性能(比如在串行数据突发之间、它可以在一段时间内移动多少数据)取决于 CPU 主要是从闪存读取还是从 SRAM 读取数据。  如果是这样-您知道客户如何大致了解 DMA 按照 CPU 所在的某些代码/循环移动数据的情况吗?

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

    尊敬的 Robert:

     我认为最好的方法是进行经验实验。  C:\ti\TivaWare_C_Series-2.2.0.295\examples\boards\ek-tm4c123gxl\udma_demo 中已存在示例。 在本例中、它将在两个存储器缓冲区之间传输数据。 您可以删除在 UART 和存储器之间传输的其他 DMA 通道。 该示例将报告传输的字节数。 接下来、您将修改示例、使 CPU 进入循环、不断地从 SRAM 读取数据、然后比较 DMA 传输的字节数。