原创作品,转载请注明原作者及地址!
by 飞鸿惊雪
http://blog.csdn.net/niyufeng
1 Learning ADSP-TS201系列--重要参考
2 Learning ADSP-TS201系列--EZ-KIT Lite评估板硬件资源
3 Learning ADSP-TS201系列--Flag Pins按键和LED灯
4 Learning ADSP-TS201系列--Interrupt Pin
评估板中,两片DSP共享2chips x 4M x 32bit的32MB SDRAM:
SDRAM:0x4000 0000 - 0x407f ffff,总共8M字大小的空间,数据总线配置成32bit,则有32MB大小。
Flash: 0x3000 0000 - 0x3007 ffff, 512KB。
可以通过指针的方式直接指定物理地址来使用SDRAM!
使用SDRAM时SYSCON,SDRCON两个寄存器要设置
/* * 初始化SDRAM * 主要设置SYSCON and SDRCON两个寄存器 * SYSCON = 0x0018 9067 * SDRCON = 0x0000 5983 * *SDRAM地址32MB: 0x4000 0000 - 0x407F FFFF * */
写个简单的程序,先往SDRAM中写些数据,然后读取,测试下SDRAM。
#include <stdio.h> #include <string.h> #include <builtins.h> #include <sysreg.h> #include <defts201.h> /*----------- Init SDRAM ------------*/ #define __defined_init_sdram() do{ \ __builtin_sysreg_write(__SYSCON, SYSCON_MP_WID64 | \ SYSCON_MEM_WID64 | \ SYSCON_MSH_PIPE2 | \ SYSCON_MSH_WT0 | \ SYSCON_MSH_IDLE | \ SYSCON_MS1_PIPE1 | \ SYSCON_MS1_WT0 | \ SYSCON_MS1_IDLE | \ SYSCON_MS0_SLOW | \ SYSCON_MS0_WT3 | \ SYSCON_MS0_IDLE); \ \ __builtin_sysreg_write(__SDRCON, SDRCON_INIT | \ SDRCON_RAS2PC5 | \ SDRCON_PC2RAS2 | \ SDRCON_REF3700 | \ SDRCON_PG256 | \ SDRCON_CLAT2 | \ SDRCON_ENBL); } while(0) void main(void) { /* * 初始化SDRAM * 主要设置SYSCON and SDRCON两个寄存器 * SYSCON = 0x0018 9067 * SDRCON = 0x0000 5983 * *SDRAM地址32MB: 0x4000 0000 - 0x407F FFFF * */ __defined_init_sdram(); memset((void *)0x40000000, 0, 0x800000);//初始化,全部清零 char *dest=(char *)0x40000000; strcpy(dest, "OK, Hello TS201 !"); printf("\n%s\n%s\n", dest, dest+4); while(1) __builtin_idle(); }
运行到初始化SDRAM全部清零之后,可以看到从0x4000 0000开始的存储空间都全部清零:
然后,往0x4000 0000首地址里写入"OK, Hello TS201 !" 字符串,可以看到0x4000 0000开始的存储空间内容发生了变化(好像一个字符使用了一个world??):
最后printf输出在终端: