gpt4 book ai didi

arm - 在 Zynq 中发送处理器间中断 (arm-v7/cortex-a9)

转载 作者:行者123 更新时间:2023-12-03 19:05:45 32 4
gpt4 key购买 nike

我正尝试在 ZedBoard 的 Zynq 平台上为嵌入式操作系统 (DNA-OS) 添加多处理器支持。操作系统实际上与 CPU_0 单独 一起完美运行。操作系统架构需要执行一个cpu_send_ipi 函数来激活多处理支持:基本上,这个函数会中断一个处理器并给他一个新的线程来处理。

我在 ug585 中查找 IPI 寄存器(Zynq 技术引用手册)但找不到。

我尝试在 Cortex-A9 规范中进一步挖掘 IPI 寄存器,发现软件生成的中断可以用作 IPI。

在我的操作系统添加软件中断支持后,问题是CPU_0可以中断自己,但不能中断CPU_1!

PS:为了让我的操作系统处理 SGI,我使用了第 1486 页中 ug585 的寄存器规范: SGI Control register

那么有没有其他特殊配置允许CPU 相互中断?或任何其他实现 IPI 的方式?

问候,

最佳答案

您的引用文档是 GIC(全局中断 Controller )的一种形式。 Cortex-A9 MP 内核包括一个集成的 GIC Controller 。每个 CPU 都包含一个中断接口(interface)。此外,还有一个系统范围的分发器。为了接收 IPI(也称为 SGI 或软件生成中断),您需要启用 CPU 接口(interface)以在第二个 CPU 上接收 SGI 中断。这需要几个步骤,

  1. 在 CPU2 上配置 GIC 中断接口(interface)寄存器
  2. 为 CPU2 设置 CP15 向量表。
  3. 在 CPU2 上启用 CPSR I 位
  4. 可能会设置一些银行化的 PPI 分销商登记册。 注意1

注意 1:虽然大多数分发器寄存器是系统全局的,但有些也是按 CPU 存储的。例如,参见第 3.3.8 节。 Cortex-A9 MPcore TRM 中的 PPI 状态寄存器。我没有从粗略的调查中看到任何东西,但我不排除这种可能性。

通过在 CPU1 上设置 GIC 分配器 GICD_ISPEND 寄存器来处理 CPU2 上的向量,测试未使用的 SPI(共享外设中断)是否正常工作。这应该验证您是否涵盖了第 2 步和第 3 步。您可能还需要设置类型以确保它们是中断而不是FIQ;特别是如果你有安全支持。您需要使用 GICD_ITARGETSR 寄存器来包含 CPU2。

GIC 引用列表

在通用 GIC 手册的附录 B 中特别有用。出于某种原因,ARM 喜欢不断更改他们发布的每个文档中的寄存器名称。

关于arm - 在 Zynq 中发送处理器间中断 (arm-v7/cortex-a9),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24434350/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com