专题8-内存初始化

2/10/2017来源:ASP.NET技巧人气:827

对于内存:

SRAM一般作为cpu的垫脚石(存储较快,需要刷新) DRAM:分为SDRAM、DDR 、DDR2(不需要刷新,但存储相对较慢)

2440的内存是64M,是由两个32M的内存芯片与处理器连接合成的。处理器共有27根地址线,可以访问2的27次方,即128M内存,由于有8个片选端,即总共可以访问128*8=1G的内存。对于2440,cpu的低16位地址线分别连接32M的内存芯片,32位的数据线的前16位与后16位分别连接两块内存的数据线,即一个时钟周期最多可以同时传送32bit的数据。 这里写图片描述 查看datasheet的memory controler可以发现,bank0为cpu的垫脚石,一般bank6与bank7作为内存区域,起始地址为0x30000000。此时需要配置存储控制寄存器,包括配置总线宽度是否等待控制等。 因为比方说,*0x30008000=0x5; 0x30008000属于哪一个bank,行地址、列地址是什么——需要存储控制器做一个分解与解析,再对该内存处(norFlash、网卡、内存等)写入相应值。

代码如下:

#define mem_contrl 0x48000000 % BWSCON:Bus width & wait status control register init_sdram: ldr r0, =mem_contrl add r3, r0, #4*13 adrl r1, mem_data %adrl与adr指令类似,为伪指令其加载的地址范围要宽,为32位 0: ldr r2, [r1], #4 str r2, [r0], #4 cmp r0, r3 bne 0b %不等于0跳转到0处,b表示向前跳转 mov pc, lr mem_data: .long 0x22000000 .long 0x00000700 .long 0x00000700 .long 0x00000700 .long 0x00000700 .long 0x00000700 .long 0x00000700 .long 0x00018001 .long 0x00018001 .long 0x008c04f5 .long 0x000000b1 .long 0x00000030 .long 0x00000030