[ARM笔记]存储控制器的寄存器使用方法

时间:2016-12-01来源:网络

  存储器共有13个寄存器,BANK0~BANK5只需要设置BWSCON和BANKCONx(x为0~5)两个寄存器;BANK6、BANK7外接SDRAM时,除了BWSCON和BANKCONx(x为6、7)外,还要设置REFRESH、BANKSIZE、MRSRB6、MRSRB7等4个寄存器。下面分类说明(“[y:x]”表示占据了寄存器的位x、x+1、……、y):

  1. 位宽和等待控制寄存器BWSCON(Bus Width & Wait Status Control Register)

  BWSCON中每4位控制一个BANK,最高4位对应BANK7、接下来4位对应BANK6,依此类推。

  (1)STx:启动/禁止SDRAM的数据掩码引脚,对于SDRAM,此位为0;对于SRAM,此位为1。Determine SRAM for using UB/LB for bank x, 0 = Not using UB/LB (The pins are dedicated nWBE[3:0])1 = Using UB/LB (The pins are dedicated nBE[3:0])。

  (2)WSx:是否使用存储器的WAIT信号,通常设为0。Determine WAIT status for bank x, 0 = WAIT disable 1 = WAIT enable。

  (3)DWx:使用两位来设置相应BANK的位宽,0b00对应8位,0b01对应16位,0b10对应32位,0b11表示保留。

  比较特殊的是BANK0,它没有ST0和WS0,DW0([2:1])只读——由硬件跳线来决定:0b01表示16位,0b10表示32位,BANK0只支持16、32两种位宽。The states are selected by OM[1:0] pins。

  2. BANK控制寄存器BANKCONx(BANK CONTROL REGISTER,x为0~5,(BANKCONx: nGCS0-nGCS5))

  这几个寄存器用来控制BANK0~BANK5外接设备的访问时序,一般使用默认的0x0700即可。

  3. BANK控制寄存器BANKCONx(BANK CONTROL REGISTER,x为6~7,(BANKCONx: nGCS6-nGCS7))

  在8个BANK中,只有BANK6和BANK7可以外接SRAM和SDRAM,所以BANKCON6~BANKCON7与BANKCON0~BANKCON5有点不同。

  MT([16:15])Determine the memory type for bank6 and bank7。00 = ROM or SRAM,01 = Reserved (Do not use),10 = Reserved(Do not use),11 = Sync. DRAM。

  当MT=0b00时,此寄存器与BANKCON0~BANKCON5类似,不再赘述。

  当MT=0b11时,此寄存器其他值设置如下。

  Trcd([3:2]):RAS to CAS delay,设为推荐值0b01。

  SCAN([1:0]):SDRAM的列地址位数,00 = 8-bit;01 = 9-bit;10= 10-bit

  4. 刷新控制寄存器REFRESH(REFRESH CONTROL REGISTER):设为0x008C0000+R_CNT

  (1)REFEN([23]):0=禁止SDRAM的刷新功能,1=开启SDRAM的刷新功能。

  (2)TREFMD([22]):SDRAM的刷新模式,0=Auto Refresh,1=Self Refresh(一般在系统休眠时使用)。

  (3)Trp([21:20]):设为0即可。

  (4)Tsrc([19:18]):设为默认值0b11即可。

  (5)Refresh Counter([10:0]):即上述的R_CNT,可按如下方式计算(SDRAM时钟频率就是HCLK):

  R_CNT=2^11+1-SDRAM时钟频率(MHz)*SDRAM刷新频率(us)

  Refresh period = (211-refresh_count+1)/HCLK

  SDRAM的刷新周期在SDRAM的数据手册上有标明,例如HY57V561620B的数据手册上有这么一句话“8192 refresh cycles / 64ms”。所以,刷新周期=64ms/8192=7.8125us。

  在未使用PLL时,SDRAM时钟频率等于晶振的12MHz。

  现在可以计算:R_CNT=2^11+1-12*7.8125=1955

  所以,在未使用PLL时,REFRESH=0x008C0000+1955=0x008C07A3。

  5. BANKSIZE寄存器REFRESH(BANKSIZE REGISTER)

  (1)BURST_EN([7])

  0=ARM核禁止突发传输,1=ARM核支持突发传输。

  (2)SCKE_EN([5])

  0=不使用SCKE信号SDRAM进入省电模式,1=使用SCKE信号令SDRAM进入省电模式。

  (3)SCLK_EN([4])

  0=时刻发出SCLK信号,1=仅在访问SDRAM期间发出SCLK信号(推荐)。

  (4)BK76MAP([2:0])

  设置BANK7/6的大小。BANK0~5的地址空间大小都是固定的128MB,地址范围是(x*128M)到(x+1)*128-1,x表示0到5。BANK6/7的大小是可变的,以保持这两个地址的连续,即BANK7的起始地址会随它们的大小变化。BK76MAP的取值意义如下:

  010 = 128MB/128MB;001 = 64MB/64MB;000 = 32M/32M;111 = 16M/16M;110 = 8M/8M;101 = 4M/4M;100 = 2M/2M

  6. SDRAM模式设置寄存器MRSRBx(SDRAM MODE REGISTER SET REGISTER,x为6~7)

  能修改的只有位CL([6:4]),这是SDRAM时序的一个时间参数:

  CAS latency 000 = 1 clock, 010 = 2 clocks, 011=3 clocks

关键词: ARM SDRAM

加入微信
获取电子行业最新资讯
搜索微信公众号:EEPW

或用微信扫描左侧二维码

相关文章

查看电脑版