专题8-内存初始化

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/lvjianxin6015/article/details/54897760

对于内存:

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、网卡、内存等)写入相应值。
这里写图片描述

按照datasheet的存储控制器配置以下7个寄存器:
这里写图片描述
代码如下:

#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指令类似,为伪指令其加载的地址范围要宽,为320:
    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

猜你喜欢

转载自blog.csdn.net/lvjianxin6015/article/details/54897760