原创作品,转载请注明原作者及地址!
by 飞鸿惊雪
Learning ADSP-TS201系列--索引
2 Learning ADSP-TS201系列--EZ-KIT Lite评估板硬件资源
3 Learning ADSP-TS201系列--Flag Pins按键和LED灯
4 Learning ADSP-TS201系列--Interrupt Pin
Learning ADSP-TS201系列--SDRAM存储器
评估板中,两片DSP共享2chips x 4M x 32bit的32MB SDRAM:
1 存储空间分配
SDRAM:0x4000 0000 - 0x407f ffff,总共8M字大小的空间,数据总线配置成32bit,则有32MB大小。
Flash: 0x3000 0000 - 0x3007 ffff, 512KB。
可以通过指针的方式直接指定物理地址来使用SDRAM!
2 SDRAM设置
使用SDRAM时SYSCON,SDRCON两个寄存器要设置
/*
* 初始化SDRAM
* 主要设置SYSCON and SDRCON两个寄存器
* SYSCON = 0x0018 9067
* SDRCON = 0x0000 5983
*
*SDRAM地址32MB: 0x4000 0000 - 0x407F FFFF
*
*/
3 编程实验
写个简单的程序,先往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输出在终端: