mini2440启动代码分析之第八篇(清空SDRAM)


接上篇程序:

;-------------------------------------------------------------------------------------- 

;------         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

; Clear SDRAM Start
;清空SDRAM
       ldr   r0,=GPFCON
       ldr   r1,=0x55aa
       str    r1,[r0]               
 ;GPF7~4为输出,GPF3~0为中断
;      ldr   r0,=GPFUP
;      ldr   r1,=0xff
;      str    r1,[r0]
               
;上拉功能无效
       ldr   r0,=GPFDAT
       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首地址
0   
       stmia       r0!,{r1-r8}
       subs  r9,r9,#32
       bne  %B0
;以上这段清空SDRAM
;Clear SDRAM End
;很明显可以看出,程序利用r1~r8这几个寄存器把0x30000000到0x34000000的内存全部清零了
1
  ;Initialize stacks
   bl    InitStacks ;初始化堆栈

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值