1、关于存储器外扩的问题(只针对2407)
2407本身有32K的FLASH程序存储器、2K的SARAM(可用作数据或程序存储器)、544字节的DARAM(分为B0、B1、B2三块)。可以通过PS、DS和RD/WE线进行程序和数据存储器的扩展,读写信号由DSP产生。
2、地址空间的分配
程序:
0x0000-0x7FFF 片上flash空间
0x8000-0x87FF 映射2K的SARAM
0x8800-0xFDFF 外部程序存储器
0xFE00-0xFEFF 保留(CNF=1),外部(CNF=0)
0xFF00-0xFFFF 映射B0(CNF=1),外部(CNF=0)
数据:
0x0000-0x005F 存储器映射寄存器和保留
0x0060-0x007F B2
0x0080-0x00FF 非法
0x0100-0x01FF 保留
0x0200-0x02FF B0
0x0300-0x03FF B1
0x0400-0x04FF 保留
0x0500-0x07FF 非法
0x0800-0x0FFF 2K的SARAM
0x1000-0x6FFF 非法
0x7000-0x743F 外设帧1和2
0x7440-0x74FF 非法
0x7500-0x753F 外设帧3
0x7540-0x77EF 非法
0x77F0-0x77F3 代码安全密码
0x77F4-0x77FF 保留
0x7800-0x7FFF 非法
0x8000-0xFFFF 外部
基于以上空间分配可知:0x8800-0xFDFF(0xFFFF)为外部程序存储器空间地址,0x8000-0xFFFF为外部数据存储器空间地址。当 用PS和DS做为外扩RAM的选通信号时,具体是访问程序空间还是数据空间,是由DSP产生相应的PS、DS信号来区分的。
DSP是由MP/MC引脚来决定是访问内部程序存储器还是外部程序存储器,MP/MC=1访问外部程序存储器空间,MP/MC=0访问内部程序存储器空 间。因为,外扩的程序存储器是RAM(易失性的),所以只能用于仿真,如果用户要脱机运行,则应把程序烧写到片上flash空间 0x0000-0x7FFF。如果用户的程序大于32K,内部flash空间是不够用的,则应扩展外部flash或者其他非易失性的存储器。
3、CMD文件的编写
-stack 160
-o ex.out
-m ex.map
/*Main.obj Define.obj */
-l rts2xx.lib
MEMORY
{
PAGE 0: VECS: origin = 0x8000, length = 0x040
PROG: origin = 0x8800, length = 0x6000
PAGE 1:
MMRS: origin = 0h , length = 05Fh /* MMRS */
B2 : origin = 0060h , length = 020h /* DARAM B2 块 */
B0 : origin = 0200h , length = 100h /* DARAM B0 块 */
B1 : origin = 0300h , length = 100h /* DARAM B1 块 */
SARAM: origin = 0800h , length = 0800h /* SARAM 块 */
EXT: origin = 8000h , length = 8000h /* 外部存储器 */
}
SECTIONS
{
.vectors : {} >VECS PAGE 0 /* 中断向量表 */
.text : {} >PROG PAGE 0 /* 可执行代码和字符串 */
.cinit : {} >PROG PAGE 0 /* C 程序初始化变量和常数表*/
.data : {} >SARAM PAGE 1 /* 初始化变量和常数表 */
.bss : {} >SARAM PAGE 1 /* 保留全局变量和静态变量空间 */
.const : {} >SARAM PAGE 1 /* 字符串和switch表 */
.switch : {} >PROG PAGE 0 /* 包含.switch语句建立的表格 */
.stack : {} >B1 PAGE 1 /* 为系统堆栈分配存储器 */
.system : {} >SARAM PAGE 1 /* 为动态存储器函数分配存储器空间 */
2407本身有32K的FLASH程序存储器、2K的SARAM(可用作数据或程序存储器)、544字节的DARAM(分为B0、B1、B2三块)。可以通过PS、DS和RD/WE线进行程序和数据存储器的扩展,读写信号由DSP产生。
2、地址空间的分配
程序:
0x0000-0x7FFF 片上flash空间
0x8000-0x87FF 映射2K的SARAM
0x8800-0xFDFF 外部程序存储器
0xFE00-0xFEFF 保留(CNF=1),外部(CNF=0)
0xFF00-0xFFFF 映射B0(CNF=1),外部(CNF=0)
数据:
0x0000-0x005F 存储器映射寄存器和保留
0x0060-0x007F B2
0x0080-0x00FF 非法
0x0100-0x01FF 保留
0x0200-0x02FF B0
0x0300-0x03FF B1
0x0400-0x04FF 保留
0x0500-0x07FF 非法
0x0800-0x0FFF 2K的SARAM
0x1000-0x6FFF 非法
0x7000-0x743F 外设帧1和2
0x7440-0x74FF 非法
0x7500-0x753F 外设帧3
0x7540-0x77EF 非法
0x77F0-0x77F3 代码安全密码
0x77F4-0x77FF 保留
0x7800-0x7FFF 非法
0x8000-0xFFFF 外部
基于以上空间分配可知:0x8800-0xFDFF(0xFFFF)为外部程序存储器空间地址,0x8000-0xFFFF为外部数据存储器空间地址。当 用PS和DS做为外扩RAM的选通信号时,具体是访问程序空间还是数据空间,是由DSP产生相应的PS、DS信号来区分的。
DSP是由MP/MC引脚来决定是访问内部程序存储器还是外部程序存储器,MP/MC=1访问外部程序存储器空间,MP/MC=0访问内部程序存储器空 间。因为,外扩的程序存储器是RAM(易失性的),所以只能用于仿真,如果用户要脱机运行,则应把程序烧写到片上flash空间 0x0000-0x7FFF。如果用户的程序大于32K,内部flash空间是不够用的,则应扩展外部flash或者其他非易失性的存储器。
3、CMD文件的编写
-stack 160
-o ex.out
-m ex.map
/*Main.obj Define.obj */
-l rts2xx.lib
MEMORY
{
PAGE 0: VECS: origin = 0x8000, length = 0x040
PROG: origin = 0x8800, length = 0x6000
PAGE 1:
MMRS: origin = 0h , length = 05Fh /* MMRS */
B2 : origin = 0060h , length = 020h /* DARAM B2 块 */
B0 : origin = 0200h , length = 100h /* DARAM B0 块 */
B1 : origin = 0300h , length = 100h /* DARAM B1 块 */
SARAM: origin = 0800h , length = 0800h /* SARAM 块 */
EXT: origin = 8000h , length = 8000h /* 外部存储器 */
}
SECTIONS
{
.vectors : {} >VECS PAGE 0 /* 中断向量表 */
.text : {} >PROG PAGE 0 /* 可执行代码和字符串 */
.cinit : {} >PROG PAGE 0 /* C 程序初始化变量和常数表*/
.data : {} >SARAM PAGE 1 /* 初始化变量和常数表 */
.bss : {} >SARAM PAGE 1 /* 保留全局变量和静态变量空间 */
.const : {} >SARAM PAGE 1 /* 字符串和switch表 */
.switch : {} >PROG PAGE 0 /* 包含.switch语句建立的表格 */
.stack : {} >B1 PAGE 1 /* 为系统堆栈分配存储器 */
.system : {} >SARAM PAGE 1 /* 为动态存储器函数分配存储器空间 */