这是特定于具有双核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()函数的实现。
由于
答案 0 :(得分:2)
如果你在中断处理程序中,你可能是PL1,在这种情况下你可以直接阅读MPIDR
:
readcore:
MRC p15, 0, r0, c0, c0, 5
AND r0, r0, #3
BX lr