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.

[参考译文] RTOS/AM5728:IPU 上的 GPIO 中断延迟

Guru**** 2999690 points

Other Parts Discussed in Thread: SYSBIOS

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/666621/rtos-am5728-gpio-interrupt-latency-on-ipu

器件型号:AM5728
Thread 中讨论的其他器件:SYSBIOS

工具/软件:TI-RTOS

您好!

我遇到的问题与一年前在本主题中描述的问题相同:

https://e2e.ti.com/support/arm/sitara_arm/f/791/t/573071

我正在使用 GPIO8 (位20)来触发 IPU 中的 ISR。

默认情况下、GPIO8路由到运行 Linux 的 A15、我已在器件树中将整个 GPIO8节点的状态设置为禁用:

GPIO8{&G
   STATUS ="禁用";
};

这将从 A15的 IRQ_crossbar 映射中删除 IRQ。

GPIO8有两个 IRQ:116和348。 它们都不会路由到 A15、IRQ1 (116)会路由到 IPU1并在此处触发 Hwi ISR。

IPU 上的 ISR 随后应在 I2C 总线3上执行四次传输(在 DT 中也被禁用、因此 A15看不到它)。

IPU 上 GPIO8 ISR 的中断延迟约为500uS 至700uS、这很长。 如上文链接的 e2e 线程中所述、启用 GPIO8的 IRQ1和 IRQ2作为权变措施、可以解决延迟问题、但会导致 I2C 传输速度非常慢:之后(几乎!) 每次传输都会有额外的延迟。 一些传输仍然是快速的。 下面的示波器屏幕截图中有一个。 其中大多数都很慢。 同时也会发生慢速/快速的混合。

我现在的权变措施是:启用 GPIO8的 IRQ1和 IRQ2、并使用轮询而不是中断在 C 中编写我自己的 I2C 传输例程。

-为什么为 GPIO8启用 IRQ1和 IRQ2以获得低延迟响应? 这是错误的配置还是器件错误?

-为什么(PDK-) I2C 传输需要这么长的时间?

我测量了 I2C 传输:

通道1:GPIO8_20上的触发

通道2+3:I2C 总线3

通道4:GPIO4_4、用于测量单次 i2c 传输的时间

慢:

快速:

IPU1和 DSP1均运行 SYSBIOS、DSP1、IPU1和 A15通过 IPC 进行通信。

未使用 IPU2和 DSP2。

此致、

低

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    RTOS 团队已收到通知。 他们将在这里作出回应。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!

    我想知道您是否可以在 A15上禁用 Linux、只需在 IPU 内核上运行 GPIO 中断 RTOS 示例、然后仅启用 IRQ1、即可查看您是否在 ISR 中发现缓慢? 然后、启用 IRQ1和 IRQ2、是否更改了 ISR 延迟? 这是为了排除 Linux 是否出现问题?

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

    你好。

    我可以使用 TI 的 PDK 驱动程序(无裸机版本)在 IPU 上运行在 TI RTOS 下的独立执行过程中、提供示波器拍摄的一些屏幕截图:

    这是8个 GPIO8.20脉冲(黄色)期间的概述、下面是更详细的图片:

    您可以看到、I2C 事务在 GPIO8.20的下一个上升沿之前完成、并且在高优先级任务的竞赛中、所有事务都在运行、该任务将等待 GPIO ISR 回调发布的事件。

    我有其他主要显示 I2C 活动与 GPIO 中断的延迟的跟踪、我可以通过以下方式进行总结:

    1)裸机 I2C 驱动器+ ISR (这意味着调用 ISR 中 I2C 事务的子集):延迟~ 3us

    2)裸机 I2C 驱动程序+ SWI:延迟~ 9us

    3) TI 的多线程安全 I2C 驱动程序+高优先级任务(处理程序任务):延迟~ 14us

    无论如何、在没有 Linux+IPC 的 TI RTOS 下、我从未看到过 Lo2报告的问题。

    此致、

    Scianni Vincenzo  

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

    当中断缓慢发生时、哪些应用程序正在 Linux 上运行? IPC 上运行的是什么? IPC 通信涉及哪些内核? 您使用的是哪个处理器 SDK 版本?

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

    尊敬的 Rex:

    我们运行的是 SDK 04.01.00.06 (ti-processor-sdk-linux-am57xx-evm-04.01.00.06)。

    通过 IPC 发送一些基本 MessageQ 消息:

    我们在 DSP (1个内核)<-> Linux (2个 A15)和 IPU (1个双 M4)和 Linux (2个 A15)之间进行了 IPC 设置。 未使用 IPU2和 DSP2。

    DSP 和 Linux 之间的 IPC 不是很活跃:DSP 上只有一个每秒发送一次活动消息的空闲循环。 DSP 休眠的其余时间。

    IPU1通过 IPC 发送一些状态消息、但不会太多。

    在 Linux 主机上、除了我们的应用程序外、没有太多活动、CPU 负载小于5%。 它启动外部传感器(在 GPIO8上为 IPU 生成中断)。

    没有其他活动的应用程序(没有矩阵启动器、没有 Web 服务器...)

    此致、

    环路2.

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

    我们在 https://e2e.ti.com/support/embedded/linux/f/354/p/582007/2197295上遇到类似的问题 、不确定您是否可以尝试将 IPU 放在 DeepSleep 上 、如果这 有帮助吗?

    此致、Eric

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

    尊敬的 Eric:

    应用程序持续运行一些代码、并具有一个高优先级线程来处理由中断触发的操作。 将 IPU 置于深度睡眠状态对于此设置并不是很有用。
    与正在运行的 IPU (其中调度程序可能需要暂停正在运行的任务)相比、如果 IPU 从深度睡眠模式唤醒(因为它始终是相同的流)、我可以想象到抖动更小。
    对于此用例、抖动不是问题、但总延迟是问题。 (最坏情况抖动和最坏情况延迟之和)

    在原始帖子中、我们有500-700us 的延迟、我们通过将未使用的 IRQ 路由到 IPU 来"修复"它。 对于我们的用例、它现在足够快、并且抖动在合理的边界内(就我现在可以说的那样)。

    无法理解500-700us 延迟原因、是因为缺少时钟配置? 交叉开关的硬件问题?


    此致、
    环路2.

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    旧文章 e2e.ti.com/.../561674中有一个类似的问题。问题似乎是 ARM 和 DSP 都在提供相同的中断。 在您的情况下、通过将状态设置为禁用来禁用 GPIO8。 我检查了 GPIO 内核代码,驱动程序不会通过 of _device_is_available ()检查状态。 因此、GPIO8未被禁用。 您能否尝试注释掉 DTS 文件中的 GPIO8节点?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Lo2、

    不确定您是否已尝试禁用上一个帖子中提到的 GPIO、以及它是否有用。
    如果问题得以解决、请单击"已解决"。 如果您有其他问题、请提交新问题。

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

    尊敬的 Rex:

    在 devicetree (整个组)中禁用 GPIO8。 Linux 不使用任何 GPIO8信号、它们仅供 IPU 使用。 两个 GPIO8中断都路由到 IPU、而不是 A15。

    我们不会错过中断、但 IPU 上的 GPIO 中断具有非常高的延迟。

    作为权变措施、我们配置 IRQ 交叉开关以将 GPIO8的两个中断都分配给 IPU。 延迟要好得多、但仍然有很多抖动。

    此致、

    低

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

    感谢您提供信息。 我将关闭该线程。

    雷克斯