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:适用于多核触发的 AM64x GPIO 中断配置 — 需要参数验证

Guru**** 2553260 points
Other Parts Discussed in Thread: SYSCONFIG

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1553695/am6442-am64x-gpio-interrupt-configuration-for-multi-core-triggering---parameter-validation-needed

器件型号:AM6442
主题:SysConfig 中讨论的其他器件

工具/软件:

您好 TI 专家、

我们将在 AM64x 上实现多核中断系统、其中 A  单个 GPIO 引脚 (GPIO1.43)  不需要触发中断  2 个 A53 内核+ 4 个 R5F 内核 。 在了解基本架构(全局事件→INTA→VINT 路由)的同时、我们需要对 SciClient 配置详细信息进行验证。

当前配置(R5FSS0_CORE0 的单核测试用例):

关键问题:

  1. 全局事件分配
    是否 global_event = 1 适用于 GPIO1.43? 我们 256 + pin_num 根据 TRM 表 A-1 进行计算、但 API 需要实际映射的事件 ID。 我们应该如何确定该值?

  2. 源索引计算
    对于 GPIO1.43、 TISCI_BANK_SRC_IDX_BASE_GPIO1 + GPIO_GET_BANK_INDEX(43) 正确的偏移方法是什么? 还是应该使用绝对引脚编号?

  3. 目标主机 IRQ
    我们使用 CSLR_R5FSS0_CORE0_INTR_..._VINTR_PEND_40 宏。 应为:

    • 物理 VIM 中断线路(例如 32-191)?
    • VINT 编号 (40) 本身?
  4. 中断聚合器选择
     DMASS0_INTAGGR_0 适用于 GPIO?  

  5. VINT 状态位索引

      为什么必须 vint_status_bit_index 与 vint 值匹配?  

多核扩展:

验证完成后、我们应如何修改此参数以触发:

  • 4×R5F 内核(使用 VINTS 40-43)
  • 2×A53 内核(使用 VINTS 44-45)
    通信  GPIO 事件相同 ? 具体来说:
  • 功能  Sciclient_rmIrqSet() 多次  与不同的 dst_id/vint
  • 是  事件复制  必需?

环境:

  • SDK:mcu_plus_sdk_am64x_11_00_00_15
  • BOAD: AM64B-EVM GP

我们已经审查了相关的线程、但需要对参数语义进行澄清。 任何见解都将非常感谢!

此致、

嵌入式系统工程师

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

    谢谢。 我已经分配了这个主题、下周可能会有回复

    此致

    Mukul  

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

    尊敬的 Liang:

    [报价 userid=“666539" url="“ url="~“~/support/processors-group/processors/f/processors-forum/1553695/am6442-am64x-gpio-interrupt-configuration-for-multi-core-triggering---parameter-validation-needed 源索引计算
    对于 GPIO1.43、 TISCI_BANK_SRC_IDX_BASE_GPIO1 + GPIO_GET_BANK_INDEX(43) 正确的偏移方法是什么? 还是应该使用绝对引脚编号?

    此处完成的偏移计算用于将 GPIO 配置为组中断。 如果您提供绝对引脚编号、则将为引脚中断配置 GPIO。

    此致、

    Tushar

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

    核心问题的要求是让 TI 检查配置、以确保我们的配置正确。 如果可能、请提供演示。

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

    期待您的答复。 核心问题要求是让 TI 审查配置以确保配置正确无误。 如果可能、请提供演示。

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

    您好 Liang Han、

    我了解了您的用例、其中单个 GPIO 引脚 (GPIO1.43) 需要在多个 A53 和 R5F 内核之间触发中断。

    这里有两种可能的方法:

    方法 1–将 GPIO 中断直接路由到所有内核:

    •使用 GPIO 中断路由器、可以将同一组中断路由到多个内核。
    •但是、GPIO 组中断源是单个中断源、只能清除一次。 如果任何一个内核在其他内核为其提供服务之前清除中断、则其余内核可能会错过该事件。
    •在 A53 侧、中断是进入 GIC 的 SPI。 在 Linux 模式 (SMP) 中、GIC 仅将 SPI 传送到一个 CPU。

    它不会向所有 A53 广播。

    方法 2–单个硬件所有者+ IPC Notify(推荐):

    •配置 GPIO 中断由一个内核 (A53 集群上的 R5F 或 Linux) 处理。
    •该内核成为所有者、清除其 ISR 中的 GPIO 组中断。
    •在 GPIO 中断例程中、向所有内核发送 IPC Notify。
    •这可保证 GPIO 源被正确清除、同时仍允许可靠地通知所有其他内核。

    本地 (GPIO)->全局事件→INTA→VINT -> 目标核心。 这也是可能的,但我的建议是,我们可以使用以上两种方法 ,而不是将事件路由到 IA 到目标核心.

    请分享您的想法,我们该如何继续.

    此致、

    Anil.

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

    您好 Anil、

    非常感谢您的答复。

    对于方法 1、我们尝试了它、但当时我们遇到了两个问题:
    首先、如果您使用 SysConfig 将不同的内核配置为使用同一 GPIO、则软件将向您发出资源冲突警报。 然后、我们尝试跳过 SysConfig 并使用手写代码实现。
    第二个问题出现了。 当两个内核独立运行时、没有问题。 但是、当两个内核按顺序执行时、首先运行的内核没有问题、但稍后运行的内核遇到配置中断 (Sciclient_rmIrqSet) 故障。
    这可能是某个地方的问题吗?

    对于方法 2、我们关注的是中断延迟。
    由于系统对计时的要求极高、因此过长的延迟(例如超过 3us 作为参考)是不可接受的。
    是否有任何测量数据可用于评估此情况?

    对于方法 0-本地 (GPIO)->全局事件→INTA→VINT ->目标内核、
    我们一直在尝试使用 Sciclient_rmIrqSet 配置它、但配置始终失败。 反复重新检查配置参数、应该没有问题。
    在此之前是否必须配置中断聚合器?

    此致、

    Liang Han。

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

    您好 Liang Han、

    我忘记在这里提到一个限制,同一个引脚可以只路由到两个内核和更多,这是不可能的。

    GPIO 中断路由器的工作原理就是这样。

    请参阅下面我对中断路由器工作原理的评论。

    中断路由器仅将一个输入路由到一个输出。 这不是限制或错误、而是中断路由器设计为以这种方式工作的方式。 因此、很遗憾、您只能将一个 GPIO 引脚或一个组路由到一个目标。 但是、您可以将 GPIO 引脚路由到一个处理器、将相应的组中断路由到其他处理器。  因此、方法 1 不能用于路由 6 个通道。

    如果您使用 Method2、会出现什么问题?

    若要将 IPC 通知 R5F 发送到 R5F、大约需要 0.7 到 1usec。

    因此、在一个内核中会触发 GPIO 中断。 触发中断后、发送 IPC 会通知所有内核、例如 R5F - 3R5F 和-A53 内核、几乎需要 4 μ s。

    即使使用 GPIO→GPIO 多路复用器路由器→IA→目标内核也是如此。 我们无法路由具有相同输入的 6 个路由器输出、这也不受支持。 通过这种方法、我们也只能路由两个事件。 所以,最后我们只能使用方法 2。

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

    您好 Anil、

    根据手册、“ 可以选择通过 ETL 交换结构将全局事件反馈回 INT_AGGR

    是否可以通过级联方式将全局事件路由到多个目的地、如这样?

    上图中的详细信息并不全面。 它只是用来说明方法。

    此致、

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

    您好 Liang、

    无法使用上述方法、因为全局事件无法路由到多个全局事件。
    全局事件只能通过 ETL 交换机结构路由到中断聚合器 (IA)。

    因此、根据将单个中断 (GPIO1_43) 路由到多个内核的要求、您需要使用以下任一方法:


    1. GPIO + IPC 方法
    •使用原始 GPIO 中断 (GPIO1_43) 作为一个内核上的触发器。
    •然后使用 IPC 将事件传播到其他内核。


    2.多 GPIO 中断方法
    •SoC 还支持输入和输出模式下的 GPIO 中断。
    •当发生 GPIO1_43 中断时、您可以切换不同的 GPIO 输出引脚(低电平→高电平或高电平→低电平)。
    •这些输出 GPIO 可从不同的组中选择、以便它们生成独立的中断。
    •写入 GPIO 设置寄存器通常需要大约 0.2µs。 因此、即使您需要触发 4 个内核、总延迟仍大致为 1µs、此延迟非常小。

    因此、您可以在 GPIO + IPC 方法或多 GPIO 中断方法之间进行选择、具体取决于哪种方法更适合您的延迟和资源要求。

    此致、

    Anil.

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

    您好 Anil、

    上述两种方法应该能够满足我们的要求。

    但是、我们在中断聚合器解决方案方面仍然存在一些困惑。

    你能否进一步说明为什么这一具体计划不可行?

    此外、关于“ 可以选择通过 ETL 交换结构将全局事件反馈回 INT_AGGR。 “在手册中提到、具体的应用场景是什么?

    此致、

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

    您好 Liang、

    SOC 支持多播支持功能。

    而且、多播事件有勘误表、MCU +SDK 和 Linux SDK 中不支持软件。

    因此、我们建议客户不要使用多播支持。

    请查看  i2196 IA:潜在的死锁情况 勘误表中的更多详细信息、请参阅 AM64x/AM243x 勘误文档

    此致、

    Anil.