TMS320C67x DSP Library在程序开发中的应用

发布者:行者无疆1978最新更新时间:2010-11-19 来源: 国外电子元器件关键字:Library  DSP  CCS  库函数  源函数 手机看文章 扫描二维码
随时随地手机看文章

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)”,该程序可以像一般子程序一样被主程序调用。源函数和库函数的形式完全相同。实际上,库函数就是对源函数的程序代码进行手工优化的结果。

2.2 性能分析

    分别使用库函数和源函数可完成FFT运算。并可用CCS自带的剖析工具“Profiler”来分析两个函数由于编程方式的不同所带来的运行时间上的差异。改变输入数组的长度,可得到如表1所列的一组数据。由表1可以看出,库函数的效率远远高于源函数,其效率的提高量随着输入数据长度的变化而变化,最高的效率可提高40倍(40.98-1=39.98),最低仍在25倍左右,而且该DSP Lib的其他库函数也有相近的测试结果。虽然用该DSP Lib的库函数后,程序效率可以提高一个数量级,对于时间限制较为严格的系统,特别是实时系统,这仍然是非常有用的。

    库函数和源函数相比,其效率有了很大提高,但这种提高是有代价的。它主要表现为通用性降低。其原因是为了最大限度的提高效率,在对代码进行手工优化的过程中,引入了一些强假设,同时,使用了大量的操作合并、并行处理等简化手段,这必然导致库函数的通用性降低。例如,库函数“DSPF_sp_cfftr2_dit()”使用时就会受到以下条件的限制:

    (1)输入数组的长度必须是2的幂级数,且不得小于32;
    (2)输入数组x和旋转因子数组w必须按双字对齐方式存储,即数组起始地址的末3位必须是零;
    (3)数据的存储格式必须是小端模式(Little Endian);
    (4)执行期间可接收中断,但不予响应,这可能导致一些实时事件得不到及时响应。


    如果使用“DSPF_sp_cfftr2_dit()”时不考虑到这些限制,就有可能导致程序运行异常。因此,库函数的效率虽然高,但不能盲目的滥用,在程序开发时,必须根据实际情况在通用性和效率之间进行折衷,以合理的使用库函数。

3 TMS320C67x Fast RTS Library的应用

    在DSP进行数据处理时,除了一些典型的操作外,还存在大量常规的操作,如除法操作、对数运算、三角函数等,这些操作也是很费时的,提高这些操作的代码效率,也能显著提高整个软件的效率。TMS320C67x FastRTS Library就是这样的一个DSP Lib,它通常由Lib文件夹、include文件夹和doc文件夹组成。其中lib文件夹内含库文件fastrts67x.lib(Little Endian)、fastrts67xe.lib(Big Endian)和源文件fastrts67x.src;include文件夹内含头文件fastrts67x.h和recip.h;而doc文件夹内含帮助文件。

3.1 TMS320C67x FastRTS Library的使用

    TMS320C67x FastRTS Library(以下简称FastRTS Library)主要用于处理一些常规的操作。由于在通常情况下,CCS已经有一个RTSLib-rary来完成这些操作(例如,“rts6700.lib”就是一个适用于TMS320C67x的RTS Library文件),因此,如果要使用FastRTS Library,就必须在编译链接过程中先于“rts6700.lib”来编译链接“fastrts67x.lib(或fastrts67xe.lib)”,相应的编译链接命令选项为:

    -l fastrts67x.lib - rts6700.lib或 -l fastrts67xe.lib - rts6700.lib
    FastRTS Library同样需要注意头文件的使用,它有两个头文件: “fastrts67x.h”和“recip.h”。如果使用FastRTS Library中的特殊函数(三角函数,对数函数等),则必须包含“fastrts67x.h”;而如果使用求倒数操作,则必须包含“recip.h”。FastRTS Library的使用方式如下:

3.2 性能分析

    分别使用FastRTS Library和RTS Library可完成一些常用操作,使用剖析工具可得到各个操作所需的时钟周期个数,具体如表2所列(所有的操作均处理单精度浮点数)。对比表2中的数据可以发现,和RTS Library相比,FastRTS Library大大提高了程序的效率。

4 DSP Lib的编写

    事实上,程序员并非只能被动的使用DSP Lib。只要遵循相应的规则,程序员也可以自己编写一个DSP Lib。编写一个最简单的DSP Lib的步骤如下:

    (1)新建一个工程newLibrary,将其属性设为“Library(.lib)”,图l所示是新工程设置示意图;


    (2)编写高效率代码文件myLibl.asm、myLib2.asm、myLib3.asm,……
    (3)将myLibl.asm、myLib2.asm、myLib3.asm,……等文件添加到工程new Library中;
    (4)编译链接工程new Library;

    完成上面4步后,工程中就会出现库文件newLibrary.lib,这样,一个DSP Lib就制作成功了。为了使DSP Lib具有保密性,通常情况下,只需保留工程中的newLibrary.lib文件,而将其他文件,特别是源代码文件*.asm删除或保密存放。这样,用户就只能使用库文件,而无法从中得到源代码的信息。

5 结束语

    本文以TMS320C67x DSP Library和TMS320C67x FastRTS Library为例,详细介绍了如何在程序开发中使用TI DSP Library,并分析了使用TI DSP Library所带来的程序效率的提高。最后,还给出了编写TI DSP Library的一个应用实例。

关键字:Library  DSP  CCS  库函数  源函数 引用地址:TMS320C67x DSP Library在程序开发中的应用

上一篇:一种基于FPGA的太阳跟踪器的设计及实现
下一篇:Microsemi发布65nm嵌入式快闪平台

推荐阅读最新更新时间:2024-05-02 21:12

基于TMS320F2812便携式动态信号分析仪
   1 引言   动态信号分析仪在电子测量领域中称为频域中的“射频万用表”,可见其重要性和宽泛应用。动态信号分析是将时域信号转化为频域进行处理,一般要求使用时窗技术,如快速傅氏变换(FFT)、离散傅氏变换(DFT)等。如果采样点为N,直接DFT运算需要N2次乘法操作,需用大量运算时间。而FFT运算可将运算减少到(N/2)log2N次乘法,因此,FFT成为动态信号分析的核心算法。   这里提出一种基于TMS320F2812的便携式动态信号分析仪设计方案,以数字信号处理为基础,利用数字信号处理器强大的数据处理能力分析所采集的信号,优化动态信号的FFT算法.从而实现对各频率成份和功率谱的计算分析以及失真度的测量,其分析结果在液晶显
[嵌入式]
以单一DSP控制多重三相逆变器
  多数新型电机控制方案均利用数字信号处理器(DSP)为电机的矢量控制提供所需的计算能力。由于矢量控制需要相当强大的处理能力和外围资源,因而迄今为止的设计经验仍主张每台逆变器和电机都拥有专门隶属于自己的DSP控制器。最近,DSP的处理能力和外围资源已提升到足以轻松控制两台电机的程度,甚至还有潜力处理更多电机。采用单一DSP控制器控制两套三相逆变器的初步实践已经表明此举可行,样板中包括实现双永磁同步电机(PMSM)驱动的完整系统及DSP接口。   使用单一DSP控制两台永磁同步电机(PMSM)的硬件实验装置包括两台电机,两块逆变板以及一块单一的D S P 开发板(TMS320F280eZdsp)。   由标量控制升级到矢量控
[应用]
基于DSP 内嵌ECAN模块的总线接口设计
  0 引言   CAN 总线以其可靠、实时、低成本优势已在汽车、机械等工业控制领域广泛应用。TMS320F2812是TI公司最具代表性的低成本、低功耗和高性能的定点DSP芯片,具有强大的事件管理能力和嵌入式控制能力。其内嵌的增强型CAN 总线控制器(ECAN)模块,完全兼容CAN 2.0B 协议,邮箱数量增加至32 个,并增加了时间戳、消息过滤和超时发送功能,提高了应用CAN通信的灵活性。   ADM3053是ADI公司2011年推出一款集成信号和电源隔离功能的CAN 收发器。本文采用集成ECAN 模块的TMS320F2812 和ADM3053 来设计CAN 节点。该设计将内嵌ECAN模块的DSP作为节点主控制器,同时采
[嵌入式]
采用集成DSP与微处理器内核的嵌入式应用
  嵌入式应用包括信号处理算法与控制算法,在多种实时嵌入式系统中,这两种算法共同执行必需的功能,因此我们应了解控制算法与数字信号处理器 (DSP) 算法是如何实现互操作性的。在手机和 MP3 播放器等应用中,要解决上述互操作性问题,传统做法是分别用 RISC 处理器和DSP来处理控制算法与信号处理算法。例如,在手机中,信号处理功能负责处理音视频应用中的回声消除与编解码工作。由于DSP 架构是专门设计用于执行信号处理算法的,因此信号处理算法在 DSP 上的 运行效率很高;而手机中的控制软件则负责执行状态机,即控制用户界面、键盘及其它非信号处理功能。   开发包括信号处理与控制算法且要求这两种算法间实现互操作性的嵌入式应用时,我们要面
[嵌入式]
STM32 关于外部中断线、中断和中断服务函数的问题
中断线问题: 上图可以看出,PA0、PB0...PG0共用的EXTI0中断线,PA1、PB2...PG1共用的EXTI1中断线,也就是 编程里面的(如下图库文件),对应16个中断线,后面三个是专用的中断线,不做讨论。 有人要问,假设:我设置的引脚是PB9和PE9都开启外部中断怎么办?小编告诉你,这还真办不了,我实测过。配置函数的时候后覆盖之前的函数的(如下图所示) 如果这样配置的话,会出现出货光电1的初始化覆盖掉编码盘的初始化,说白了就是编码盘的设置被覆盖掉了,结果是外部中断 出货光电1管脚会触发而编码盘就不起作用了,这也是STM32其中一个问题所在吧! 反过来,结果是外部中断 编码盘 管脚会触发
[单片机]
STM32 关于外部中断线、中断<font color='red'>源</font>和中断服务<font color='red'>函数</font>的问题
百万像素摄像机芯片技术解析
  早在2008年高清视频监控已被业界提出,并一度成为关注的热点,但由于当时的技术、成本和实际的客户需求等多种原因高清视频监控的市场实际上并未真正启动。然而从现在来看,高清视频监控不再停留在口号上,各个厂商开始把它作为重点产品技术发展方向,也同样作为市场推广的重点。天地伟业同样把握了行业的趋势,集成尖端科技的同时结合成熟项目应用推出了应用于各个行业领域的高清视频监控解决方案。具有高清化、网络化和智能化三种特征相结合的新一代视频监控技术作为现代化安防技术的典型代表,正在获得越来越多的关注和实际应用,它将逐步取代传统的视频监控技术,在社会面治安监控系统中发挥不可替代的作用。   面对越来越大的市场,需求量的提升会带来更高性能和功能
[嵌入式]
基于GIO/FVID的F2812DSP的视频处理系统
  随着时代的发展,DSP技术在视频处理系统、可视电话、工业检测等视频处理领域得到了广泛的应用,对于不同的视频处理系统,会使用不同的视频设备,所以有必要为视频没备设计驱动程序,为高层应用程序提供统一的接口来操作底层硬件。只要是遵循此驱动程序接口标准开发的高层应用程序,都可以在具有相同接口的不同硬件平台上运行,具有很好的通用性和可移植性。同时高层应用程序设计人员只要会使用设备驱动程序提供的API接口,就不必了解底层硬件的具体实现,可以大大提高整个视频系统的开发效率。   对于视频设备,TI公司也提出了对应的视频设备驱动程序模型,但这些模型主要是针对6000系列高端DSP,甚至是DM64X这样的视频处理专用DSP设计的。而TMS3
[电源管理]
基于GIO/FVID的F2812<font color='red'>DSP</font>的视频处理系统
DSP56F805 PWM模块输出高频正弦波
针对Motorola DSP56F805的PWM模块中不能产生高频正弦波的缺点,根据SPWM原理,由直接面积等效法,计算出对应脉冲的起始点和终点,然后编程实现,经调试发现调制出的正弦波具有良好的特性。 DSP56F805是一种专门用来控制电机的微处理器,内部具有各种功能模块,例如,A/D转换模块、PWM模块、定时器模块等,为开发基于DSP的系统提供了很大便利。针对开发系统,Motorola为我们提供了相应的软件开发工具CodeWarrior及SDK,使得我们开发基于Motorola DSP的系统更加方便快捷。 1 问题的描述 Motorola的嵌入式SDK(Software Development Kit)是一个API、
[应用]
小广播
最新嵌入式文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved