免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1943 | 回复: 2

SDRAM initialization and testing [复制链接]

论坛徽章:
0
发表于 2009-09-27 01:10 |显示全部楼层
Here's an example for SDRAM initialization and testing

  1.     mov  r0, #PBASE_SDRAM
  2.     ldr  r1, =PBASE_SDRAMC
  3.     @ 1
  4.     ldr  r2, =0x85227279
  5.     str  r2, [r1, #SDRAMC_CR]
  6.     @ 3
  7.     mov  r2, #0
  8.     str  r2, [r1, #SDRAMC_MDR]  
  9.     @ 4
  10.     mov  r2, #0x4f00
  11. 0:
  12.     subs r2, r2, #1
  13.     bne  0b
  14.     @ 5
  15.     mov  r2, #2
  16.     str  r2, [r1, #SDRAMC_MR]
  17.     str  r2, [r0]
  18.     @ 6
  19.     mov  r2, #4
  20.     str  r2, [r1, #SDRAMC_MR]
  21. 0:
  22.     str  r2, [r0]
  23.     add  r2, r2, #1
  24.     cmp  r2, #12
  25.     bls  0b
  26.     @ 7
  27.     mov  r2, #3
  28.     str  r2, [r1, #SDRAMC_MR]
  29.     str  r2, [r0]
  30.     @ 9
  31.     mov  r2, #0
  32.     str  r2, [r1, #SDRAMC_MR]
  33.     str  r2, [r0]
  34.     @ 10
  35.     ldr  r2, =1562
  36.     str  r2, [r1, #SDRAMC_TR]
复制代码
and SDRAM testing
  1.     ldr  r1, [r0]
  2.     mvn  r2, r1
  3.     mov  r1, r2
  4.     str  r2, [r0]
  5.     ldr  r2, [r0]
  6.     cmp  r1, r2
  7.     bne  Hang
  8.     @ fully functional now :)
  9.     mov  r0, #0
  10.     mov  r1, #(1 << 14)
  11.     bl   LedOn

  12. Hang:
  13.     b    Hang
复制代码


TODO:
1. Tune CR & TR parameter
2. Design SDRAM benchmark program

[ 本帖最后由 conke 于 2009-9-27 01:11 编辑 ]

论坛徽章:
0
发表于 2009-09-27 14:59 |显示全部楼层

回复 #1 conke 的帖子

以下是我初始化内存的代码,但是测试好像读写不了内存
*************************************
@InitMem:
        ldr r0, =AT91SAM926X_PA_MATRIX
        ldr r1, =((1 << 16) | 2)
        str r1, [r0, #MATRIX_EBI0CSA]

        ldr r0, =AT91SAM926X_PA_PIOD
        ldr r1, =0xffff0000
        str r1, [r0, #PIO_ASR]

        ldr r0, =AT91SAM926X_PA_SDRAMC
        ldr r1, =0x85227279
        str r1, [r0, #SDRAMC_CR]

        mov r1, #0
        str r1, [r0, #SDRAMC_MDR]

@delay 200 * 1000 ns = 40000 pck
        mov r2, #0x4f00
loop5:
        sub r2, r2, #1
        cmp r2, #1
        bne loop5

        mov r1, #1
        str r1, [r0, #SDRAMC_MR]
        ldr r3, =SDRAM_BASE
        str r1, [r3]

        mov r1, #2
        str r1, [r0, #SDRAMC_MR]
        str r1, [r3]
       
        mov r2, #8
loop6:
        mov r1, #4
        str r1, [r0, #SDRAMC_MR]
        str r1, [r3]
        sub r2, r2, #1
        bge loop6

        mov r1, #3
        str r1, [r0, #SDRAMC_MR]
        str r1, [r3]

        mov r1, #0
        str r1, [r0, #SDRAMC_MR]
        str r1, [r3]
       
        ldr r1, =1562
        str r1, [r0, #SDRAMC_TR]

@test the mem
        mov r1, #3
        str r1, [r3]
        ldr r2, [r3]
        cmp r2, r1
        bne hang

OnLed:
        ldr r0, =AT91SAM926X_PA_PIOC
        @ ds1 & pc29
        mov r1, #0x20000000
        str r1, [r0,#PIO_PER]
        str r1, [r0,#PIO_OER]
        str r1, [r0,#PIO_CODR]

hang:
        b        hang

论坛徽章:
0
发表于 2009-09-27 15:36 |显示全部楼层

回复 #1 conke 的帖子

问题已经解决,PIOD的16到31端口做为内存的数据输出端口,已经设置为A模式,但是没有设置相关端口的PIO_PDR寄存器,导致了错误,现在已经修改,接下来我会规范一下代码。

[ 本帖最后由 voidjackjiang 于 2009-9-27 15:41 编辑 ]
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP