电子说
本文主要是关于tms320c6000的相关介绍,并着重对tms320c6000系列dsp的flash启动设计进行了详尽的阐述。
TMS320C6000产品是美国TI公司于1997年推出的dsp芯片,该DSP芯片定点、浮点兼容,其中,定点系列是TMS320C62xx系列,浮点系列是TMS320C67xx系列,2000年3月,TI发布新的C64xx内核,主频为1.1GHz,处理速度9000MIPS,在图像处理和流媒体领域得到了广泛的应用。
C6000片内有8个并行的处理单元,分为相同的两组。DSP的体系结构采用超长指令字(vliw)结构,单指令字长为32位,指令包里有8条指令,总字长达到256位。执行指令的功能单元已经在编译时分配好,程序运行时通过专门的指令分配模块,可以将每个256为的指令包同时分配到8个处理单元,并有8个单元同时运行。芯片最高时钟频率为300MHz(67xx系列),且内部8个处理单元并行运行时,其最大处理能力可达到1600MIPS。
Flash是由macromedia公司推出的交互式矢量图和 Web 动画的标准,由Adobe公司收购。做Flash动画的人被称之为闪客。网页设计者使用 Flash 创作出既漂亮又可改变尺寸的导航界面以及其他奇特的效果。Flash的前身是Future Wave公司的Future Splash,是世界上第一个商用的二维矢量动画软件,用于设计和编辑Flash文档。1996年11月,美国Macromedia公司收购了Future Wave,并将其改名为Flash。后又于2005年12月3日被Adobe公司收购。Flash通常也指Macromedia Flash Player(现Adobe Flash Player)。2012年8月15日,Flash退出Android平台,正式告别移动端。2015年12月1日,Adobe将动画制作软件Flash professional CC2015升级并改名为Animate CC 2015.5,从此与Flash技术划清界限。
基本功能
Flash动画设计的三大基本功能是整个Flash动画设计知识体系中最重要、也是最基础的,包括:绘图和编辑图形、补间动画和遮罩。这是三个紧密相连的逻辑功能,并且这三个功能自Flash诞生以来就存在。
绘图
Flash包括多种绘图工具,它们在不同的绘制模式下工作。许多创建工作都开始于像矩形和椭圆这样的简单形状,因此能够熟练地绘制它们、修改它们的外观以及应用填充和笔触是很重要的。对于Flash提供的3种绘制模式,它们决定了“舞台”上的对象彼此之间如何交互,以及你能够怎样编辑它们。默认情况下,Flash使用合并绘制模式,但是你可以启用对象绘制模式,或者使用“基本矩形”或“基本椭圆”工具,以使用基本绘制模式。
编辑图形
绘图和编辑图形不但是创作Flash动画的基本功,也是进行多媒体创作的基本功。只有基本功扎实,才能在以后的学习和创作道路上一帆风顺;使用FlashProfessional8绘图和编辑图形——这是Flash动画创作的三大基本功的第一位;在绘图的过程中要学习怎样使用元件来组织图形元素,这也是Flash动画的一个巨大特点。Flash中的每幅图形都开始于一种形状。形状由两个部分组成:填充(fill)和笔触(stroke),前者是形状里面的部分,后者是形状的轮廓线。如果你总是可以记住这两个组成部分,就可以比较顺利地创建美观、复杂的画面。
补间动画
补间动画是整个Flash动画设计的核心,也是Flash动画的最大优点,它有动画补间和形状补间两种形式;用户学习Flash动画设计,最主要的就是学习“补间动画”设计;在应用影片剪辑元件和图形元件创作动画时,有一些细微的差别,你应该完整把握这些细微的差别。
Flash的补间动画有以下几种:
1.动作补间动画
动作补间动画是Flash中非常重要的动画表现形式之一,在Flash中制作动作补间动画的对象必须是“元件”或“组成”对象。
基本概念:在一个关键帧上放置一个元件,然后 在另一个关键帧上改变该元件的大小、颜色、位置、透明度等,Flash根据两者之间帧的值自动所创建的动画,被称为动作补间动画。
2.形状补间动画
所谓的形状补间动画,实际上是由一种对象变换成另一个对象,而该过程只需要用户提供两个分别包含变形前和变形后对象的关键帧,中间过程将由Flash自动完成。
基本概念:在一个关键帧中绘制一个形状,然后在另一个关键帧中更改该形状或绘制另一个形状,Flash根据两者之间帧的值或形状来创建的动画称为“形状补间动画”。形状补间动画可以实现两个图形之间颜色、形状、大小、位置的相互变化,其变形的灵活性介于逐帧动画和动作补间动画之间,使用的元素多为鼠标或压感笔绘制出的形状。
小提示:在创作形状补间动画的过程中,如果使用的元素是图形元件、按扭、文字,则必须先将其“分离”,然后才能创建形状补间动画。
3.逐帧动画
逐帧动画是一种常见的动画形式,它的原理是在“连续的关键帧”中分解动画动作,也就是每一帧中的内容不同,连续播放形成动画。
基本概念:在时间帧上逐帧绘制帧内容称为逐帧动画,由于是一帧一帧地画,所以逐帧动画具有非常大的灵活性,几乎可以表现任何想表现的内容。
在Flash中将JPG、PNG等格式的静态图片连续导入到Flash中,就会建立一段逐帧动画。也可以用鼠标或压感笔在场景中一帧帧地画出帧内容,还可以用文字作为帧中的元件,实现文字跳跃、旋转等特效。
4.遮罩动画
遮罩是Flash动画创作中所不可缺少的——这是Flash动画设计三大基本功能中重要的出彩点;使用遮罩配合补间动画,用户更可以创建更多丰富多彩的动画效果:图像切换、火焰背景文字、管中窥豹等都是实用性很强的动画。并且,从这些动画实例中,用户可以举一反三创建更多实用性更强的动画效果。遮罩的原理非常简单,但其实现的方式多种多样,特别是和补间动画以及影片剪辑元件结合起来,可以创建千变万化的形式,你应该对这些形式作个总结概括,从而使自己可以有的放矢,从容创建各种形式的动画效果。
在Flash作品中,常看到很多眩目神奇的效果,而其中部分作品就是利用“遮罩动画”的原理来制作的,如水波、万花筒、百叶窗、放大镜、望远镜等。
基本概念:在Flash中遮罩就是通过遮罩图层中的图形或者文字等对象,透出下面图层中的内容。在Flash动画中,“遮罩”主要有两种用途:一种是用在整个场景或一个特定区域,使场景外的对象或特定区域外外的对象不可见;另一种是用来遮罩住某一元件的一部分,从而实现一些特殊的效果。
被遮罩层中的对象只能透过遮罩层中的对象显现出来,被遮罩层可使用按扭、影片剪辑、图形、位图、文字、线条等。
5.引导层动画
基本概念:在Flash中,将一个或多个层链接到一个运动引导层,使一个或多个对象沿同一条路径运动的动画形式被称为“引导路径动画”。这种动画可以使一个或多个元件完成曲线或不规则运动。
在Flash中引导层是用来指示元件运行路径的,所以引导层中的内容可以是用钢笔、铅笔、线条、椭圆工具、矩形工具或画笔工具等绘制的线段,而被引导层中的对象是跟着引导线走的,可以使用影片剪辑、图形元件、按扭、文字等,但不能应用形状。
小提示:引导路径动画最基本的操作就是使一个运动动画附着在引导线上,所以操作时应特别注意引导线的两端,被引导的对象起始点,终止点的两个中心点一定要对准“引导线”的两个端头。
软件特性
1、Flash被大量应用于互联网网页的矢量动画设计。因为使用向量运算(VectorGraphics)的方式,产生出来的影片占用存储空间较小。
2、使用Flash创作出的影片有自己的特殊档案格式(SWF),该公司声称全世界97%的网络浏览器都内建Flash播放器(FlashPlayer)。
3、Flash是Macromedia提出的“富因特网应用”(RIA)概念的实现平台之一。
4、Flash可以把工作成果输出为exe 格式的文件,在没有安装Flash播放器的电脑上随意浏览。
随着数字信号处理器(DSP)技术的迅猛发展,其越来越广泛地应用于国民经济的各个领域中。其中,TI公司推出的TMS320C6000系列DSP器件更是在许多需要进行大量数字信号处理运算并兼顾高实时性要求的场合得以应用。TMS320C6000系列DSP的系统设计过程中,DSP器件的启动加载设计是较难解决的问题之一。
C6000系列DSP的启动加载方式包括不加载、主机加载和EMIF加载3种。
3种加载方式的比较:不加载方式仅限于存储器0地址不是必须映射到RAM空间的器件,否则在RAM空间初始化之前CPU会读取无效的代码而导致错误;主机加载方式则要求必须有一外部主机控制DSP的初始化,这将增加系统的成本和复杂度,在很多实际场合是难以实现的;EMIF加载方式的DSP与外部ROM/Flash接口较为自由,但片上Bootloader工具自动搬移的代码量有限(1 KB/64 KB)。本文主要讨论常用的EMIF加载方式。
1 EMIF加载分析
实际应用中,通常采用的是EMIF加载方式,把代码和数据表存放在外部的非易失性存储器里(常采用Flash器件)。
下面以TMS320C6000系列中最新的浮点CPU——TMS320C6713(简称“C6713”)为例,详细分析其EMIF加载的软硬件实现。
硬件方面,其与16位宽度的Flash器件的接口如图1所示。
对于不同的DSP器件,加载方式的配置引脚稍有不同。C6713的配置引脚及其定义如表1所列。
应用程序的大小决定了片上的Bootloadet工具是否足够把所有的代码都搬移到内部RAM里。对于C6713,片上的Bootloader工具只能将1 KB的代码搬入内部RAM。通常情况下,用户应用程序的大小都会超过这个限制。所以,需要在外部Flash的前1 KB范围内预先存放一小段程序,待片上Bootloader工具把此段代码搬移入内部并开始执行后,由这段代码实现将Flash中剩余的用户应用程序搬移入内部RAM中。此段代码可以被称作一个简单的二级Bootloader。
图2所示为使用二级Bootloader时的CPU运行流程。
使用二级Bootloader需要考虑以下几个事项:
◇需要烧写的COFF(公共目标文件格式)段的选择;
◇编写二级Bootloader;
◇将选择的COFF段烧入Flash。
一个COFF段就是占据一段连续存储空间的程序或数据块。COFF段分为3种类型:代码段、初始化数据段和未初始化数据段。
对于EMIF加载方式,需要加载的镜像由代码段(如.vectors和.text等)和初始化数据段(如.cinit,.const,.switch,.data等)构成。另外,可以单独定义一个.boot-load段存放二级Bootloader。此段也需要写入Flash。
所有未初始化的数据段(如.bss等)都不需要烧入到Flash中。
2 二级Bootloader的编写
由于执行二级Bootloader时C的运行环境还未建立起来,所以必须用汇编语言编写。二级Bootloader可参照其他类似文献及TI相关文档。此处不再赘述。
CCS中用户工程编译链接后产生的.map文件包含了存储器的详细分配信息。一个典型的map文件中包含的存储器分配信息如表2所列。
与cmd文件不同,map文件不仅包含了各段存储在哪一段内存空间的信息,从map文件中还可以具体知道每个内存区间中有多少被实际使用(烧写Flash时会用到这个参数)。内存区间中未被使用部分是不需要写入Flash内容的,实际被使用的部分才是真正需要写人到Flash中的内容。
3 Flash的烧写
把代码等写入Flash的办法大体上可分为以下几种:
① 使用通用烧写器写入。
② 使用CCS中自带的FlashBurn工具。
③ 用户自己编写烧写Flash的程序,由DSP将内存映像写入Flash。
其中,使用通用烧写器烧写需要将内存映像转换为二进制或十六进制格式的文件,而且要求Flash器件是可插拔封装的。这将导致器件的体积较大,给用户的设计带来不便。
使用TI公司提供的FlashBurn工具的好处在于使用较为直观。FlashBurn工具提供的图形界面可以方便地对Flash执行擦除、编程和查看内容等操作。但这种力法的缺点也不少:首先,FlashBurn工具运行时需要下载一个.out镜像(FBTC,FlashBurn Target Component)到DSP系统中,然后由上位PC机通过仿真器发送消息(指令和数据)给下位DSP,具体对Flash的操作由FBTC执行。然而,这个FBTC一般是针对TI公司提供的DSP专门编写的,与板上使用的Flash的接口宽度(默认是8位)、操作关键字(因生产厂商不同而各异)都有关,所以,对用户自己制作的硬件不一定适合。例如:如果用户自己的电路板上使用的是与DSK同品牌的Flash芯片,接口为16位数据宽度,那么,使用FlashBur’n工具烧写将最多只有一半的Flash容量能够被使用,要想正确实现]EMIF加载就必须选择8位加载方式。这就造成了Flash存储器资源的浪费,同时限制了用户开发的灵活性。
虽然TI公司提供了FBTC的源代码供有需要的用户修改,但这样用户需要去了解FBTC的运行机制及其与上位机的通信协议,并对Flash烧写函数进行修改。用户可能需要修改的几个地方如下:对Flash编程的关键字和地址,BurnFlash函数中的数据指针和EMIF口的配置(针对1.0版本FBTC)。这就给用户开发带来了不便。把开发时间浪费在了解一个并不算简单的Flash烧写工具上并不是一个好的选择。
其次,FlashBurn工具不能识别.out文件,只接受。.ex的十六进制文件,因此,需要将.out文件转换为.hex文件。这个转换的工具就是TI公司提供的Hex6x.exe工具。转换过程的同时,需要一个cmd文件(即图3中的Hex.cmd)指定作为输入的.out文件,输出的.hex文件的格式,板上Flash芯片的类型和大小,需要写入Flash中的COFF段名等。
使用用户自己编写的烧写Flash的程序较为灵活,避免了文件格式转换的繁琐。不过,此方法要求用户对自己使用的Flash芯片较为熟悉。
通常采用的Flash烧写程序是单独建立一个工程的办法:先把用户应用程序(包含二级Bootloader)编译生成的.out文件装载到目标DSP系统的RAM中,再把烧写Flash的工程编译生成的.out文件装载到目标DSP系统RAM的另一地址范围,执行Flash烧写程序,完成对Flash的烧写。这个办法要注意避免两次装载可能产生的地址覆盖,防止第2次装载修改了应该写入Flash的第1次装载的内容。
实际上,可以将Flash烧写程序嵌入到用户主程序代码中去,比单独建立一个烧写Flash的工程更为方便。Flash芯片的烧写程序段如下:
ProgramFlashArray函数的第1个参数是源地址指针(指向内部Ram),第2个参数是目标地址指针(指向外部Flash),第3个参数是要写入的数据长度(单位为字)。
编写Flash烧写函数时有3点需要注意:
① 指向Flash地址的指针。由于C6713的低两位地址用于译码作字节选择,地址总线的最低位是EA2,所以,逻辑地址需要适当的移位才能正确地指向日标。
对8位存储器而言,应该左移2位;对16位存储器而言,应该左移1位;对于32位存储器,则不需要移位。例如要从(往)Flash的0x00000003地址读(写)一个字,其逻辑地址应该是0x90000000+(0x0003<<1),而非0x90000003。
② map文件中各内存区间被实际占用的尺寸大小是以字节为单位的,而ProgramFlashArray函数写入Flash的数据单位为字,所以需要将map文件中得到的尺寸大小的一半作为ProgramFlashArray函数的参数。
③ 烧写函数中使用了flash_burned常量作为判断是否需要对Flash操作的依据,且将其初始化为1。这是为了避免Flash加载之后会执行对Flash的操作。此变量应在烧写Flash时手动修改为0。
在仿真加载方式下,可以在CCS里的watchwindow窗口手动修改flash_burned常量为0,强迫CPU进入对Flash编程的程序段。实验证明,在仿真加载方式下手动修改flash_burned并不影响写入到Flash中的flash_burn-ed的值(仍为1),所以,写入Flash的flash_burned的值仍然是1。在系统Flash加载之后,CPU就会跳过此段代码,实现正确运行。
关于tms320c6000的相关介绍就到这了,如有不足之处欢迎指正。
全部0条评论
快来发表一下你的评论吧 !