2014-03-04 46 views
0

这是针对具有双核A9 cortex 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()函数。

感谢

回答

2

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

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

是多数民众赞成在工作。我发现读取GIC_DIST的SGI TARGET寄存器也会给我CPU号码。也许这是董事会的具体情况,但似乎工作。 – Charvak

相关问题