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.

[参考译文] AM623:GPIO 中断

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1360432/am623-gpio-interrup

器件型号:AM623

您好

我们的平台是 RT-Linux、SDK-09.00.00.03版本。

当前设置了一个1ms GPIO 中断、始终执行中断、但有时还有大约10ms 的时间进行响应。 我们需要对其进行优化。 有什么好的建议吗?

我们使用了 GPIO0的引脚1中断、发现系统中的中断号为280。 我可以问一下中断号280是如何计算的吗? 我阅读了手册、因此引脚1上的中断号为1。 设备树配置如下:

&MY_FPGA_interrupt0{
#address-Cells =<1>;
#size-cells =<1>;
兼容="my_FPGA_interrupt0";
pinctrl-names ="默认";
pinctrl-0 =<&my_fpga_interrupt0_pin_default>
Input-GPIO =<&MAIN_GPIO0 1 GPIO_ACTIVE_LOW>;
INTERRUPT-PARENT =<&MAIN_GPIO0>;
中断=<1 IRQ_TYPE_EDGE_RISING >;
状态="可以";
};

我已尝试将其更改为其他中断号、但 GPIO 中断未响应。

是因为 GPIO 只能对应一个中断号、不能更改到任何其他内容吗? 那么、我如何优化它呢?

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

    您好!

    通过该线程(https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1311677/am625-am625-gpio-interrupt-latency-test)、RT Linux 的中断延迟在较新版本的 SDK 中得到了改善。 是否可以在更高版本的 SDK 上测试?

    至于 IRQ 编号280、当 Linux 初始化每个模块而不仅仅是 GPIO 时、这些数字逐一分配。

    此致、

    安舒

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

    您好、Anshu Madwesh

    我们遇到的问题是、SIGUSR1信号通过 GPIO0引脚1的上升沿发送到应用层来触发中断、而该信号通过中断处理程序函数来读取数据。 测试发现运行正常一段时间、偶尔有超过10毫秒的延迟触发、我们找不到原因。 我尝试了修改 GPIO 的中断编号来改善 GPIO 的中断响应、但在修改中断编号后无法触发中断。 这样做的原因是什么? 请帮助进行分析。 我可以做什么来优化这个中断?

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

    @杨悬来自其他主题:  

     您可以尝试通过关闭相应的内核配置选项或尝试从命令行中卸载内核驱动程序、从而从 Linux 中禁用/删除 HW 编号生成器支持、如下所示:

    # rmmod optee-rng

    SDK v9.1 (将修复为9.2)中存在一个问题、即我们的 TF-A 和 OPTEE 配置使安全上下文不可抢占、因此任何硬件 RNG 读取(对 OPTEE 的 SMC 调用)都会导致延迟偏移

    我们强烈建议升级到 SDK9.2。

    @á n

    客户想知道如何在 DTS 中配置单个 GPIO 引脚中断、SDK DTS 使用 GPIO 组中断。  

    这里使用的引脚是 GPIO0_1:

    https://software-dl.ti.com/tisci/esd/latest/5_soc_doc/am62x/interrupt_cfg.html

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

    您好,Anshu Madwesh

    我 想知道如何在 DTS 中配置单个 GPIO 引脚中断、SDK DTS 使用 GPIO 组中断。

    并且可以更改它的中断号以使其生效、如何修改它?  

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

    大家好、唐东杰

    这不是 GPIO 中断手册所指的吗?  如何使用 SPI?  

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

    尊敬的 Yang:

    我发现此帖子与您的请求相同、似乎项目 兼容="my_FPGA_interrupt0";不正确。

    https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1359633/am625-configure-gpio-pin-as-a-interupt

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

    ,你好 Tang

    中断不会根据链接中的格式变化而生效。

    &MY_FPGA_interrupt0{
    #address-Cells =<1>;
    #size-cells =<1>;
    兼容="ti、my_fpga_interrupt0";
    pinctrl-names ="默认";
    pinctrl-0 =<&my_fpga_interrupt0_pin_default>
    Input-GPIO =<&MAIN_GPIO0 1 GPIO_ACTIVE_LOW>;
    INTERRUPT-PARENT =<&MAIN_GPIO0>;
    中断=<1 IRQ_TYPE_EDGE_RISING >;
    状态="可以";
    };

    如何修改单个引脚的中断编号以使其有效?

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

    请忽略我的输入。 让业务部门团队提供支持。

    @á n

    请帮助了解如何将单个 GPIO0_1配置为中断源? 并查看上部配置。

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

    您好!

    内核 GPIO 驱动程序不会配置单个 GPIO 中断、而是 GPIO 组中断。 这不应该是影响 GPIO 中断处理延迟的因素。

    当您说 GPIO 中断在10ms 左右偶尔响应时、您似乎是在测量从触发 GPIO 事件到用户空间应用程序接收到 SIGUSR1信号的时间? 在这种情况下、调用内核 GPIO 驱动程序 ISR 需要多长时间? 我想查看延迟发生在何处。

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

    您好,Bin

    如何测试 GPIO 中断程序 ISR 的调用时间? 是否有任何文档或测试用例?

    并且、我想知道如何修改 GPIObank 中断的中断编号? 例如、当前 GPIO 中断号为280要生效、如何配置中断号35才能生效?

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

    您好!

    如何测试 GPIO 中断程序 ISR 的调用时间? 是否有任何文档或测试案例?

    通常您希望驱动程序 ISR 触发一些您可以测量的事件。 例如、在您的情况下、您可以在 FPGA 驱动器 ISR 中驱动另一个 GPIO 引脚输出高电平或低电平、然后您可以在示波器上测量此 GPIO 输出事件和 GPIO0_1输入事件。

    例如,当前 GPIO 中断号为280以生效,如何配置中断号35以生效?

    什么是中断号280? 它来自哪里? /proc/interrupts 或其他地方? 35又是什么?

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

    您好,Bin

    目前、系统上/proc/interrupts 指令中的中断号280有效。 如何在该指令下将35配置为有效。

    我配置了中断34、但它不会生效、如下所示:

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

    您好!

    器件树配置如下:

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    当前中断号280从系统上的/proc/interrupts 指令中有效。

    /proc/interrupts 中的 intr 编号280是在注册 ISR 时在内核中动态分配的唯一 ID。 它主要供用户参考。 您无法更改它。

    如何根据此说明将35配置为有效。

    为什么"35"来自哪里?

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

    您好、Bin

    GPIO 中断程序的 ISR 时间约为3us。

    我们有这个问题、我们应该在哪方面进行优化?

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

    您好!

    GPIO 中断程序的 ISR 时间约为3us。

    抱歉、您能详细说明一下吗? 该3us 测量是从何时开始的?

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

    您好、Bin

    从中断触发到中断处理程序结束。

    是否有办法配置内核或器件树以提高中断性能?

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

    您好!

    是否有任何方法可以配置内核或设备树以提高中断性能

    请说明您希望它达到什么性能? 似乎你以1ms 的间隔触发 GPIO 中断、3us 中断处理时间好像已经非常好了。

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

    您好,Bin

    GPIO 中断处理速度还行、但 GPIO 中断会向应用层发送 SIGUSR1信号来触发软中断、软中断响应较慢、需要优化性能、如下图所示

    推动:

    在应用中:

    设置1ms GPIO 中断以发送信号、应用层信号软中断将存在大约300的细微延迟、如何优化其性能以确保触发信号软中断低于100us。

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

    您好!

    我对 RT Linux 应用程序没有太多的经验,但您必须提高用户空间应用程序的优先级以改善其延迟。

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

    您好、Bin

    设置了最高的应用优先级、但该问题没有改善。

    你有什么好的改进建议吗?

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

    您好!

    我没有任何其他想法。 但是、您能否在电路板上运行循环测试以检查延迟?

    https://software-dl.ti.com/processor-sdk-linux/esd/AM62X/09_02_01_09/exports/docs/devices/AM62X/linux/RT_Linux_Performance_Guide html#stress-ng-and-cyclo-test

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

    您好、Bin

    我想 SIGUSR1信号传输会延迟或丢失。 我想将 SIGUSR1信号更改为可靠信号 SIGRTMIN 以响应中断、但我发现内核在修改后无法识别可靠信号类型。 是否有任何文档或例程?

    我们的内核是否支持从34到64的可靠信号?

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

    您好!

    问题与 TI 器件无关、超出了此论坛的支持范围。 我建议您向内核开放源码社区征求意见。