| TI公司的仿真器同SEED仿真器的区别? 1)SEED-XDS同TI的XDS-510完全兼容,可以完全替代XDS-510。 2)SEED-XDSPP同TI的XDS-510PP完全兼容,可以完全替代XDS-510PP。 3)SEED-XDSUSB和SEED-XDSPCI是合众达独创的产品,它们具有SEED-XDS的全部功能,更加便于使用。 4)SEED仿真器的JTAG/MPSD仿真电缆不同于TI,无需另外投资,可以方便更换。 5)SEED的仿真器同TI的仿真器一样,可以仿真所有TI的DSP和ARM。 DSP仿真器为什么必须连接目标系统(Target)? DSP的仿真器同单片机的不同,仿真器中没有DSP,提供IEEE标准的JTAG口对DSP进行仿真调试,所以仿真器必须有仿真对象,及目标系统。目标系统就是你的产品,上面必须有DSP。仿真器提供JTAG同目标系统的DSP相接,通过DSP实现对整个目标系统的调试。 SEED-XDS仿真器安装的常见问题? 请认真阅读“安装手册”。常见问题是硬件的I/O口地址同主机的声卡或网卡有冲突,你可以改变仿真器的I/O口地址,也可以改变声卡或网卡的I/O口地址 中断向量为什么要重定位? 为了方便DSP存储器的配置,一般DSP的中断向量可以重新定位,即可以通过设置寄存器放在存储器空间的任何地方。 注意:C2000的中断向量不能重定位。 DSP的最高主频能从芯片型号中获得吗? TI的DSP最高主频可以从芯片的型号中获得,但每一个系列不一定相同。 1)TMS320C2000系列: TMS320F206-最高主频20MHz。 TMS320C203/C206-最高主频40MHz。 TMS320F24x-最高主频20MHz。 TMS320LF24xx-最高主频30MHz。 TMS320LF24xxA-最高主频40MHz。 TMS320LF28xx-最高主频150MHz。 2)TMS320C3x系列: TMS320C30:最高主频25MHz。 TMS320C31PQL80:最高主频40MHz。 TMS320C32PCM60:最高主频30MHz。 TMS320VC33PGE150:最高主频75MHz。 3)TMS320C5000系列: TMS320VC54xx:最高主频160MHz。 TMS320VC55xx:最高主频300MHz。 4)TMS320C6000系列: TMS320C62xx:最高主频300MHz。 TMS320C67xx:最高主频230MHz。 TMS320C64xx:最高主频720MHz。 如何选择DSP? 选择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及相关器件"中有介绍。 DSP同MCU相比的特点? 1)DSP的速度比MCU快,主频较高。 2)DSP适合于数据处理,数据处理的指令效率较高。 3)DSP均为16位以上的处理器,不适合于低档的场合。 4)DSP可以同时处理的事件较多,系统级成本有可能较低。 5)DSP的灵活性较好,大多数算法都可以软件实现。 6)DSP的集成度较高,可靠性较好。 DSP同嵌入CPU相比的特点? 1)DSP是单片机,构成系统简单。 2)DSP的速度快。 3)DSP的成本较低。 4)DSP的性能高,可以处理较多的任务。 如何编写C2000片内Flash? 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的网页上有相关资料。 并行FLASH引导的一点经验-阿哲 最近BBS上关于FLASH和BOOT的讨论很活跃,我也多次来此请教。前几天自制的DSP板引导成功,早就打算写写这方面的东西。我用的DSP是5416,以其为核心,做了一个相对独立的子系统(硬件、软件、算法),目前都已基本做好。下面把在FLASH引导方面做的工作向大家汇报一下,希望能对大家有所帮助。本人经验和文笔都有限,写的不好请大家谅解。 硬件环境: DSP:TMS320VC5416PGE160 FLASH:SST39VF400A-70-4C-EK 都是贴片的,FLASH映射在DSP数据空间的0x8000-0xFFFF 软件环境: CCS v2.12.01 主程序(要烧入FLASH的程序): DEBUG版,程序占用空间0x28000-0x2FFFF(片内SARAM),中断向量表在0x0080-0x00FF(片内DARAM),数据空间使用0x0100-0x7FFF(片内DARAM)。因为FLASH是贴片的,所以需要自己编一个数据搬移程序,把要主程序搬移到FLASH中。在写入FLASH数据时,还应写入引导表的格式数据。最后在数据空间的0xFFFF处写入引导表的起始地址(这里为0x8000)。 搬移程序: DEBUG版,程序空间0x38000-0x3FFFF(片内SARAM),中断向量表在0x7800-0x78FF(片内DARAM),数据空间使用0x5000-0x77FF(片内DARAM)。搬移程序不能使用与主程序的程序空间和中断向量表重合的物理空间,以免覆盖。 烧写时,同时打开主程序和搬移程序的PROJECT,先LOAD主程序,再LOAD搬移程序,然后执行搬移程序,烧写OK! 附:搬移程序(仅供参考) volatile unsigned int *pTemp=(unsigned int *)0x7e00; unsigned int iFlashAddr; int iLoop; /* 在引导表头存放并行引导关键字 */ iFlashAddr=0x8000; WriteFlash(iFlashAddr,0x10aa); iFlashAddr++; /* 初始化SWWSR值 */ WriteFlash(iFlashAddr,0x7e00); iFlashAddr++; /* 初始化BSCR值 */ WriteFlash(iFlashAddr,0x8006); iFlashAddr++; /* 程序执行的入口地址 */ WriteFlash(iFlashAddr,0x0002); iFlashAddr++; WriteFlash(iFlashAddr,0x8085); iFlashAddr++; /* 程序长度 */ WriteFlash(iFlashAddr,0x7f00); iFlashAddr++; /* 程序要装载到的地址 */ WriteFlash(iFlashAddr,0x0002); iFlashAddr++; WriteFlash(iFlashAddr,0x8000); iFlashAddr++; for (iLoop=0;iLoop<0x7f00;iLoop++) { /* 从程序空间读数据,放到暂存单元 */ asm(" pshm al"); asm(" pshm ah"); asm(" rsbx cpl"); asm(" ld #00fch,dp"); asm(" stm #0000h, ah"); asm(" MVDM _iLoop, al"); asm(" add #2800h,4,a"); asm(" reada 0h"); asm(" popm ah"); asm(" popm al"); asm(" ssbx cpl"); /* 把暂存单元内容写入FLASH */ WriteFlash(iFlashAddr,*pTemp); iFlashAddr++; } /* 中断向量表长度 */ WriteFlash(iFlashAddr,0x0080); iFlashAddr++; /* 中断向量表装载地址 */ WriteFlash(iFlashAddr,0x0000); iFlashAddr++; WriteFlash(iFlashAddr,0x0080); iFlashAddr++; for (iLoop=0;iLoop<0x0080;iLoop++) { /* 从程序空间读数据,放到暂存单元 */ asm(" pshm al"); asm(" pshm ah"); asm(" rsbx cpl"); asm(" ld #00fch,dp"); asm(" stm #0000h, ah"); asm(" MVDM _iLoop, al"); asm(" add #0080h,0,a"); asm(" reada 0h"); asm(" popm ah"); asm(" popm al"); asm(" ssbx cpl"); /* 把暂存单元内容写入FLASH */ WriteFlash(iFlashAddr,*pTemp); iFlashAddr++; } /* 写入引导表结束标志 */ WriteFlash(iFlashAddr,0x0000); iFlashAddr++; WriteFlash(iFlashAddr,0x0000); /* 在数据空间的0xFFFF写入引导表起始地址 */ iFlashAddr=0xffff; WriteFlash(iFlashAddr,0x8000); |