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.

[参考译文] AM6442:减少软件生成的脉冲信号的抖动

Guru**** 2482225 points


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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1447649/am6442-reducing-jitter-on-a-software-generated-pulse-signal

器件型号:AM6442

工具与软件:

大家好、Nick、Anil、团队成员、

按照约定、将此讨论传递给外部线程。 当前情况下的摘要。

当前状态:
*我们有一个硬件计时器
*我们在 R5上使用中断
*触发 GPIO 写入

遗憾的是、我们在实际应用中看到、此 GPIO 触发器有时会延迟200-300ns。 我们通常还会看到 AM64上的其他进程出现延迟、这可能是由于共享总线造成的。

我们现在了解如何将 DMA 用于此过程:
*所以我们需要 DMA 传输来写入 GPIO 寄存器
*该 DMA 应由硬件计时器模块触发
*我们还将计时器信号路由到 HW_TSxPUSH 引脚(如果可以提供任何帮助)

 计时器中断或 HW_TSxPUSH 信号是否能够触发 DMA 写入 GPIO 模块?

现在、我们已经使用 CPTS 模块:
* GMAC 内部的 CPTS、用于生成 PTP PPS
*全局 CPTS 测量同步精度和比较 PPS 信号
*我们已通过其中一个 SYNCx_OUT 引脚路由生成的 PPS

对于我们当前的应用:
*由于遗留原因,我们当前的板卡,我们连接到 AM64,需要 UART 线路上的触发信号
*为此、我们通过 R5中断从参考 PPS (AM64计时器模块)生成 GPIO 下降沿
*如果只有主 R5处于激活状态,我们几乎看不到任何抖动(接近+/-5ns,这是200MHz GPIO 时钟的结果),因为我们只对任何代码或数据使用 TCM 存储器,并禁用所有其他(FERTOS)中断
*一旦我们有更多的后台活动(菊花链设备,一些网络流量),我们有时会看到这些延迟的跳跃

我们已经添加了一个多路复用器来将实际 PPS 信号路由到 UART 线路、从而解决新硬件的问题。 我们只是想看看、我们是否仍能解决现有硬件上的问题、或者至少能对其进行改进。 为此、我们可以更高效地使用 DMA 来更有效地使用内存总线并减少延迟。

*有几个不错的 R5使用示例

*我在文档中不知道的是、我们如何通过某种 PPS 信号触发 DMA 传输(我们有所有必需的 PPS 信号通过 TSR 运行、因为它们连接到 HWx_TS_push 引脚)

以下常见问题解答有助于了解如何基于 GPIO 触发 DMA。

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1378150/faq-how-to-trigger-dma-with-the-help-of-gpio-on-am64x-am243-and-am62x-devices

谢谢!

Aida

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

    您好!

    Anil 和我 不相信我们正确理解您的系统。 因此、在我们讨论任何实施细节之前、让我们退一步、确保我们了解您要做的事情。

    "较新"的系统  

    这是我目前对"较新"硬件系统的理解。 是这样吗? 我有什么问题、或者您想向我们提供任何其他信息吗?

    "旧"系统  

    根据对"较新"硬件的理解、这就是我想您尝试对"较旧"硬件执行的操作。 是这样吗? 您还想向我们提供其他信息吗?

    其他问题  

    1)在"旧版"硬件系统中、您是否可以将脉冲从任何处理器引脚、仅1个处理器引脚或多个不同的处理器引脚进行路由? 可以使用哪些引脚?

    2) 2) 我想我误解了您的输出信号的样子。 PPS 信号每秒只会有一次下降转换、但我假设您的 UART 触发信号应足够灵活、以便能够在其他某个时间(如果需要)有下降转换。 我缺少什么吗?

    此致、

    Nick

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

    目前我们有一条 UART TX 线、它在(E14)

    • UART1_TXD (用于典型的 UART 通信)
    • GPIO1_57 (用于将下降沿发送到器件作为同步)

    在较新的硬件上、我们将 PPS 信号路由到该信号(正如您在图片中所示)、但我们正在寻找现有电路板上的解决方案。 在我们要使用的其他 PCB 上、我们需要实现相同的目标、但具有不同的引脚(不同的 UART 外设)。

    我们需要触发任何类型的下降沿、只要它的时间具有低抖动、并且来自计时器时间同步路由器信号。 正如我们(几乎)不关心的那样、只要我们知道时间、就会知道何时正是那个边缘。 我们非常关心持续、低抖动的时间。 因此目标为+/-10ns 至+/-20ns。 目前、总线仲裁需要200-300ns 并将实际的 GPIO 下降边沿转移一个周期。

    因此、我们建议的采用 DMA 减少抖动的方法如下:

    • 我们有一些计时器中断(不一定是周期性的、单次触发就足够了。 我们可以通过已知绝对时间在内部将该计时器同步到另一个计时器)
    • 计时器中断会触发 DMA 事务
    • DMA 会写入其中一个:
      • GPIO_SET_DATAxx 寄存器、用于触发下降沿(32位寄存器)
      • 用于发送值0x00的 UART_THR 寄存器(32位寄存器、仅8位相关)

    现在、我们要评估是否能提高我们的时间精度。 但我们不能仅仅通过 R5内核直接触发 DMA、因为我们还将获得来自 R5内核的存储器存取、这也会带来相同的总线仲裁问题。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    DMA 写入其中一个:
    • GPIO_SET_DATAxx 寄存器、用于触发下降沿(32位寄存器)
    • 用于发送值0x00的 UART_THR 寄存器(32位寄存器、仅8位相关)
    [报价]

    你好、Wolfgang Pretl、

    正如我在调用中提到的, DMA 通过计时器 PWM 触发,这可以写入 GPIO 数据寄存器。

    但是,在你的情况下,你需要触发 DMA 为一次触发模式,这 是不可能的计时器 PWM . 因为需要计时器 PWM 自动重新加载。

    我解释过 GPIO 方法、我们需要控制 GPIO 从低电平到高电平或从高电平到低电平以触发 DMA、但同样、GPIO 控制是增加延迟以触发 DMA。

    另一种方法是、我突出显示了来自 CPST 和 CPSW 硬件推送的一些输入、我们也可以从这些输入触发 DMA。

    除了这些方法、我们不能触发 DMA、还有一件事是您需要触发32位 DMA、同样在这里、DMA 是 传输数据所需的至少32字节。  

    此致、

    Anil。