gpt4 book ai didi

arm - 中断如何在多核 ARM cpu 上工作

转载 作者:行者123 更新时间:2023-12-04 14:31:55 25 4
gpt4 key购买 nike

这个问题已经在 x86 上得到了回答,但是,我找不到很多关于 ARM MP cpus 的信息,比如 Cortex-A9、Cortex-A15 等......

更重要的是,我想知道是否可以在没有任何配置等的情况下在非主 CPU 上引发中断。

我正在开发一个只处理主 cpu 的软件,因此我将其余部分置于 WFI 状态,但是我不知道中断如何在 MP arm cpu 上工作,主 cpu 是否有可能继续执行代码和一个辅助 cpu cpu 捡起它并跳转到向量表中的指令并执行该代码?

顺便说一句,这是我用来将它们置于低功耗模式的代码

    uint32_t reg;

__asm__ volatile("mrc p15, 0, %0, c0, c0, 5" : "=r" (reg));
reg &= 0xF;

if(reg > 0)
goto spin;

<code snipped>

spin:
for(;;)
cpu_idle(); // cpu_idle -> wfi

最佳答案

简短且实用的正确答案是,如果没有在辅助核心上执行一些配置,您所要求的是不可能的......

http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.ihi0048b/index.html 中描述了(相当详细的)中断 Controller 架构。

要准备辅助内核以接收 IPI,您需要:

  • 启用 GIC 分配器(一次,用于整个系统)
  • 启用 GIC CPU 接口(interface)(针对每个内核)
  • 启用您想要接收的 IPI(针对每个内核)
  • 为您想要接收的每个 IPI 设置优先级(针对每个内核)
  • 确保 CPU 接口(interface)中断优先级屏蔽寄存器(针对每个内核)设置为低于您在上面设置的中断优先级的优先级(更高的数字)。
  • 清除 CPSR I 位(针对每个内核)

  • 如果您不打算实现中断处理程序,请跳过清除 I 位。核心将从 WFI 中出来并继续执行。这通常是系统引导操作所需要的。

    关于arm - 中断如何在多核 ARM cpu 上工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11811276/

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