參考資訊:
https://github.com/OpenNuvoton/NUC970_NonOS_BSP
GPIO Interrupt = 57

AIC Mask

GPIOB_IFEN

Clear

main.s
.equ GPIOD_DIR, (0xb8003000 + 0xc0)
.equ GPIOD_DATAOUT, (0xb8003000 + 0xc4)
.equ GPIOB_DIR, (0xb8003000 + 0x40)
.equ GPIOB_DATAIN, (0xb8003000 + 0x48)
.equ GPIOB_IFEN, (0xb8003000 + 0x54)
.equ GPIOB_PUEN, (0xb8003000 + 0x60)
.equ CLK_PCLKEN0, (0xb0000200 + 0x18)
.equ AIC_MECR, (0xb8002000 + 0x130)
.equ AIC_MECRH, (0xb8002000 + 0x134)
.equ AIC_EOSCR, (0xb8002000 + 0x150)
.text
.align 2
.global _start
_start: b reset
_undef: b .
_swi: b .
_pabort: b .
_dabort: b .
_reserved: b .
_irq: b irq_handler
_fiq: b .
reset:
mrs r0, cpsr
bic r0, #0x80
msr cpsr_c, r0
ldr r0, =AIC_MECRH
ldr r1, =(1 << (57 - 32))
str r1, [r0]
ldr r0, =CLK_PCLKEN0
ldr r1, [r0]
orr r1, #(1 << 3)
str r1, [r0]
ldr r0, =GPIOB_DIR
ldr r1, =~(1 << 3)
str r1, [r0]
ldr r0, =GPIOB_PUEN
ldr r1, =(1 << 3)
str r1, [r0]
ldr r0, =GPIOB_IFEN
ldr r1, =(1 << 3)
str r1, [r0]
ldr r0, =GPIOD_DIR
ldr r1, =(1 << 6)
str r1, [r0]
ldr r0, =GPIOD_DATAOUT
ldr r1, =(1 << 6)
str r1, [r0]
b .
irq_handler:
ldr r0, =GPIOD_DATAOUT
ldr r1, =~(1 << 6)
str r1, [r0]
ldr r0, =AIC_EOSCR
ldr r1, =1
str r1, [r0]
subs pc, lr, #4
.end
完成
