部件号: 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 正常工作?
谢谢
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
尊敬的 TI 支持团队:
我想使用没有 dmautils 的 UDMA 循环寻址。
我能够使 TR 类型 15 完全工作,但 TR 15 似乎忽略 fmtflags。
通过仔细查看 dmautils 实现、TR Type 9 看起来接受 fmtflags。
但是、从 TR 15 更改为 9 不适用于响应代码 0x21。
我的问题是:
谢谢
循环缓冲模式主要在存在来自外设或模块的连续数据流时使用、我们必须在保持实时性能的同时避免任何数据丢失。
在该模式下、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 处理器是否具备此类功能。
谢谢您、
富松聪