地址重映射在S3C4510B系统中的实现
Add r2,r2,r3
本文链接地址:http://www.oyaya.net/fanwen/view/140548.html
0
Idmia r0!,{r4-r11}
Stmia r1!,{r4-r11}
Cmp r1,r2
Bcc%B0
;将RW段中预初始化的变量搬移到RAM中
sub r1,r1,r2
sub r0,r0,r1 ;将r0指向RO段的结束,即RW段的开始
ldr r1,BaseOfBSS
Idr r2,BaseOfZero
Add r1,r1,3
Add r2,r2,r3
1 ;基于局部标号的相对跳转,PC+偏移地址,产生与位置无关的代码
cmp r1,r2
ldrcc r4,[r0],#4
strcc r4,[r1],#4
bcc %B1
;接着把ZI段搬移到RAM中,并其将初始化为0
mov r0,#0
Idr r2,EndOfBSS
Add r2,r2,r3
2
cmp r1,2
strcc r0,[r1],#4
bcc%B2
⑥地址的重新映射。S3C4510B中的Remap过程其实很简单,只需重新设置ROMCON0~ROMCON5和DRAMCON0~DRAMCON3。在本系统中只需重新设置ROMCON0和DRAMCON0。
源代码:
;/*内存控制寄存器重新设置-存储空间重新映射地址空间*/
EXPORT RemapMemory
RemapMemory
mov r12,r14
adr r0,RemapMem
ldmia r0,{r1-r11}
ldr r0,=ROMCON0 ;ROMCON0为Bank寄存器的起始地址
stmia r0,{r1-r11}
bl ExceptionTalbeInit ;中断向量表重新初始化
mov pc,r12
RemapMem
DCD &11040060 ;/*ROMCON0 0x1000000~0x1100000*/
…
DCD &10000398 ;/*DRACON0 0x0~0x1000000*/
《地址重映射在S3C4510B系统中的实现(第3页)》