Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1494192
  • 博文数量: 204
  • 博客积分: 4013
  • 博客等级: 中校
  • 技术积分: 4030
  • 用 户 组: 普通用户
  • 注册时间: 2011-12-29 06:34
文章分类

全部博文(204)

文章存档

2012年(204)

分类: 嵌入式

2012-02-16 19:50:16

接上篇程序:

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

;------         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 ;初始化堆栈
阅读(2883) | 评论(0) | 转发(3) |
给主人留下些什么吧!~~