掌機 - GP2X Wiz - Assembly - Interrupt(IRQ)



按鍵B連接到GPIOC-5


Interrupt架構


Interrupt Table


Priority


暫存器


IRQ、FIQ設定


main.s

    .global _start

    .equiv GPIOC_OUT,    0xc000a080
    .equiv GPIOC_OUTENB, 0xc000a084
    .equiv GPIOC_INTENB, 0xc000a090
    .equiv GPIOC_DET,    0xc000a094
    .equiv INTMODEL,     0xc0000808
    .equiv INTMASKL,     0xc0000810
    .equiv INTPENDL,     0xc0000820
     
    .arm
    .text
_start:
    b reset
    b .
    b .
    b .
    b .
    b .
    b irq_handler
    b .

irq_handler:
    ldr r0, =GPIOC_OUT
    eor r2, #(1 << 16)
    str r2, [r0]

    ldr r0, =INTPENDL
    ldr r1, =0xffffffff
    str r1, [r0]

    ldr r0, =GPIOC_DET
    ldr r1, =0xffffffff
    str r1, [r0]
    subs pc, lr, #4

reset:
    mrs r0, cpsr
    bic r0, #0x80
    msr cpsr_c, r0

    ldr r0, =INTMODEL
    ldr r1, =0
    str r1, [r0]

    ldr r0, =INTMASKL
    ldr r1, =0
    str r1, [r0]

    ldr r0, =INTPENDL
    ldr r1, =0xffffffff
    str r1, [r0]

    ldr r0, =GPIOC_OUTENB
    ldr r1, =(1 << 16)
    str r1, [r0]

    ldr r0, =GPIOC_OUT
    ldr r2, =(1 << 16)
    str r2, [r0]

    ldr r0, =GPIOC_INTENB
    ldr r1, =(1 << 5)
    str r1, [r0]

    b .
    .end

完成