加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

TQ2440启动代码内复制数据的浅析

发布时间:2020-12-15 06:42:20 所属栏目:百科 来源:网络整理
导读:? ?????? ldr?? r0,=BWSCON ?????? ldr?? r0,[r0] ? ???? ands r0,r0,#6??????????? ;OM[1:0] != 0,NOR FLash 启动;OM[1:0] == 0,NAND FLash 启动 ;BWCON寄存器的[1:0]状态代表OM[1:0]状态,由开发板上的Nor—Nand ;选择开关设定 ?????? bne? copy_proc_
?

?????? ldr?? r0,=BWSCON

?????? ldr?? r0,[r0]

? ???? ands r0,r0,#6???????????

;OM[1:0] != 0,NOR FLash 启动;OM[1:0] == 0,NAND FLash 启动

;BWCON寄存器的[1:0]状态代表OM[1:0]状态,由开发板上的Nor—Nand

;选择开关设定

?????? bne? copy_proc_beg?????????? ;不读Nand Flash

?

?????? adr? r0,ResetEntry???????????? ??????

?????? cmp ?r0,#0??????????????? ;if use Multi-ice,

?????? bne? copy_proc_beg??????????

;测试ResetEntry是否为0,无论从Nor还是Nand启动,都为0,若不为0,则

;使用仿真器

?

?

一、当从Nand Flash启动时的执行过程

nand_boot_beg

?????? [ {TRUE}

????????????? bl RdNF2SDRAM??? ;将代码从Nand拷贝到Sdram

?????? ]

?

?????? ldr?? pc,=copy_proc_beg?? ;进入Sdram中执行代码,取绝对地址

?

;补充:ldr r0,? _start? 相对于程序位置

;????? adr r0,?_start? ?相对于当前PC位置,与运行地址有关

;????? ldr r0,?=_start? 取得绝对地址

?

copy_proc_beg

??????

?????? adr? r0,ResetEntry???

;取ResetEntry的相对当前PC地址,此时

;r0=0x30000000

?????? ldr?? r2,BaSEOfROM?? ;

?????? cmp? r0,r2

?????? ldreq????? r0,TopOfROM? ;加载RW的起始地址

?????? beq InitRam?

?????? ldr r3,TopOfROM? ;Nand Flash启动时不执行

?

;复制RW段???

;补充:%Bn是向后退方向搜索第一个标号n,%Fn是向前进方向搜索第一个标号n

InitRam?

?????? ldr?? r2,BaSEOfBSS

?????? ldr?? r3,BaSEOfZero???

0

?????? cmp ????? r2,r3

?????? ldrcc?????? r1,[r0],#4 ;less than

?????? strcc?????? r1,[r2],#4

?????? bcc? %B0?????

;下面为ZI段清0

?????? mov r0,?? #0

?????? ldr?? r3,?? EndOfBSS

1????

?????? cmp ????? r2,?? r3

?????? strcc?????? r0,#4

?????? bcc? %B1

??????

?

?

二、当从Nor Flash启动时的执行过程

?

copy_proc_beg

??????

?????? adr? r0,ResetEntry???

;程序在Nor Flash中执行,取ResetEntry的相对当前PC地址,此时

;r0=0

?????? ldr?? r2,BaSEOfROM?? ;r2=0x30000000

?????? cmp? r0,r2?????????????????????? ;r0!=r2

?????? ldreq????? r0,TopOfROM? ;Nor Flash启动时执行,加载RO的结束地址

;下面代码复制RO段到Sdram中

0????

?????? ldmia????? r0!,{r4-r7}

?????? stmia????? r2!,{r4-r7}

?????? cmp r2,r3

?????? bcc? %B0

??????

?????? sub? r2,r2,r3 ;因为每次加16个字节,算出多加的字节数,放在R2中

?????? sub? r0,r2????????????? ;减去多加的部分,校正RO段的结束点

;下面为复制RW段和ZI段清零,同Nand Flash的相应分析过程

InitRam?

?????? ldr?? r2,BaSEOfZero???

0

?????? cmp r2,#4

?????? strcc?????? r1,#4

?????? bcc? %B0?????

?

?????? mov r0,?? EndOfBSS

1????

?????? cmp r2,#4

?????? bcc? %B1

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读