接上篇程序:
;--------------------------------------------------------------------------------------
;------ When EINT0 is pressed, Clear SDRAM
;--------------------------------------------------------------------------------------
;check if EIN0 button is pressed.
;这一段检测EINT0是否被按下,假如EINT0被按下,则清空SDRAM
ldr r0,=GPFCON ;加载地址,在2440addr.inc中定义
ldr r1,=0x0
str r1,[r0] ;GPFCON=0,F口为输入
ldr r0,=GPFUP
ldr r1,=0xff
str r1,[r0] ;GPFUP=0xff,上拉功能无效
ldr r1,=GPFDAT
ldr r0,[r1] ;读取F口数据
bic r0,r0,#(0x1e<<1) ;仅保留第1,2位数据,其他清0
tst r0,#0x1 ;判断第1位是否为零
bne ;不为0表示按钮没有被按下,则向后跳转到标号1处,不执行清空SDRAM
ldr r1,=0x55aa
str r1,[r0] ;GPF7~4为输出,GPF3~0为中断
; ldr r1,=0xff
; str r1,[r0] ;上拉功能无效
ldr r1,=0x0
str r1,[r0] ;控制LED灯显示,灯全亮
mov r1,#0
mov r2,#0
mov r3,#0
mov r4,#0
mov r5,#0
mov r6,#0
mov r7,#0
mov r8,#0
ldr r9,=0x4000000 ;64MB大小的RAM
ldr r0,=0x30000000 ;RAM首地址
stmia r0!,{r1-r8}
subs r9,r9,#32
bne %B0
;以上这段清空SDRAM
;Clear SDRAM End
;Initialize stacks
bl InitStacks ;初始化堆栈