TMS320C6000 DSP系统的引导的设计和实现

出处:陆侃芸 宋 莹 季晓勇 发布于:2011-08-24 19:29:01

 

  在某型光电跟踪产品中,由于需要对抗各种人工干扰和背景干扰,使得导引系统需要处理的信息量成倍增加,对导引系统的实时处理性能提出了更高的要求。针对这种情况,导引系统采用了双DSP系统的信息处理方案,DSP选用AD公司的ADSP218x和TI公司的TMS320C62x.ADSP218x进行目标信号的采样和外围控制信号的输入、输出,TMS320C62x专门进行目标的鉴相、各种抗干扰算法的计算,这样TMS320C62x不受外设服务中断影响,可以更好地发挥计算效率,提高了导引系统的实时处理性能。下面针对TI的TMS320C6000系列DSP,介绍一种可行的系统引导解决方案,并以基于TMS320C6202(以下简称C6202)的图像处理系统的引导为例进行详细说明。

  1  系统引导设计

  1.1 各类自举模式的比较选择

  TI公司的TMS320C6000系列DSP有三类自举模式:主机(HPI)引导模式、不加载模式和ROM加载模式。

  在主机引导模式下,外部主机在DSP处于复位状态、硬件其他部分保持正常状态期间通过主机口将程序写入DSP的内部存储空间;然后将主机口控制寄存器中的DSPINT位设置为1,使DSP退出复位状态,开始执行0地址处指令。该模式下DSP无法自己完成初始化,需有一主机控制。所以主机引导模式不适用于一般的基于DSP的系统。

  在不加载模式下,C6000直接从0地址处执行程序指令,这时0地址处的存储器可以为SDRAM、SBSRAM、32位异步器件、DSP内部RAM空间的一个。显然,只有0地址为32位Flash(或ROM)时才能实现系统上电后的正常运行。然而,当前的Flash多为8位或者16位,所以至少需2片16位的Flash才能在该模式下实现系统的自引导,而用多片Flash就会增加系统的负担和成本。所以这个模式在C6000中也不是的。

  C6000整个外部程序空间分为CE0~CE3四个空间。在ROM加载模式下,DSP上电后首先通过DMA/EDMA将CE1空间的64KB(C6201/C6202/C6701)或1KB(C6211/C6711)数据复制到0地址处,然后开始执行地址0处的指令。该模式下CE1空间可以是8位、16位或32位ROM/Flash,EMIF会自动将相邻8/16位数据合成为32位的指令。所以采用这种加载方式的接口设计简单,DSP的EMIF可以与Flash实现无缝连接,而且只需一片Flash即可。

  纵观上述三种自举模式可知,ROM加载模式是方便有效的。然而当系统DSP运算较为复杂、运算量较大,程序空间大于64KB(C6201/C6202/C6701)或1KB(C6211/C6711)时,在上电后系统就无法把所有的程序放入DSP内存储,从而无法正确实现系统的自引导。另一方面,由于C6x0x系列的DSP采用哈佛结构,程序空间和数据空间完全分开,不能通用,而DSP0地址开始的64KB为程序空间,所以在64KB程序复制到0地址后数据常量空间也需要被导入数据空间,否则系统同样无法实现自引导。

  数字信号处理(Digital Signal Processing,简称DSP)是一门涉及许多学科而又广泛应用于许多领域的新兴学科。20世纪60年代以来,随着计算机和信息技术的飞速发展,数字信号处理技术应运而生并得到迅速的发展。数字信号处理是一种通过使用数学技巧执行转换或提取信息,来处理现实信号的方法,这些信号由数字序列表示。在过去的二十多年时间里,数字信号处理已经在通信等领域得到极为广泛的应用。德州仪器、Freescale等半导体厂商在这一领域拥有很强的实力。

  1.2 ROM加载模式下的系统引导设计

  ROM是只读内存(Read-Only Memory)的简称,是一种只能读出事先所存数据的固态半导体存储器。其特性是一旦储存资料就无法再将之改变或删除。通常用在不需经常变更资料的电子或电脑系统中,资料并且不会因为电源关闭而消失。ROM所存数据,一般是装入整机前事先写好的,整机工作过程中只能读出,而不像随机存储器那样能快速地、方便地加以改写。ROM所存数据稳定 ,断电后所存数据也不会改变;其结构较简单,读出较方便,因而常用于存储各种固定程序和数据。

  经过分析,在原来ROM加载模式基础上设计了如下的一种系统引导方式,从而解决了程序较大、数据空间不能初始化等问题。

  首先,自行编制一引导程序(称为loadprogram)。该程序可将存放于CE1空间内的系统目标程序和常量数据分别调入DSP程序和数据空间。loadprogram程序的起始地址为0,数据常量地址为CE1空间的某固定地址。之后,将loadprogram程序代码固化在CE1空间的首地址,其数据常量固化在loadprogram定义的CE1空间。

  如图1所示,在ROM加载时,DSP自动将CE1空间的loadprogram导入DSP0地址处,而数据常量也已经存在于loadprogram定义的数据空间中。这样在ROM加载结束后DSP自动运行0地址程序,即loadprogram程序,从而进行系统的第二次加载,即将系统目标程序和数据加载到DSP内,然后运行系统目标程序。这样就终实现了系统的正确引导。

 

  1.3 设计实现中的问题

  在实现这个系统自举设计中有二个需要注意的问题。

  (1)loadprogram和系统目标程序都是在DSP内部空间运行的,所以要合理分配二个程序在DSP内的程序空间和数据空间。系统目标程序在DSP内的存储空间不能和loadprogram的存储空间重合,否则在loadprogram的运行过程中,loadprogram内容会被改写,从而使整个系统引导的过程出错。

  (2)loadprogram和系统目标程序以及它们的一些数据常量都要固化在Flash/ROM内,所以必须得到它们的程序和数据代码,并且合理安排它们在Flash/ROM的排放,终方便有效地实现系统的引导。

  2  实  例

  本实例用TMS320C6202来实现视频图像的编码。系统的自引导主要由C6202和256KB的16位Flash(SST39VF400A)实现。

  2.1 系统目标程序

  系统的编码程序由汇编和C语言编写实现,经过编译得到目标执行文件program.out,它由表1所示各段组成。其中。vector和。text段为程序代码段;.cinit为C编译后产生的变量初值表,在程序开始的时候系统会将。cinit中的初值写入C中定义的各需要赋初值的变量空间中;.const和。data分别为C和汇编中的常量段;其他各段为系统的变量、堆栈等无需初值的数据段。所以loadprogram就是要将。vector、。text、。cinit、。const、。data写入相应的DSP内部空间中。

 

  目标程序要做的就是把执行文件program.out转化为代码,烧写入Flash,以防被loadprogram读取写入DSP内。这里,首先用hex6x.exe将program.out转化为16进制文件,然后利用自编的程序对其进行整理,得到3个队列:

  short pg[]={0xA02A,0x01DD,……};   /*程序代码队列,包括程序和数据代码*/

  unsigned int addarray[]={0x0,0x0d00,0x80003968,0x80004310,0x8001a358};

  /*代码地址队列*/

  int sectlen[]={512,56288,176,5666,64};    /*代码长度队列,各起始地址开始的代码长度*/

  也就是说,pg[]由地址分别为addarray[0]、addarray[1]、addarray[2]、addarray[3]、addarray[4],长度分别为sectlen[0]、sectlen[1]、sectlen[2]、sectlen[3]、sectlen[4]的五段代码组成。

  将pg[]烧入Flash内的空间。

  2.2 loadprogram程序

  如上所述,loadprogram就是要将上述五个代码段写入相应的addarray[0]、addarray[1]、addarray[2]、addarray[3]、addarray[4]地址中。由于C6202的程序空间只能通过DMA方式访问,所以采用DMA方式进行系统程序的引导。关键代码如下:

  

  整个loadprogram编译后的组成如表2所示。

 

  同目标程序一样,也可以得到pg[]、addarray[]、sectlen[]三个队列。

  2.3 Flash与DSP的空间分配

  flash的英文解释为:n.闪光,闪现,一瞬间,闪现,反射,使迅速传便,vt.使闪光,反射 adj.闪光的,火速的。Flash也是由macromedia公司推出的交互式矢量图和 Web 动画的标准,由Adobe公司收购。网页设计者使用 Flash 创作出既漂亮又可改变尺寸的导航界面以及其他奇特的效果。Flash也是存储芯片的一种,通过特定的程序可以修改里面的数据。另有星际争霸选手李永浩以Flash为名。

  如图2所示,图中标号1表示loadprogram程序内容,标号2表示目标程序内容。由于Flash即CE1空间的64KB代码将会直接加载到DSP内运行,所以loadprogram在Flash和DSP内的地址是一一对应的,而loadprogram的

  .cinit空间始终是CE1多余的某部分空间。这样就避免了ROM加载后。cinit空间没有被初始化而导致系统出错的问题。

  系统目标程序的代码是由loadprogram读入的。只要在loadprogram中明确目标代码的位置和长度,就可以正确地把Flash内的代码导入。所以把目标程序代码的4个段连续放在Flash内的固定地址。

 

  从DSP内存空间分配图中可以发现,loadprogram和目标程序的中断矢量表。vector是重叠的,但这并不影响自举功能的实现。DSP上电后loadprogram(包括其vector1程序)被拷贝到DSP内,然后DSP运行0地址程序,也就是vector1首句程序--跳转指令,跳转到loadprogram起始地址开始运行。loadprogram运行时会将program的vector2程序覆盖到原0地址开始的vector1.由于loadprogram已不再用到原vector1,所以覆盖并不影响整个boot过程,这进一步方便了程序设计。而二个程序的。text段(见表1、表2及图2)是完全不重复的,这种分配保证了。text1运行完之前不会被。text2覆盖而导致程序出错。

  根据Flash的分配方案,把二个程序的代码烧入Flash内,设置好控制DSP的自举模式的五个管脚BOOTMODE[4:0],这里设为10101,即ROM加载模式、16位Flash,就可以正确地实现系统的自引导了。

 


  
关键词:DSPDSP系统

版权与免责声明

凡本网注明“出处:维库电子市场网”的所有作品,版权均属于维库电子市场网,转载请必须注明维库电子市场网,https://www.dzsc.com,违反者本网将追究相关法律责任。

本网转载并注明自其它出处的作品,目的在于传递更多信息,并不代表本网赞同其观点或证实其内容的真实性,不承担此类作品侵权行为的直接责任及连带责任。其他媒体、网站或个人从本网转载时,必须保留本网注明的作品出处,并自负版权等法律责任。

如涉及作品内容、版权等问题,请在作品发表之日起一周内与本网联系,否则视为放弃相关权利。

上传BOM文件: BOM文件
*公司名:
*联系人:
*手机号码:
QQ:
应用领域:

有效期:
OEM清单文件: OEM清单文件
*公司名:
*联系人:
*手机号码:
QQ:
有效期:

扫码下载APP,
一键连接广大的电子世界。

在线人工客服

买家服务:
卖家服务:

0571-85317607

客服在线时间周一至周五
9:00-17:30

关注官方微信号,
第一时间获取资讯。

建议反馈

联系人:

联系方式:

按住滑块,拖拽到最右边
>>
感谢您向阿库提出的宝贵意见,您的参与是维库提升服务的动力!意见一经采纳,将有感恩红包奉上哦!