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.

[参考译文] AUDIO-AM275-EVM:UDMA 循环寻址

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1596721/audio-am275-evm-udma-circular-addressing

部件号: AUDIO-AM275-EVM

尊敬的 TI 支持团队:  

 

我想使用没有 dmautils 的 UDMA 循环寻址。

我能够使 TR 类型 15 完全工作,但 TR 15 似乎忽略 fmtflags。  

通过仔细查看 dmautils 实现、TR Type 9 看起来接受 fmtflags。

但是、从 TR 15 更改为 9 不适用于响应代码 0x21。

我的问题是:

  • TR 9 是否采用 fmtflags 并进行循环寻址?
  • 是否需要执行任何其他步骤才能使 TR 9 正常工作?

 

谢谢

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

    您好 、Tomimatsu Satoshi、

    循环缓冲模式主要在存在来自外设或模块的连续数据流时使用、我们必须在保持实时性能的同时避免任何数据丢失。

    在该模式下、DMA 配置有两个缓冲器(乒乓缓冲器)。 DMA 将继续以循环序列方式向这两个缓冲区写入数据。

    工作原理:
    DMA 开始写入缓冲区 A
    2.当缓冲器 A 满时→触发中断#1
    同时、DMA 自动切换到缓冲器 B
    3.当缓冲器 B 满时→触发中断#2
    同时、DMA 切换回缓冲器 A
    4、循环过程不会停止

    在 AM275x 上、这种行为可以通过使用 15 类 TR 配置来实现、其中我们可以在以下情况下生成中断:
    •一半的传输完成
    •完整传输已完成

    这确保了具有实时处理能力的连续数据流。

    所需附加信息:

    为了提供最佳的解决方案和配置示例、我们需要以下详细信息:
    •哪个外设或源生成数据?
    •所需的缓冲区大小?


    在我们收到上述信息后、我们将与您分享具体用例的配置示例。

    此致、

    Anil.

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

    您好、Swargam Anil、

    我没有提到乒乓缓冲器或双缓冲器。
    我要寻找的是循环寻址方案、其中有效地址在到达缓冲区大小后自动绕回。

    换言之:

    Effective_address = base +(偏移百分比 BUFFER_SIZE)

    这通常用于 FIR 延迟线路或环形缓冲器、其中 DMA 在单个缓冲器内以循环方式继续读取/写入。

    AM275x UDMA 是否支持此类循环寻址?
    如果是、如何对其进行配置?

    谢谢你。

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

    您好 、Tomimatsu Satoshi、

    在我的视图中、如果我们加载 无限次的传输请求 (TR)、那么在每次 DMA 传输完成时、DMA 都会  从起始地址全新启动、并继续操作、直到达到结束地址。 一旦完成特定的 DMA 块传输、用户(软件)就会收到通知(中断)、然后 在没有 任何 软件干预的情况下、硬件将无限地重新加载 TR。 用户会 连续收到中断。 这是您期望的行为吗? 根据相关要求、上述方法应适用于您的用例。 如果我以不同的方式误解了用例、请告知我。 如果上述说明不适用于您、请说明有关您的特定用例的完整详细信息并提供示例。


    此致、

    Anil.

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

    您好、 Swargam Anil

    我会对我的问题更加具体一些。

    基本上、我要做的是在 HyperRAM 上创建一个大延迟线路/环形缓冲区(例如,1 MB)。
    但是、由于 直接访问 HyperRAM 的速度太慢、我保留了 SRAM 中数据的一小视图(例如 64 字节)以供使用。  
    SRAM 和 HyperRAM 之间的数据传输使用 UDMA 完成。  

    您建议的方法仅在视图的偏移量与视图大小对齐(即 64 字节的倍数)时才有效。
    在我的用例中、偏移可以是任意字节数。
    因此、在达到 1 MB 的延迟线限制时、TR 必须分为两个部分:一个用于缓冲区的末尾、一个用于开始。
    如果循环寻址功能可用、则可在单个 TR 中处理。  

    请告诉我、AM275 处理器是否具备此类功能。

    谢谢您、

    富松聪