关于sdram的使用
Mini2440 使用了两片外接的 32M bytes 总共 64M bytes 的 SDRAM 芯片(型号为:
HY57V561620FTP),一般称之为内存,它们并接在一起形成 32-bit 的总线数据宽度。
对sdram的使用主要是对它的13个寄存器的初始化https://static.assets-stash.eet-china.com/album/old-resources/2009/5/22/e7e68883-98ed-4fbe-a0e5-9e5ea72535c7.rar
所有的源码都打包了。
在我试验的过程中出了点问题。
就是关于sdram的初始化下面是出错的源码中的一段:
/****************************/
memsetup:
mov r1, #MEM_CTL_BASE
ldr r2, mem_cfg_val
add r3, r1, #52
1:
ldr r4, [r2], #4
str r4,[r2], #4
cmp r1, r3
bne 1b
mov pc, lr
/**********************/
说明一下我在编译时的链接地址是0x30000000.
后来我将红色字体的那一行改成:adrl r2, mem_cfg_val
重新编译,下载,运行正常了。
我回头再看了书,说说我对这样修改的解释
adr和adrl是arm的两条汇编伪指令,他们的寻址是相对pc的,这时还是运行在steppingstone中的。所以r2中的内容是对sdram初始化的数据起始地址。
如果使用ldr,它起到绝对地址的跳转。这时r2中的内容指向sdram中sdram初始化数据的起始地址。而这时还没完成对sdram的初始化,所以就不能完成对sdram的初始化。
在Makefile文件中我使用了优化选项 -O2,这使得运行的速度明显的加快。
文章评论(0条评论)
登录后参与讨论