S3C2440存储控制器(memory controller)的寄存器使用

S3C2440芯片有Bank0~Bank7,8个块。存储控制器有13个寄存器,Bank0~Bank5只用BWSCON(BUS WIDTH & WAIT CONTROL REGISTER)和BANKCONx(BANK CONTROL REGISTER x为0~5)两个寄存器。 
Bank6和Bank7外接SDRAM时,除上面两种寄存器,还需要用到REFRESH、BANKSIZE、MRSRB6、MRSRB7等四个寄存器。
13个寄存器如下:
BWSCON   (Bus Width & Wait Control Register)
BANKCONx (Bank Control Register  x=0~7)
REFRESH  (Refresh Control Register刷新控制寄存器)
BANKSIZE (Banksize Register)
MRSRB6/7 (SDRAM Mode Register Set Register) 

1.位宽和等待控制寄存器

BWSCON寄存器中每4位控制一个BANK,从高往低一次类推BANK7~BANK0。

STx:启动/禁止SDRAM的数据掩码引脚。对于SDRAM此位为0,对于SRAM此位为1。

WSx:是否使用存储器的WAIT信号,通常都设为0。

DWx:用来设置相应的BANK位宽。

2.BANK控制寄存器(BAN0~BANK5)。

BANK CONTROL REGISTER (BANKCONN: NGCS0-NGCS5)

这几个寄存器用来控制BANK0~BANK5外接设备的访问时序。设置的时候具体需要参考外接芯片的手册中时序图。针对我们这个开发板我们使用0x0700即可。

3.BANK控制寄存器(BAN6、BANK7)。

在8个BANK中只有BANK6和BANK7可以外接SRAM或SDRAM,因此这俩个BANK控制寄存器和上面的不太相同。

MT:确定这个BANK外接的设备是什么芯片,由于我们外接SDRAM,所以设置为0b11。

Trcd:推荐值0b01。

SCAN:列地址位数,我们这里是设置为9位,即0b01。

其它的和BANK0~BANK5一样设置。

4.刷新控制寄存器(REFRESH CONTROL REGISTER )。

REFEN:使能/禁止 SDRAM刷新功能

TREFMD:SDRAM刷新模式,我们这里使用0b0。Self Refresh(一般在系统休眠时使用)。

Trp:设置当SDRAM中RAS(列地址信号)需要重新寻址时,要隔多久时间才能开始下次的寻址动作。理论上越短越好,我们这里设置为0b00。

Tsrc:SDRAM半行周期时间,我们这里设置0b11。

Refresh Counter:SDRAM刷新的计数值。HCLK即为SDRAM时钟频率

刷新周期=(2^11-刷新计数值+1)/HCLK  所以 刷新计数值=2^11+1-刷新周期*HCLK

我们这里通过查阅SDRAM芯片手册知道 Refresh period=64ms/8192=7.8125us

设HCLK=12MHz,所以refresh_count=2^11+1-12*7.8125=1955。

综上:我们这里的这个寄存器设置为0x008C0000+1955(0x7A3)=0x008C07A3。

5.BANKSIZE寄存器

BURST_EN: 使能/禁止 ARM核的突发传输。

SCKE_EN: 禁止/使能 通过SCKE信号让SDRAM进入省电模式。

SCLK_EN: 0: 一直使能SCLK信号 1:只有当使用SDRAM时才使能SCLK信号(推荐)

BK76MAP:设置BANK6/7的大小。

BANK0~BANK5的地址空间大小都是固定不变的128MB,而BANK6/7的大小是可变的,以保持这两个空间的大小连续,即BANK7的起始地址会随它们的大小变化。我们用的SDRAM是64MB,所以设置为0b001。

6.SDRAM模式设置寄存器(MRSBx)

通过上面我们可以看到能修改的只有一个CL:CAS(列地址信号)延迟,我们这里设置为0x30。

猜你喜欢

转载自blog.csdn.net/hzb15195948039/article/details/86483915
今日推荐