2014-03-04 71 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

相關問題