3G技术和internate的发展,要求处理器的速度越来越高,体积越来越小,DSP的发展正好能满足这一发展的要求。因为,传统的其它处理器都有不同的缺陷。MCU的速度较慢;CPU体积较大,功耗较高;嵌入CPU的成本较高。 DSP的发展,使得在许多速度要求较高,算法较复杂的场合,取代MCU或其它处理器,而成本有可能更低。
选择DSP可以根据以下几方面决定:
1)速度: DSP速度一般用MIPS或FLOPS表示,即百万次/秒钟。根据您对处理速度的要求选择适合的器件。一般选择处理速度不要过高,速度高的DSP,系统实现也较困难。
2)精度: DSP芯片分为定点、浮点处理器,对于运算精度要求很高的处理,可选择浮点处理器。定点处理器也可完成浮点运算,但精度和速度会有影响。
3)寻址空间: 不同系列DSP程序、数据、I/O空间大小不一,与普通MCU不同,DSP在一个指令周期内能完成多个操作,所以DSP的指令效率很高,程序空间一般不会有问题,关键是数据空间是否满足。数据空间的大小可以通过DMA的帮助,借助程序空间扩大。
4)成本: 一般定点DSP的成本会比浮点DSP的要低,速度也较快。要获得低成本的DSP系统,尽量用定点算法,用定点DSP。
5)实现方便: 浮点DSP的结构实现DSP系统较容易,不用考虑寻址空间的问题,指令对C语言支持的效率也较高。
6)内部部件:根据应用要求,选择具有特殊部件的DSP。如:C2000适合于电机控制;OMAP适合于多媒体等。
要了解DSP芯片的性能,本网中的"DSP及相关器件"中有介绍。
1) DSP的速度比MCU快,主频较高。
2)DSP适合于数据处理,数据处理的指令效率较高。
3)DSP均为16位以上的处理器,不适合于低档的场合。
4)DSP可以同时处理的事件较多,系统级成本有可能较低。
5)DSP的灵活性较好,大多数算法都可以软件实现。
6)DSP的集成度较高,可靠性较好。
1) DSP是单片机,构成系统简单。 2)DSP的速度快。 3)DSP的成本较低。 4)DSP的性能高,可以处理较多的任务。
DSP中的Flash的编写方法有三中:
1.通过仿真器编写:在我们的网页上有相关的软件,在销售仿真器时我们也提供相关软件。其中 LF240x的编写可以在CCS中加入一个插件,F24x的编写需要在windows98下的DOS窗中进行。具体步骤见软件中的readme。有几点需要注意: a.必须为MC方式; b.F206的工作频率必须为20MHz; c.F240需要根据PLL修改C240_CFG.I文件。建议外部时钟为20MHz。 d.LF240x也需要根据PLL修改文件。 d.如果编写有问题,可以用BFLWx.BAT修复。
2.提供串口编写:TI的网页上有相关软件。注意只能编写一次,因为编写程序会破坏串口通信程序。
3.在你的程序中编写:TI的网页上有相关资料。
DSP的外部Flash编写方法:
1.通过编程器编写:将OUT文件通过HEX转换程序转换为编程器可以接受的格式,再由编程器编写。
2.通过DSP软件编写:您需要根据Flash的说明,编写Flash的编写程序,将应用程序和编写Flash的程序分别load到RAM中,运行编写程序编写。
对于C5000,片内的BOOT程序在上电后将数据区的内容,搬移到程序区的RAM中,因此FLASH必须在RESET后放在数据区。由于C5000,数据区的空间有限,一次BOOT的程序不能对于48K。解决的方法如下:
1.在RESET后,将FLASH译码在数据区,RAM放在程序区,片内BOOT程序将程序BOOT到RAM中。
2.用户初试化程序发出一个I/O命令(如XF),将FLASH译码到程序区的高地址。开放数据区用于其它的RAM。
3.用户初试化程序中包括第二次BOOT程序(此程序必须用户自己编写),将FLASH中没有BOOT的其它代码搬移到RAM中。
4.开始运行用户处理程序。
对于一般的存储器具有RD、WR和CS等控制信号,许多DSP(C3x、C5000)都没有控制信号直接连接存储器,一般采用的方式如下:
1.CS有地址线和PS、DS或STRB译码产生;
2./RD=/STRB+/R/W; 3./WR=/STRB+R/W。
GEL文件的功能同emuinit.cmd的功能基本相同,用于初始化DSP。但它的功能比emuinit的功能有所增强,GEL在CCS下有一个菜单,可以根据DSP的对象不同,设置不同的初始化程序。以TMS320LF2407为例:
#define SCSR1 0x7018 ;定义scsr1寄存器
#define SCSR2 0X7019 ;定义scsr2寄存器
#define WDKEY 0x7025 ;定义wdkey寄存器
#define WDNTR 0x7029 ;定义wdntr寄存器
StartUp() ; 开始函数
{
GEL_MapReset(); ; 存储空间复位GEL_MapAdd(0x0000,0,0x7fff,1,1); 定义程序空间从0000-7fff 可读写
GEL_MapAdd(0x8000,0,0x7000,1,1); 定义程序空间从8000-f000 可读写
GEL_MapAdd(0x0000,1,0x10000,1,1); 定义数据空间从0000-10000可读写
GEL_MapAdd(0xffff,2,1,1,1); 定义i/o空间0xffff可读写
GEL_MapOn(); 存储空间打开
GEL_MemoryFill(0xffff,2,1,0x40); 在i/o空间添入数值40h
*(int *)SCSR1=0x0200; 给scsr1寄存器赋值
*(int *)SCSR2=0x000C; 给scsr2寄存器赋值,在这里可以进行mp/mc方式的转换
*(int *)WDNTR=0x006f; 给wdntr寄存器赋值
*(int *)WDKEY=0x055; 给wdkey寄存器赋值
*(int *)WDKEY=0x0AA; 给wdkey寄存器赋值
} |