如何识别运行中断处理程序的核心



这是针对具有双核 A9 皮层 CPU 的 XILINX-7000 系列主板。 在函数OEMInterruptHandler中,我想找出当前代码正在执行的核心。这是出于调试目的,因为我发现当 GPIO IRQ 面向 CORE0 时一切正常,但在 CORE1 上,GPIO IRQ 被抢占。GPIO IRQ 的优先级为 0。所有其他 IRQ 的优先级0xA0。IRQ 0-31 以两个内核为目标,除 GPIO 外的所有其他 SPI 都面向 core0。操作系统是Windows CE 2013。这是来自OEMInterruptHandler的代码

    ULONG sys_intr = SYSINTR_NOP;
    UINT32 gic_iar = 0;
    UINT32 core;
    UINT32 irq = 0;
    gic_iar = (INREG32(&g_GICCpu->INTACK));
    irq = ((gic_iar & GIC_CPU_INTACK_INTID_MASK) << GIC_CPU_INTACK_INTID_SHIFT);
    // read the core 
    core = readcore();
    // enable interrupts
    INTERRUPTS_ON();
    ....

我正在寻找 readcore() 函数的实现。

谢谢

如果你在中断处理程序中,你可能在PL1,在这种情况下,你可以直接读取MPIDR

readcore:
    MRC  p15, 0, r0, c0, c0, 5
    AND  r0, r0, #3
    BX   lr

最新更新