本文只要是关于TMS320C6000的相关介绍,并着重对TMS320C6000和DSP的编程实现进行了详尽的阐述。
DSP
现代社会对数据通信需求正向多样化、个人化方向发展。而无线数据通信作为向社会公众迅速、准确、安全、灵活、高效地提供数据交流的有力手段,其市场需求也日益迫切。正是在这种情况下,3G、4G通信才会不断地被推出,但是无论是3G还是4G,未来通信都将离不开DSP技术(数字信号处理器),DSP作为一种功能强大的特种微处理器,主要应用在数据、语音、视像信号的高速数学运算和实时处理方面,可以说DSP将在未来通信领域中起着举足轻重的作用。
为了确保未来的通信能在各种环境下自由高效地工作,这就要求组成未来通信的DSP要具有非常高的处理信号的运算速度,才能实现各种繁杂的计算、解压缩和编译码。而目前DSP按照功能的侧重点不一样,可以分为定点DSP和浮点DSP,定点DSP以成本低见长,浮点DSP以速度快见长。如果单一地使用一种类型的DSP,未来通信的潜能就不能得到最大程度的发挥。为了能将定点与浮点的优势集于一身,突破DSP技术上的瓶颈,人们又推出了一种高级多重处理结构--VLIW结构,该结构可以在不提高时钟速度的情况下,实现很强的数字信号处理能力,而且它能同时具备定点DSP和浮点DSP所有的优点。为了能推出一系列更高档的新技术平台,人们又开始注重DSP的内核技术的开发,因为DSP的内核就相当于计算机的CPU一样,被誉为DSP的心脏,大量的算法和操作都得通过它来完成,因此该内核结构的质量如何,将会直接影响整个DSP芯片的性能、功耗和成本。
考虑到未来无线访问Internet因特网和开展多媒体业务的需要,现在美国的Sun公司又开始准备准将该公司的拳头产品--PersonalJava语言嵌入到DSP中,以便能进一步提高DSP在处理信号方面的自动化程度和智能化程度。当然,在以前DSP中也潜入了其他软件语言,例如高级C语言,但这种语言在处理网络资源以及多媒体信息方面无能为力;而PersonalJava是一种适合个人网络连接和应用的Java环境,基于该环境的个人通信系统可以从网络和Internet网上下载数据和图像。此外,人们还在研究开发符合MPEG-4无线解压缩标准DSP,该压缩标准将为未来通信传输各种多媒体信息提供了依据。
作为一个案例研究,我们来考虑数字领域里最通常的功能:滤波。简单地说,滤波就是对信号进行处理,以改善其特性。例如,滤波可以从信号里清除噪声或静电干扰,从而改善其信噪比。为什么要用微处理器,而不是模拟器件来对信号做滤波呢?我们来看看其优越性:模拟滤波器(或者更一般地说,模拟电路)的性能要取决于温度等环境因素。而数字滤波器则基本上不受环境的影响。数字滤波易于在非常小的宽容度内进行复制,因为其性能并不取决于性能已偏离正常值的器件的组合。一个模拟滤波器一旦制造出来,其特性(例如通带频率范围)是不容易改变的。使用微处理器来实现数字滤波器,就可以通过对其重新编程来改变滤波的特性。
TMS320C6000
TI高速信号处理器TMS320C5X和TMS320C6X需要从外部的存储器(ROM或FLASH)中引导应用程序这是开发中的重点和难点之一,关系到系统的可靠性和处理速度。以TMS320C6000 DSP为例,介绍了应用程序的三种引导方式;以实际工程为背景详细叙述了从ROM中引导程序的实现方法,并钟对其中重要的命令文件和用户引导程序,给出了相应的示例文件和程序。 关键词:TMS320C6000 DSP CMD 引导1 TMS320C6000 DSP硬件结构概述TMS320C6000是TI公司生产的TMS320系列产品中新一代高性能的DSP芯片,适用于高速数字信号处理。TMS320C6000主要由三个部分组成:CPU内核、外设和存储器。CPU中8个功能单元可以并行工作,这些功能单元被分成类似的两组,每组由4个基本功能单元组成。CPU有两组寄存器,每组寄存器由16个32位寄存器组成。由于在运行期间不做硬件数据相关性检查,所以程序运行时可以同时执行8条指令,极大地提高了芯片处理速度,这使得该系列的芯片在电子测量、测控、图像、雷达、声纳和软件无线电等领域得到了广泛的应用。
2 加电后DSP的运行过程系统加电后,RESET信号为低,芯片复位。在RESET信号上升沿处,锁存BOOTMODE[4:0]信号,借以决定芯片的存储器映射方式、地址0处的存储器类型以及复位后芯片的自举模式,复位结束后,芯片从存储器的0地址开始执行指令。TMS320C6000器件可以设置成三种自举方式,其加载过程分别叙述如下:(1)不加载。CPU直接从存储器的0地址处开始执行指令。如果系统中使用的是SDRAM,那么CPU会先挂起,直到SDRAM的初始化完成。TMS320C621X/C671X不具有这类方式。(2)ROM加载。位于外部空间的ROM中的程序首先通过DMA/EDMA搬入地址0处。尽管加载过程是在芯片外部被复位信号释放以后才开始的,但是当芯片仍处于内部复位保持时,就开始了上述的传输过程了。用户可以指定外部ROM的存储宽度,EMIF会自动将相邻的8bit/16bit数据合并成32bit。ROM中的程序必须以little endian的格式存储。
TMS320C6000 DSP的编程实现
开发DSP系统应用板,最终要脱离仿真器而独立运行,这时就需要一个能在断电后保存程序及初始化数据的存储器。系统上电时,由引导程序将DSP的应用程序从该存储器引导到DSP应用板上的高速存储器(如内部SRAM,SDRAM等)中。由于FLASH具有电信号删除功能?且删除速度快,集成度高,因而已成为此种存储器的首选。
将用户程序代码写入FLASH的方法有两种:第一种是用专门的FLASH编程器实现,第二种是通过系统微处理器与FLASH的接口来实现。第一种方法的主要优点是使用方便可靠,但要求FLASH只能是双列直插等一些可插拔的封装形式,由于芯片制造工艺的提高,芯片的集成度越来越高,FLASH正向小型化、贴片式发展,从而使表面贴装或PLCC封装的FLASH难以利用编程器编程。第二种方法克服了第一种方法的缺点,且使用灵活,因而在DSP系统中的应用日益广泛。
由于FLASH的存取速度较慢,写入FLASH的程序将在系统上电时被DSP装载到快速的存储器中运行,这个过程称为boot loader。不同的DSP有不同的引导方式,本文将以TMS320C6713为例来介绍TMS320C6000系列的boot loader方式。
1 FLASH的工作方式及在系统编程
目前,市场上的FLASH型号很多,但工作方式大体相同,下面以AM29LV160D为例进行介绍。
1.1 AM29LV160D FLASH存储器简介
AM29LV160D是AMD公司生产的2M×8bit/1M×16bit FLASH存储器,它的数据宽度为8位、16位可选,采用3.3V供电,完全兼容JEDEC标准,并支持在系统编程,用户只需向其内部的命令寄存器写入命令序列即可实现部分擦除、全部擦除、数据写入等功能;同时可提供硬件和软件方法来检查FLASH的操作执行情况。
图1
1.2 编程方法
对FLASH的在系统编程就是通过一定的编程命令序列来控制FLASH的工作方式,这些命令序列是一些特定字符的组合,只要向FLASH中的特定寄存器以特定的顺序输入这些字符即可进入相应的编程模式。AM29LV160D中的主要命令序列和写入地址如图1所示。具体说明如下:
●复位命令序列:对FLASH中任一地址写入“F0”,即可实现复位。
● 自动选择模式:此模式主要用于编程器编程时,由编程器根据从数据线DQ7~DQ0读出的识别码自动配置编程逻辑,当然也可以通过命令序列在在系统情况下将自动选择码读出。
●编程命令序列:程序可以以字节方式或字方式写入,这主要根据FLASH外部引脚BYTE的状态而定。
●芯片擦除命令序列:FLASH编程时应先执行擦除命令,这是因为编程指令只能将数据由1变为0,反之则不行。
● 扇区擦除命令序列:为了编程方便及保护有用数据,数据擦除可以只擦除某些无用的扇区。
● 擦除暂停和恢复命令序列:这个命令序列只在进行扇区擦除时有效,它允许编程者中断一个扇区的擦除操作,接着从没有被擦除的扇区读出或写入数据。
●写入命令:也分为字节模式和字模式,分别对应FLASH的8位和16位工作方式,具体为哪种模式,可由FLASH的BYTE脚的输入来决定,低电平为字节模式,高电平为字模式。
在对FLASH进行编程时,FLASH提供硬件和软件机制来获得FLASH的状态,以确定数据写入或擦除操作是否完成。硬件方法主要是利用FLASH的外部引脚RY/BY的输出信号在命令序列的最后一个写脉冲(WE)的上升沿之后有效。当该输出为低电平时,表示FLASH正在编程或擦除中,而当该输出脚为高电平时,即表示编程或擦除已完成。将此引脚与TMS320C671x系列DSP的ARDY引脚相连,即可实现硬件的自动编程或擦除的完成判断。C6000系列DSP与FLASH的连线图如图2所示。
软件方法是利用从FLASH数据线读取的数据来判断FLASH的状态,读取数据中的主要判断位为DQ2、DQ3、DQ5、DQ6和DQ7,它们之间的相互组合提供了几种软件判断状态的方法,应用较多且较为简便的方法是在命令序列写入后,如果写入的是编程命令,则选择一个地址,并循环读取这个地址的数据。若装置仍处于编程状态之中,DQ7输出为写入数据的补码,而在编程完成后,DQ7输出的是所选地址上的正确数据。如果写入的是擦除命令,那么?当装置处于擦除状态时,则DQ7输出为0,若擦除完成或擦除被中断?DQ7输出为1。选择地址时应注意:若地址所在区域属于FLASH中的保护区域,则DQ7输出的FLASH状态信息有效,有效时间只能持续大约1μs,然后输出正确数据。而擦除命令擦除的范围如果包括FLASH中的保护区域,那么命令将被忽略,此时DQ7输出状态信息有效,持续时间大约100μs。对FLASH的操作有时会出错,出错时,FLASH将处于不正常状态,DQ7可能永远也不会输出地址上的正确数据,此时就需读取DQ5的输出信息,若为1则表示操作失败。其软件流程图如图3所示。
对FLASH的编程既可以用汇编语言,也可以用C语言,以下给出部分C代码。该程序代码可采用TI公司专门用于TI公司系列DSP编程的Code Com-poser Studio 编程工具进行编写。
void erase_flash(short * flash_ptr)
{
short * ctrl_addr1=(short *)((int)flash_ptr+(0x555<<2));
/*此处0x555地址左移两位,按16位存储器来看,本来只需左移一位,但在计算式中?地址flash_ptr是先转换成int型再计算的,而要写入命令的地址0x555为16位地址,所以需乘2,因此应当再左移一位*/
short * ctrl_addr2=(short *)((int)flash_ptr+(0x2aa<<2));?
* ctrl_ addr1=0x00aa;
* ctrl_addr2=0x0055;
* ctrl_addr1=0x0080;
* ctrl_addr1=0x00aa;
* ctrl_addr2=0x0055;
* ctrl_addr1=0x0010;
}
void program_flash(short * source_ptr?short * flash ptr,short length)
{
short i?
short * ctrl_addr1=(short *)((int)flash_ptr+(0x555<<2));??
short * ctrl_addr2=(short *)((int)flash_ptr+0x2aa<<2));?
for(i=0;i<length;i++)
{
* ctrl_addr1=0x00aa;
* ctrl_addr2=0x0055;
* ctrl_addr1=0x00a0;
* flash_ptr++=*source_ptr?
}
}
在上面的程序中,对FLASH的命令序列的写入地址有一个左移指令,即若应写入命令的寄存器地址为0x555,实际编程时,应先对0x555左移若干位,然后再对得到的地址写入命令。这是因为,TMS320C6000系列DSP为32位DSP,它的外部地址总线引脚的最低位(LSB)为EA2,即输出地址的最低位为实际地址的第2位,而不会输出第1位和第0位,但实际外接的FLASH可以是8位、16位、32位不等。如果连接非32位存储器,在读数据时?DSP的外部存储器接口(EMIF)会自动将实际地址左移若干位,以使外部地址总线引脚的最低位EA2根据FLASH位数的不同输出实际地址的第0位或第1位,然后再将几次读入的数据合成一个32位的值(外接FLASH的位数可以在EMIF寄存器中设置),而在写数据时,就需要编程者手动进行移位,具体方法是?外接8位存储器时左移2位,外接16位存储器时左移1位。
2 用FLASH实现DSP的程序自引导
TMS320C6000系列DSP包括多个型号,各个型号的程序自引导方法一致,下面以TMS320C6713为例来介绍程序自引导的实现过程。
2.1 TMS320C6713DSP简介
TMS320C6713是TI公司推出的TMS320C67xx系列浮点DSP中最新的一种芯片。TMS320C6713每周期可以执行8条32位指令;支持32/64位数据;具有最高225MHz、4.4ns指令周期的运行速度和1800MIPS或1350MFLOPS的处理能力;同时是有强大的外设支持能力;外部存储器接口(EMIF)可以很方便地和SDRAM、SBSRAM、FLASH、SRAM等同步和异步存储器相连,16位HPI接口可以和各种处理器?如PC、POWERPC等?接口;另外还有优化的多通道缓存串口和多通道音频串口(仅TMS320C6713),这些外部接口使设计人员可以很容易实现自己的应用系统。
2.2 TMS320C6713程序自引导功能的实现
断电时用慢速ROM或FLASH存储程序和初始化数据,上电后引导到内部或外部快速RAM中运行是现在普遍采用的一种设计DSP电路板的方法,该方法可靠、方便、灵活且成本较低。但对于不同的DSP有不同的程序自引导方法。本文只讨论TMS320C6000系列DSP的引导方法。
和以往TI公司的DSP(如3x、4x)采用引导表由固化在DSP内部的引导程序实现程序的自引导不同,TMS320C6000系列DSP采用的是一种新的引导方法,对于TMS320C6713,上电后,若选择从EMIF引导程序,则DSP自动将位于地址空间CE1(0x90000000~0x9FFFFFFF)开头的1kB代码传输到地址空间0处。它的数据传输采用默认时序,用户可以选择外部程序存储器的宽度(8位/16位/32位),然后由EMIF自动将几次读入的数据合成32位数据。传输由DSP中的EDMA通道以单帧的形式自动进行,传输完成后,程序从地址0处开始运行。因此,要在TMS320C671x中实现基于FLASH的自引导功能,必须将FLASH配置在DSP的CE1地址空间中。
以上工作均由DSP自动完成。很明显,自动传输的代码并不能满足绝大多数编程者对代码长度的要求,因此可在这段代码中加入数据传输功能,从而将实际工作中远大于1kB的代码由FLASH中读入到用户指定的存储空间,然后再将程序跳到实际有用的代码处运行。对FLASH编程并实现程序自引导的具体过程如下:
(1)对DSP正常运行程序的处理
Code Composer Studio(CCS)是TI公司开发的用于DSP产品的软件开发工具。由CCS得到的代码为目标文件格式(COFF),这种格式文件不能直接写入FLASH,而要先用其它语言(如C)编写文件,然后由转换工具进行转化。
在COFF格式下,程序被分成很多段(包括程序段、初始化数据段、未初始化数据段、自定义段等),每段都占据连续的存储空间,段与段之间相互独立。另外,在COFF文件中,除了段内的用户程序和数据外,还包含一些额外的信息,其中有COFF文件的版本、段的数量、段的长度和起始地址等,分析清楚这些信息,就可以编写自己的文件转换工具了。具体方法是:读入COFF文件,根据格式分析该文件的内容,再把用户程序和数据部分提取出来,仍分成一个个段,并在每个段前加入起始位置和段长度信息,同时在最后一个段的末尾加上结束标志,最后写入一个新的文件。在此过程中,因为COFF文件的字长为32bit,而FLASH宽度可能为8bit或16bit,因而要在两者之间进行手工转化。
(2)编写boot程序
boot程序的大小不能超过1kB,它主要完成以下几个功能:第一是配置DSP的EMIF寄存器,然后从FLASH中把各个段中的程序和数据拷贝到用户指定的存储器物理地址中,同时跳到程序的入口点。在此应当注意:C程序的入口点并非main(),而是c_int00,这是因为在调用main()函数之前,系统必须先建立C语言的运行环境。如为系统堆栈定义.stack段、建立初始化堆栈和祯指针、初始化全局和静态变量等。另外,由于boot程序本身也是COFF文件格式,所以也需格式转换。
(3)编写FLASH烧写程序
FLASH的烧写程序可以根据前面的介绍来编写,但要注意,应将boot程序写入CE1空间开始的1kB中,而将DSP正常工作程序写入1kB以后的地址空间中。
3 结束语
本文介绍了FLASH在系统编程和基于FLASH实现TMS320C6713 DSP程序自引导的过程。实际上,TMS320C6000系列DSP中其它类型(如C6201、C6701等)的boot也与本文所述相同,因此,完全可以相互借鉴。
结语
关于TMS320C6000的相关介绍就到这了,如有不足之处欢迎指正。
评论
查看更多