#define PROCESSOR_ID_REG_BASE 0xF8430000 | |
.global IRQ_Handler | |
IRQ_Handler: | |
// ;STMDB r13!, {r0 -r3,r14} ;save registers | |
PUSH {r0-r5,r12,lr} | |
// ;check CPU ID | |
// ;LDR r0, =PROCESSOR_ID_REG_BASE | |
// ;LDR r0, [r0] | |
// ;AND r0, r0, #0x03 | |
MRC p15,0,r0,c0,c0,5 | |
ANDS r0, r0, #0xf | |
CMP r0, #0 //; if the current is CPU #0 | |
BNE GO_TO_CPU1_IRQ | |
LDR r0, _IRQ_entry | |
BLX r0 | |
B IRQ_DONE | |
GO_TO_CPU1_IRQ: | |
// ;LDR r0, _IRQ_entry | |
// ;BLX r0 | |
IRQ_DONE: | |
//;restore registers | |
//;LDMIA r13!, {r0 -r3,r14} | |
POP {r0-r5,r12,lr} | |
//;return from IRQ | |
subs pc, r14, #4 //; return to where I got interrupted from! | |
_IRQ_entry: | |
.word GIC_IRQ_Handler | |