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.

[参考译文] DK-TM4C129X:µDMA 相对以太网/μ s 总线优先级

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/604999/dk-tm4c129x-controlling-relative-ethernet-dma-bus-priority

器件型号:DK-TM4C129X

我有一个应用程序、它将一组散聚 µDMA 的持续忙状态保持在大约30Mbit/s  DMA 似乎正常工作。  当我通过 TI-RTOS 堆栈通过以太网开启30Mbit/s 的传输时、DMA 的抖动增加了约400ns。  这在我的设计中是可以容忍的、但不可取的、因为它是一个性能限制因素。  为了尽量减少以太网操作引起的抖动、我设置了

HWREG (EMAC0_BASE_EMAC_O_DMABUSMOD)= BFM (HWREG (EMAC0_BASE_EMAC_O_DMABUSMOD)、1、EMAC_DMABUSMOD_PBL_M);
HWREG (EMAC0_BASE_EMAC_O_DMABUSMOD)|= EMAC_DMABUSMOD_FB

"BFM"将 PBL 位域的值设为1。

在该设置下、抖动为400ns。  我还没有查看堆栈源以了解这些字段是如何处理的、可能是频繁过载并使我的努力无效。

相对于 μ µDMA、EMAC 的 DMA 优先级是多少?  是否可以将其设置为低于 µDMA Ω?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我已检查、堆栈不会使我的设置过载。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    DMA 在乒乓模式下、通过 SSI1传输。 我已经将其设置为唯一的高优先级 DMA、即使在未插接以太网的情况下、SSI 时钟脉冲的抖动仍然至少为250ns。 导致延迟的原因是什么、如何避免?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您能给我们详细介绍一下您如何测量抖动吗? 此外、您是否测量延迟(延迟)或抖动(延迟变化)?

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

    您能否告诉我们您使用的 TI-RTOS 版本?

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

    您好 Todd 和 Steven:

    所示为从 DK-TM4C129X 电路板上获取的随附示波器迹线

    1. 一个 GPIO、用于触发4个16位 DMA 传输、在 单个仲裁器锁定传输到 SSI1的过程中、作为强制 SSI 接收的"推送器"、
    2. SSI1时钟、和
    3. SSI1数据。

    示波器光标之间的 aqua 抖动阴影的长度为264 ns。  在与乒乓 SSI 输出同步时、有一个散聚 SSI 输入 DMA 传输64个16位字。  我通过编程验证通过 SSI 向线回送传输的递增序列是否会通过该 DMA 返回。  SG DMA 被环回、将一个请求从 存储器位置 dmaTrigger 持续传输到 UDMA_SWREQ。  请求通常为零、但如果软件将请求值加载到该位置、则会触发单次 DMA、该 DMA 会执行一些原子硬件与循环 DMA 同步工作、并将 dmaTrigger 写回零。  在从 SSI 传输一个块后、SG DMA 还会将 EMACTIMESEC/EMACTIMENANO 传输到存储器。  这些体操运动员提供信号计时、可确保在模拟信号路径中实现出色的性能。  唯一一个大于一个传输的仲裁器锁定就是执行正在抖动的 SSI 输出传输。

    此方案每1/2秒通过 HTTP 运行 SSI 输入、SSI 输出、UDP 输出、dmaTrigger 请求、每隔5秒运行 UDP 广播一次、无错误。  为了避免 SSI 接收流中数据的固定16位偏移、需要在 SG DMA 中执行"虚拟"任务。  我正在测量抖动。  我的硬件设计将提供外部硬件来调整此周期性方案中的固定延迟部分。

    我使用的是 tirtos_tivac_2_16_01_14。  如果 TI-RTOS 正在执行高优先级、长仲裁器锁定 UDMA、这可能是原因所在。  但是、我知道 TI-RTOS 中没有 UDMA 使用注册方案、因此我假设没有这样做、因为操作系统可能无法知道我没有使用它可能选择的通道。  TI-RTOS 是否偶尔全局禁用 UDMA?  这也可以。

    谢谢、

    Leo

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

    感谢您的照片。 在没有任何其他运行的情况下、SPI 传输是什么样的? 您能否仅使用 SPI driverlib 调用来重现此问题。 我正在尝试找出处理这个问题的最佳方法。

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

    以下是禁用 SSI RX 和拔下以太网电缆时的抖动:

    在禁用 SSI RX 并插入以太网的情况下、无论是否使用高速 UDP、上述跟踪都没有变化。   在 SSI RX 启用且以太网未插拔的情况下、上述走线没有变化。  当我返回到满负载时、如该线程中的第一条布线所示、我现在看到的是大约148ns。  这可能是地址依赖性、在这种情况下、将缓冲区移动到某个位置并更改其对齐会导致访问延迟。

    我只是将 DMA 数据缓冲器的对齐限制 为256位、因为我在手册中看到 UDMA 使用"存储器分条"、听起来像是多组宽存取、因此这可能有所帮助。  命令结构表当然已对齐。  我还将任务列表对齐限制为 128位,即任务大小:32*4=128。  如果使用未对齐的访问将任务复制到替代结构中、这肯定会很耗时。  现在我看到大约280ns!  尝试多个硬件复位并断开调试器连接不会改变观察到的抖动。  也不会进行完整的下电上电。

    考虑到设计的运行速度、我必须使用 DMA、并且我不愿意在 driverlib 实现中使用。  这就是我愿意面对这一问题的努力的起点。  这是可以容忍的--只是我宁愿没有的一个性能损失。  抖动减少 t 纳秒后、我可以将 ADC 采样间隔减少该量。  如果我不能尝试硬件重新配置技巧、可能是时候放弃这个技巧了。

    一个潜在的引线:我注意到 SSI 突发长度为256ns、与抖动长度大致相同、至少在本次编译中是如此。  我想知道 SSI 中是否会激发类似时隙的行为。  我没有看到 SSI 的任何配置位、它们可能会影响这种行为。  我确实设置了 HSCLKEN、因为我认为我必须使其在66MHz 频率下工作。

    我当前的赌注是、离边界地址对齐的时序足以使 SSI 退出类似于时隙的行为。  当工作量较小时、我将保存对该问题的调查。

    此致、

    Leo

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

    通过将触发器移动到 SSI 时钟、我得到以下曲线:

    现在、SSI 很可能在其自身的传输间隔内进行连接。  黄色迹线上显示为转换宽度的实际抖动 小于100ns、而转换由 SSI 传输时间隔开。  可能 SSI TX 需要是一项写入"传输结束"位的任务、以防止 SSI 执行某种传输结束超时。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我在 hw_ssi.h 中注意到一个名为"SSI1_CR1_EOT"的位、手册中没有对此进行记录。 这可能是为了强制 SSI 完全发送 TX FIFO 中的所有内容而需要设置的位吗?这可能会阻止它与数据传输成齿? 如何强制 SSI 在 TX FIFO 中出现数据时发送数据、而不是偶尔等待一个完整的帧?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    延迟始终在 SSI RX SG DMA 中断服务后立即发生。 我尝试在 ISR 中用"1"写入 SSI1_CR1_EOT、但这不会改变任何内容。 如果我强制推送 DMA 数据缓冲器对齐到奇数半字边界、则空载情况下的频率显著降低。 字边界对齐具有更高的频率。 但是、UDP 封包运行问题的平均频率相当高、约为2300 Hz。 有时间后、我将尝试使用 SG pusher DMA。 现在、它是乒乓模式、前提是总线使用情况更适合该模式。