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.
工具/软件:TI-RTOS
您好!
我使用 TM4C1294 MCU 和 TI RTOS 开发高性能应用-使用 UDMA 交替缓冲器进行 ADC 采样20个通道 x 100kHz、SPI 采样1kHz、并使用 UDP 数据包(CCA 35 Mbit/s)输出流式传输。 我还有一个 NDK Web 服务器、用于使用简单的表单配置应用程序。 RTOS 查看器中的 CPU 负载约为30%。
由于 UDMA 错误、我在冻结 MCU 方面遇到问题。 当启用所有流输入并在 MCU 中打开网页时、会出现问题。
我不知道如何调试 UDMA 错误、 使用什么以及如何解决问题。
在 NDK 中是否有任何方法来检测 http 服务器何时处于活动状态? 可能其中一种解决方案是在有人打开网页时暂时禁用流式传输。
感谢您的回答。
Jiri
Jiri、
查看 uDMA 文档、错误处理确实没有太明确。 但以下是一些想法:
您可以尝试启用 DMA 中断、并调试 ISR 内部的错误。 Tivaware 提供 了 uDMAErrorStatusGet ()作为起点。
由于文档中可能出现的错误是指"总线或内存保护错误"、我想说您尝试查看:
-目标地址是否仍然有效? 也许您要将其增加到一个离边界值?
-您是否使总线过载,试图以比总线能够处理的更快的速度传输数据?
当发生错误时、导致此类错误的 UDMA 通道将被禁用。 调试不太容易、但您可以尝试读取寄存器并检查"您希望启用、不再启用..."的通道
布鲁诺
Jiri、
关于文档:
-您是否安装了 Tivaware? 转到您的 ti/tivaware xxx/ docs/文件夹、并检查文件 SW-TM4C-DRL-UF-xxxx。 这是 driverlib 用户指南、它不仅有助于理解库本身、还有助于更好地理解每个外设的功能。
-我们的同事海报 Luis Afonso 在这个网站上提供了一些有关 DMA 的有趣示例、以防您尚未看到:
https://sites.google.com/site/luiselectronicprojects/home
这篇旧文章也有一些基本见解: e2e.ti.com/.../1270766
我不知道 DMA 的最大 TP。 可用信息似乎不足以解决问题... 传输基于主时钟周期、但我甚至不确定从任何来源到任何目的地的传输是否是确定性的、以及有多少周期是确定性的-也许其他海报或 TI 人可以对此进行澄清。 DOCS 指出每个通道都是独立的、但您是否始终使用单独的通道? 如果您尝试在同一信道上传输一些内容、"有几个(多少个?) 周期"、在上一个传输开始后、很可能它将处于繁忙状态。
重新配置 DMA 控制表也需要额外的处理时间、这是一个需要正常处理时间的 RAM 位置。 这与传输本身有点不同、但根据多个传输的结构、可能会产生影响。
其他问题:您是否确保仅使用一个控制表? 我看到人们错误地为每个 DMA 操作创建了一个表、并弄乱了东西。
谢谢
布鲁诺
我已经解决了我的问题。
当 http 服务器有客户端时、ADC 和 SPI 的采样被禁用。 工作正常。 问题可能是总线过载。
感谢您提供有用的答案。
此致
Jiri
您的"解决方案"是否会使您(初始)对"高性能"的期望落空? 某种程度上-"禁用重要功能"似乎会(相当大)降低性能...
通常、这些 ADC 测量及其通信(通过 SPI)是"高优先级"、并且(可能)会为您的服务器客户端而牺牲! 可以是这样吗? (它不是高性能)
不会"继续 ADC 和 SPI 操作"-但不会通过 µDMA (允许服务器客户端主导)提供"更好的折衷?" (即"部分"吞吐量超过无吞吐量!)