O 引言
美国德州仪器(TI)公司的数字信号处理器( DSP )以其处理速度快,功能强大,易于使用,且有开发软件支撑等优点而广泛应用于通信、电子、自动控制等领域。一个完整的DSP系统应当由硬件和软件两部分组成。在硬件(主要是DSP芯片)相同时,系统的性能将主要取决于软件部分的效率。而在相同的硬件平台上,不同程序员编写的软件效率相差很大,软件效率已成为影响DSP系统性能的一个重要因素。要充分发挥D-SP芯片的性能,就必须编写高效率的程序。一般在DSP进行运算时,有些操作会频繁出现(如卷积、FFT、FIR滤波等),完成这些操作的程序的效率直接影响整个软件部分的效率。为此,TI公司提供了一系列库函数(TI DSP Library,以下简称DSP Lib)来完成这些操作。这些库函数既可减少程序员的工作量,又可提高程序效率,因此,在程序开发中,合理地使用这些库函数,将大大提高系统性能。
1 TI DSP Library简介
1.1 TI DSP Library的特点
DSP Lib的核心实际上是一系列经过手工优化的汇编程序代码,这些代码封装在后缀名为.lib的文件中,可用于完成各种运算。它们对外是不可见的。这些程序(库函数,routines)可被C程序调用。由于经过了手工优化,它们的效率都非常高。由于不同系列DSP芯片的指令集不同,因此,不同系列DSP芯片的DSP Lib也是不同的,如TMS320C5000的DSP LIb就不能用于TMS320C6000。但是,各个系列DSP Lib的基本组成是相同的,一个完整的DSP Lib通常由Lib文件夹、include文件夹和其它辅助文件组成。其中lib文件夹用于存放*.lib文件,其内部封装着手工优化的汇编程序代码,是一个DSP Lib的核心部分。有的DSP Lib还有*.SRC文件,这些*.src文件主要是用C语言和汇编语言编写的程序源代码。使用归档器可从中提取出这些源代码;而include文件夹用于存放各个库函数的头文件,通常这些文件分为C程序头文件和汇编程序头文件两部分。
1.2 TI DSP Library的下载和安装
由于DSP Lib种类繁多,且属可选模块,通常的DSP开发环境( CCS ,Code Composer Studio)并没有配备DSP Lib。因此,使用一个DSP Lib之前,必须进行DSP Lib的下载和安装。
所谓下载,就是在TI公司网站WWW.ti.com上免费下载各种DSP Lib;而所谓安装,就是在DSP Lib下载完毕后,双击安装文件,以将它安装在计算机中选定的位置(默认位置为C:\ti)。安装之后,即可在程序开发中使用DSP Lib的库函数。
1.3 TI DSP Library的使用
按处理数据类型的不同,TI DSP分为定点(fixed-point)DSP和浮点(floating-point)DSP。由于浮点DSP既有定点指令集,又有浮点指令集,因此,本文选取浮点DSP系列 TMS320C67x 的DSP Lib,并且选取了TMS320C67x DSP Library和TMS320C67x FastRTS Library两个DSP Lib,前者主要针对数字信号处理的常用操作,后者则针对一般数学运算的通用操作。
2 TMS320C67x DSP Library的应用
当DSP进行数据处理时,卷积、FFT、FIR滤波等操作频繁出现,故在程序开发中,使用DSP Lib来完成这些操作将大大提高整个程序的效率并简化编程。TMS320C67x DSP Library就是这样的一个DSP Lib,它的lib文件夹内含库文件dsp67x.lib和源文件dsp67x.sr、dsp67x_C.sr-c、dsp67x_sa.src。TMS320C67x DSP Library主要用于TMS320C67x系列DSP芯片的程序开发,使用它可完成FFT运算。
2.1 TMS320C67x DSP Library的使用
使用TMS320C67x DSP Library的第一步是将其核心文件“dsp67x.lib”加入到当前工程中,相关编译链接参数为“-ldsp67x.lib”;接着,将存储头文件的include目录所在路径添加到工程搜索路径中,其相关编译链接参数为“-i pathname”,具体操作可参考TI公司的有关文献。选取该DSP Lib中的库函数“DSPF_sp_cfftr2_dit()”可完成FFT运算,它使用的是基2的时间抽取算法,具体形式如下:
同时,该库函数还有一个对应的头文件“dspf_sp_cfftr2_dit.h”,使用时可将其包含到调用该库函数的程序中。此时,该库函数就可以像一般子程序一样被其他程序调用,具体使用代码如下:
为了便于比较,可使用归档器指令“ar6x”从该DSP Lib的源文件“dsp67x_c.src”中提取出库函数的源代码,以得到文件“sp_cfftr2_ dit.c”。所有归档器指令的命令文件都存储在CCS的安装目录下,这里,“ar6x”的使用格式为:
ar6x-x dsp67x_c.src sp_cfftr2_dit.c
从“sp_cfftr2_dit.c”中可得到库函数“DSPF_sp_cfftr2_dit()”的C语言源代码,相应的C程序为“void sp_cfftr2_dit(float*x,float*w,short n)”,该程序可以像一般子程序一样被主程序调用。源函数和库函数的形式完全相同。实际上,库函数就是对源函数的程序代码进行手工优化的结果。