blob: 4b3847b6a2a90a2a13865f26c19c7de9c881b028 [file] [log] [blame]
#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