首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

ARM-S3C2440启动文件init.s解析(7)

ARM-S3C2440启动文件init.s解析(7)

;设置内存控制器等寄存器的值,因为这些寄存器是连续排列的,所以采用如下办法对这些
;寄存器进行连续设置.其中用到了SMRDATA的数据,这在代码后面有定义
;===============================================================================
;这是设置SDRAM,flash ROM 存储器连接和工作时序的程序,片选定义的程序
;SMRDATA map在下面的程序中定义
;SMRDATA中涉及的值请参考memcfg.inc程序
;Set memory control registers
  ;ldr r0,=SMRDATA ;dangerous!!!
  adrl r0, SMRDATA  ;be careful!, tinko
ldr r1,=BWSCON  ;BWSCON Address
add r2, r0, #52  ;End address of SMRDATA ;SMRDATA数据的结束地址,共有52字节的数据

0
ldr r3, [r0], #4
str r3, [r1], #4
cmp r2, r0
bne %B0   ;%表示搜索,B表示反向-back(F表示向前-forward),0为局部标号(0~99)


;================================================================================
;如果 EINT0 产生(这中断就是我们按键产生的), 就清除SDRAM ,不过好像没人会在这个时候按
;================================================================================
; check if EIN0 button is pressed
ldr r0,=GPFCON
ldr r1,=0x0     ;00 = Input
str r1,[r0]
ldr r0,=GPFUP
ldr r1,=0xff   ;1- The pull up function is disabled.
str r1,[r0]
ldr r1,=GPFDAT
ldr r0,[r1]
    bic r0,r0,#(0x1e<<1) ; bit clear
tst r0,#0x1
bne %F1   ;如果没有按,就跳到后面的1标号处 => Initialize stacks

; 这就是清零内存的代码

ldr r0,=GPFCON
ldr r1,=0x55aa
str r1,[r0]
; 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
ldr r0,=0x30000000
0
stmia r0!,{r1-r8}
subs r9,r9,#32
bne %B0
;到这就结束了.


;//4.初始化各模式下的栈指针
;Initialize stacks
1
bl InitStacks
;=========================================================================
继承事业,薪火相传
返回列表