设为首页 加入收藏

TOP

ARM启动文件2440init.s分析(五)
2014-11-24 14:39:15 来源: 作者: 【 】 浏览:65
Tags:ARM 启动 文件 2440init.s分析
ldr r1,=GSTATUS2 ;这个寄存器数值表示哪个信号引起的复位动作产生


ldr r0,[r1]


tst r0,#0x2


;Incase of the wake-up from SLEEP mode, go to SLEEP_WAKEUP handler.


bne WAKEUP_SLEEP



EXPORTStartPointAfterSleepWakeUp


StartPointAfterSleepWakeUp



;Setmemory control registers


;ldr r0,=SMRDATA ;(等效于下边的指令)



adrl r0,SMRDATA ;be careful!中等范围的地址读取伪指令,用法类似于ldr(大范围地址读取)伪指令


ldr r1,=BWSCON ;BWSCONAddress


add r2, r0, #52 ;Endaddress of SMRDATA 共有13个寄存器地址(4字节)需要赋值,13*4=52字节



0


ldr r3, [r0], #4 ;这些都是后变址指令


str r3, [r1], #4


cmp r2, r0


bne %B0 ;当<的时候,跳转到0标号处继续执行



;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;


;;;;;;;;;;;;; When EINT0 is pressed, Clear SDRAM


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;


; check if EIN0 button is pressed



ldr r0,=GPFCON ;input,无上拉电阻


ldr r1,=0x0


str r1,[r0]


ldr r0,=GPFUP


ldr r1,=0xff


str r1,[r0]



ldr r1,=GPFDAT


ldr r0,[r1]


bic r0,r0,#(0x1e<<1) ; bit clear


tst r0,#0x1


bne%F1 ;若不相等,则向下跳到1标号,跳过下边代码





; Clear SDRAM Start



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=****



movr1,#0


movr2,#0


movr3,#0


movr4,#0


movr5,#0


movr6,#0


movr7,#0


movr8,#0



ldr r9,=0x4000000 ;64MB ;这几条指令目的是:擦除sdram的所有数据


ldr r0,=0x30000000


0


stmia r0!,{r1-r8}


subs r9,r9,#32


bne %B0



;Clear SDRAM End



1



;Initializestacks


bl InitStacks



;===========================================================


;OM0是flash选择开关,OM0接地时从nand 启动,悬空时(核心板上有上拉电阻)从nor启动


;OM1在核心板上,始终是接地.为0


;OM1:OM0取值:00 nandflash mode;01 16bit nor;10 32bit nor;11 test mode


;详见:s3c2440 用户手册 5.memory controller 一节



ldr r0, =BWSCON


ldr r0, [r0]


ands r0, r0, #6 ;OM[1:0]!= 0, NOR FLash boot do not read nand flash


bne copy_proc_beg


adr r0, ResetEntry ;OM[1:0] == 0, NAND FLash boot


cmp r0, #0 ;ifuse Multi-ice,


bne copy_proc_beg ;donot read nand flash for boot


;nop



;ands指令,加s表示结果影响cpsr寄存器的值




;===========================================================


;把nand中的数据,拷贝到ram中


nand_boot_beg


[{TRUE}


blRdNF2SDRAM


]



ldr pc, =copy_proc_beg



;这里的一段代码时对内存数据的初始化,涉及代码段,数据段,bss段等


;因对这里的变量设置等有异议,暂时未全面分析,但是基本原理想通,就是一个比较地址,复制数据的过程


copy_proc_beg


adr r0, ResetEntry


ldr r2, BaseOfROM


cmp r0, r2


ldreq r0, TopOfROM


beq InitRam


ldrr3, TopOfROM


0


ldmia r0!, {r4-r7}


stmia r2!, {r4-r7}


cmp r2, r3


bcc %B0



sub r2, r2, r3


sub r0, r0, r2



InitRam


ldr r2, BaseOfBSS


ldr r3, BaseOfZero


0


cmp r2, r3


ldrcc r1, [r0], #4

首页 上一页 2 3 4 5 6 7 8 下一页 尾页 5/8/8
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇Java迷题:等于,还是不等于? 下一篇jQuery倒数计时按钮—setTimeout

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: