本文基于国嵌的视频教程,总结一下ARM内存体系架构。
由S3C2440的datasheet可以看出,该芯片具有27根地址总线,则2^27=134217728bits=131072Kb=128Mb。总共有8根片选总线,所以最大可扩展内存为8*128=1024Mb=1GB地址空间。从外部看即有8个memory banks。ARM核访问内存地址则主要是通过存储控制器去访问内存空间。
具体初始化代码如下:
#define mem_contrl 0x48000000
init_sdram:
ldr r0,=mem_contrl @first register address
add r3,r0,#4*13 @final register address,every register's length is 4 byte,
@total has 13 registers
adrl r1,mem_data @"adrl" load long address,r1 save data list first address
0:
ldr r2,[r1],#4 @"#4"(decimalism) next loop [r1]=[r1]+4
str r2,[r0],#4
cmp r0,r3 @r0 and r3 compare
bne 0b @judge:if not equal,then turn to 0 . "b" means turn to before
mov pc,lr
mem_data:
.long 0x22000000 @.long indicate it's length
.long 0x00000700
.long 0x00000700
.long 0x00000700
.long 0x00000700
.long 0x00000700
.long 0x00000700
.long 0x00018001
.long 0x00018001
.long 0x008c04f5
.long 0x000000b1
.long 0x00000030
.long 0x00000030
关于寄存器的取值和地址详见S3C2440的datasheet或者参考 国嵌的视频教程。