tiny6410内存初始化

tiny6410存储控制器由手册《S3C6410X》的第五章节介绍。

根据5.4.1小节的流程来完成初始化 ,初始化分为六步来完成:

1、Program memc_cmd to ‘3’b100’, which makes DRAM Controller enter ‘Config’ state. 

代码如下:ldr r0, =0x7e001004
    mov r1, 0x4
    str r1, [r0]
2、 Write memory timing parameter, chip configuration, and id configuration registers. 

代码如下:

 ldr r0, =0x7e00f120
    mov r1, #0x8
    str r1, [r0]


    ldr r0, =0x7e001004  @内存控制命令寄存器
    
    mov r1, #0x4         @根据手册得知需要先进入配置模式
    str r1, [r0]


    ldr r0, =0x7e001010  @刷新寄存器地址
    ldr r1, =( ( 7800 / ( 1000000000/133000000 ) + 1 ) )      @设置刷新时间
    str r1, [r0]


    ldr r0, =0x7e001014  @CAS latency寄存器
    mov r1, #(3 << 1)
    str r1, [r0]


    ldr r0, =0x7e001018  @t_DQSS寄存器
    mov r1, #0x1
    str r1, [r0]


    ldr r0, =0x7e00101c  @T_MRD寄存器
    mov r1, #0x2
    str r1, [r0]


    ldr r0, =0x7e001020   @t_RAS寄存器
    ldr r1, =( ( 45 / ( 1000000000 / 133000000 ) + 1 ) )
    str r1, [r0]


    ldr r0, =0x7e001024   @t_RC寄存器
    ldr r1, =( ( 68 / ( 1000000000 / 133000000 ) + 1 ) )
    str r1, [r0]


    ldr r0, =0x7e001028   @t_RCD寄存器
    ldr r1, =( ( 23 / ( 1000000000 / 133000000 ) + 1 ) )
    str r1, [r0]


    ldr r0, =0x7e00102c   @t_RFC寄存器
    ldr r1, =( ( 80 / ( 1000000000 / 133000000 ) + 1 ) )
    str r1, [r0]


    ldr r0, =0x7e001030   @t_RP寄存器
    ldr r1, =( ( 23 / ( 1000000000 / 133000000 ) + 1 ) )
    str r1, [r0]


    ldr r0, =0x7e001034   @t_rrd寄存器
    ldr r1, =( ( 15 / ( 1000000000 / 133000000 ) + 1 ) )
    str r1, [r0]


    ldr r0, =0x7e001038   @t_wr寄存器
    ldr r1, =( ( 15 / ( 1000000000 / 133000000 ) + 1 ) )
 @  ldr r2, [r0]
    str r1, [r0]


    ldr r0, =0x7e00103c   @t_wtr寄存器
    mov r1, #0x07
    str r1, [r0]


    ldr r0, =0x7e001040   @t_xp寄存器
    mov r1, #0x02
    str r1, [r0]


    ldr r0, =0x7e001044   @t_xsr寄存器
    ldr r1, =( ( 120 / ( 1000000000 / 133000000 ) + 1 ) )
    str r1, [r0]


    ldr r0, =0x7e001048   @t_esr寄存器
    ldr r1, =( ( 120 / ( 1000000000 / 133000000 ) + 1 ) )
    str r1, [r0]


    ldr r0, =0x7e00100c   @内存控制配置寄存器
    ldr r1, =0x00010012   @配置控制器
    str r1, [r0]


    ldr r0, =0x7e00104c   @32位DRAM配置控制寄存器
    ldr r1, =0x0b45
    str r1, [r0]


    ldr r0, =0x7e001200   @片选寄存器
    ldr r1, =0x150f8
    str r1, [r0]


    ldr r0, =0x7e001304   @用户配置寄存器
    mov r1, #0x0
    str r1, [r0] 
3、Wait 200us to allow SDRAM power and clock to stabilize. However, when CPU starts working, power and 
    clock would already be stabilized.(使用默认模式,可以不做修改) 
4、Execute memory initialization sequence. 

代码如下:

ldr r0, =0x7e001008
    ldr r1, =0x000c0000
    str r1, [r0]


    ldr r1, =0x00000000
    str r1, [r0]


    ldr r1, =0x00040000
    str r1, [r0]
    
    ldr r1, =0x00040000
    str r1, [r0]


    ldr r1, =0x000a0000
    str r1, [r0]


    ldr r1, =0x00080032
    str r1, [r0]

5、Program memc_cmd to ‘3’b000’, which makes DRAM Controller enter ‘Ready’ state. 

代码如下:

ldr r0, =0x7e001004
    mov r1, #0x0
    str r1, [r0]
6、Check memory status field in memc_stat until memory status becomes ‘2’b01’, which means ‘Ready’. 

代码如下:

check_dmc1_ready:
    
    ldr r0, =0x7e001000 
    ldr r1, [r0]
    mov r2, #0x3
    and r1, r1, r2
    cmp r1, #0x1
    bne check_dmc1_ready
    nop
    mov pc, lr




最后设置MEM_SYS_CFG寄存器的第七位为1,放在起始位置。


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值