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

时间:2014-03-04 18:39:55

标签: arm multicore xilinx

这是特定于具有双核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()函数的实现。

由于

1 个答案:

答案 0 :(得分:2)

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

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