当前位置:首页 > 嵌入式 > 嵌入式教程
[导读]基于MATLAB 的DSP 应用程序调试方法

本文结合具体例证,介绍基于MATLAB 的DSP 应用程序调试方法。

MATLAB 具有强大的分析、计算和可视化功能,利用MATLAB 提供的数十个专业工具箱,可以方便、灵活地实现对自动控制、信号处理、通信系统等的算法分析和仿真,是算法设计人员和工程技术人员必不可少的软件工具。
    数字信号处理器(DSP)作为一种可编程专用芯片,是数字信号处理理论实用化过程的重要技术工具,在语音处理、图像处理等技术领域得到了广泛的应用。但对于算法设计人员来讲,利用汇编语言或C 语言进行DSP 功能开发,对于具有周期长、效率低的缺点,不利于算法验证和产品的快速开发。
    由MathWorks 公司和TI 公司联合开发的MATLAB Link for CCS Development Tools(简称CCSLink)是MATLAB6.5 版本(Release13)中增加的一个全新的工具箱,它提供了MATLAB、CCS 和DSP 目标板的接口,利用此工具可以像操作MATLAB变量一样来操作DSP 器件的存储器和寄存器,使开发人员在MATLAB 环境下完成对DSP 的操作,从而极大地提高DSP 应用系统的开发进程。

1 CCSLink 初步
    CCSLink 工具通过双向连接将MATLAB、CCS 和DSP 目标板联系起来,允许开发者利用MATLAB 强大的可视化、数据处理和分析函数对来自CCS 的数据进行分析和处理,极大地简化TI 公司DSP 软件的分析、调试和验证过程。三者关系如图1示。
 
图1 CCSLink连接关系
    CCSLink 的主要特点为:在MATLAB 环境下完成对DSP器件的调试、数据传递和验证;在MATLAB 和DSP 之间实现数据实时传递;支持XDS510 和XDS560 仿真器;提供嵌入式对象,可以访问C/C++变量;扩展了MATLAB 和eXpressDSP工具调试能力。
    MATLAB 6.5 版集成了CCSLink1.0 工具,支持CCS 能识别的所有板卡及硬件DSP,包括TIC2000、C5000、C6000 DSP及EVM 板、DSK 板、simulator 及任何符合标准的用户板和第三方板。CCSLink 正常工作除了需要MATLAB 及其信号处理工具箱外,还需要TI 的编译器(compiler)、汇编器(assembler)、链接器(linker)、CCS IDE2.1、CCS 配置工具信其他软件工具。
在MATLAB 环境下输入命令
help ccslink
若CCSLink 已正确安装,则会显示产品信息及进行CCS 和RTDX 操作的函数列表:
MATLAB Link for Code Composer Studio(tm)
Version 1.0 (R13) 28-Jun-2002。
若MATLAB 不能返回信息,则表明CCSLink 未安装成功,需进行重新安装。

2 CCSLink 对象的建立
    在对DSP 进行操作之前,应该首先建立一个DSP 目标。对于配置了多DSP 系统的用户,CCSLink 提供了两种选择DSP目标的工具:ccsboardinfo 函数和boardprosel 图形用户界面,用户可以根据返回值和自己需求选择相应的对象。以采用图形用户界面为例,若配置有XDS510 Emulator 和C5416 Simulator 二种DSP 系统,运行[boardNum,procNum] = boardprocsel,则MATLAB 通过对CCS 配置的自动检测,出现图2 所示的目标选择界面。本文根据需要选择硬件仿真器C54xxXDS510Emulator 并点击Done,则可返回板卡编号和处理器编号:
boardNum=1,procNum=0。
 
图2 CCSLink对象选择
    利用ccsdsp 函数可以确立一个DSP 对象。ccsdsp 以板卡编号和处理器编号为参数,并在建立链接对象后返回其它属性,如处理器型号、处理器名称等。例如,运行cc=ccsdsp(‘boardnum‘,boardNum, ‘procnum‘, procNum),则建立起一个CCS IDE 对象的句柄cc。从而可以通过cc,在MATLAB 下实现对CCS 的操作并控制DSP 芯片。

3 CCSLink 调试DSP 代码实例
    建立起MATLAB 链接之后,就可以通过CCS 为DSP 目标产生可执行代码,并进行编译、调试和分析。在以下的介绍中,均以MATLAB 自带的工程文件为例。
3.1 加载DSP 目标板
    在MATLAB 环境执行以下代码:
projfile = fullfile( matlabroot, ‘toolbox‘, ‘ccslink‘, ‘ccsdemos‘, ‘ccstutorial‘,‘ccstut_54xx.pjt‘)%选择工程文件
projpath = fileparts(projfile) %指定工程文件路径
open(cc,projfile)%打开工程文件
visible(cc,1)%使CCS IDE 前台可见
cd(cc,projpath)%改变MATLAB 工作路径
build(cc,‘all‘,60)%编译工程
load(cc,‘ccstut_54xx.out‘,30)%加载可执行文件
    则如代码注释所示,在MATLAB 环境下完成了对工程文件的调入、编译,生成可执行文件并将其加载到DSP 目标板。利用鼠标操作切换到CCS 界面,可以看到在MATLAB 下已经完成了对CCS 的各种操作过程,如图3 所示。
  
图3 CCSLink调试DSP代码实例[!--empirenews.page--]
3.2 利用CCSLink 连接调试访问DSP 内存
    在编译并加载.out 文件后,可以直接由CCSLink 读取目标符号表并获取变量在DSP 内存中的地址。如输入ddatA =dec2hex(address(cc,‘ddat‘)),将返回变量ddat 的地址和所在页:
23AC,0000。
    在MATLAB 中,可以控制CCS IDE 中程序的显示及断点的增加和删除,并控制程序代码的执行和暂停,读写DSP 的内存变量。例如,执行以下程序:
open(cc,‘ccstut.c‘,‘text‘)%在CCS 中打开ccstut.c 文件
open(cc,‘ccstut_54xx.cmd‘,‘text‘)%在CCS 中打开ccstut_54xx.cmd 文件
activate(cc,‘ccstut.c‘,‘text‘)%将ccstut.c 作为当前的活动文件
insert(cc,‘ccstut.c‘,64)%在第64 行加入断点
halt(cc)%暂停CPU
restart(cc) %继续与CCS 保持联系
run(cc,‘runtohalt‘,20)%DSP 程序执行到断点
ddatV = read(cc,address(cc,‘ddat‘),‘single‘,4) %(1)读取C 代码初始化数据ddat
idatV = read(cc,address(cc,‘idat‘),‘int16‘,4) %(2)读取C代码初始化数据idat
write(cc,address(cc,‘ddat‘),single([pi, 12.3, exp(-1), sin(pi/4)])) % (3)修改DSP 内存中的数据ddat
write(cc,address(cc,‘idat‘),int16([1:4]))% (4)修改DSP 内存中的数据idat
run(cc,‘runtohalt‘,20) %从断点处继续执行
ddatV = read(cc,address(cc,‘ddat‘),‘single‘,4)% (5)读取修改后的数据ddat
idatV = read(cc,address(cc,‘idat‘),‘int16‘,4) %(6)读取修改后的数据idat
    阅读本例工程文件可知,在C 代码中,变量初始化值为ddat=[16.3,-2.13,5.1,11.8],idat=[1,508,647,7000]。执行上述(1)、(2)两语句,在MATLAB 中获得了这两个变量的值ddatV 和idatV。经过(3)、(4)两语句的修改,ddat 和idat 分别改为了新值ddat=[3.1416,12.3,0.3679,0.7071]和idat=[1,2,3,4]。这一修改,可从(5)、(6)两语句的执行在MATLAB 中得到验证,同时也可在CCS IDE 下通过变量观测器进行证实。
    在MATLAB 下,同样可以通过regread 和regwrite 来对CPU寄存器进行读写操作。如
tReg = regread(cc,‘AL‘,‘2scomp‘) % 按二进制补码方式读取AL
regread(cc,‘TRN‘,‘binary‘) % 按无符号二进制数读取TRN
regwrite(cc,‘AH‘,‘FFFF‘,‘binary‘) % 按无符号二进制数读写AH
3.3 利用CCSLink 嵌入式对象调试访问DSP 内存
    利用MATLAB 的面向对象编程技术和CSLink,可以为目标程序中的所有C 符号创建嵌入式对象,并通过对象来操作该C 符号。
    仍以上述程序为例,首先复位DSP,并创建一个嵌入式对象:
restart(cc) % 复位程序,使PC 指向程序入口处
goto(cc,‘main‘) %将PC 定位到C 主程序入口
cvar = createobj(cc,‘idat‘) %(7)为操作嵌入式对象idat 创建MATLAB 对象
cvar
    语句(7)创建了指向DSP 中C 符号的MATLAB 对象,从而可以在MATLAB 环境下实现对其全部或部分读取和修改。
read(cvar)%(8)将嵌入式数组读入到MATLAB 工作空间
read(cvar,2)%只读取第2 个元素
write(cvar,4,7001)%(9)将第4 个元素修改为7001
set(cvar,‘size‘,[2])%(10)将对象减小到2 个元素
    语句(8)将指向idat 的嵌入式数组cvar 读入MATLAB,在语句(9)中对其第4 个元素进行了修改,而在语句(10)中对数组的大小进行了改变。
    通过CCSLink,不仅可以为数组变量创建对象,而且也可以为结构体变量创建对象并进行相应的操作,如:
cvar = createobj(cc,‘myStruct‘)%创建指向C 结构体的MATLAB 对象
write(cvar,‘iz‘, ‘Simulink‘) %修改结构体的字符串iz 域为Simulink
cstring = getmember(cvar,‘iz‘)%读取该域到MATLAB
write(cstring,1,‘s‘)%该写字符串的首字符
readnumeric(cstring)%按数值方式读取字符串
    上述5 条语句,均通过MATLAB 环境下的对象cvar,实现了对DSP 的C 语言程序中结构体变量myStruct 的读写操作和修改,具有很大的方便性。
    通过CCSlink,无论对CCS IDE 建立了连接对象还是嵌入式对象,均可在MATLAB 环境下进行操作,达到了DSP 内部各种变量的读写和修改,并进行相关的调试过程,具有很大的方便性。对于上述示例所有的操作执行结果,均可以在MATLAB和CCS IDE 环境下进行观测和验证。

 

4 结束语
    本文简要讨论了基于MATLAB 的DSP 程序调试方法,描述了CCSLink 与CCS IDE 的基本概念,介绍了建立CCS 对象的过程,并以MATLAB 提供的实际工程文件为例,演示了利用CCSLink 连接和嵌入式对象进行C 变量操作的实际过程,并对其执行过程和结果进行了简要解释。
    应该说明的是,MATLAB提供了大量的进行DSP程序调试的函数,本文只涉及到了其中极少的一部分。要充分利用MATLAB的强大功能进行更深层次的DSP程序调试,应进一步参考MathWorks公司提供的技术资料MATLAB Link for Code Composer Studio Development Tools。

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

LED驱动电源的输入包括高压工频交流(即市电)、低压直流、高压直流、低压高频交流(如电子变压器的输出)等。

关键字: 驱动电源

在工业自动化蓬勃发展的当下,工业电机作为核心动力设备,其驱动电源的性能直接关系到整个系统的稳定性和可靠性。其中,反电动势抑制与过流保护是驱动电源设计中至关重要的两个环节,集成化方案的设计成为提升电机驱动性能的关键。

关键字: 工业电机 驱动电源

LED 驱动电源作为 LED 照明系统的 “心脏”,其稳定性直接决定了整个照明设备的使用寿命。然而,在实际应用中,LED 驱动电源易损坏的问题却十分常见,不仅增加了维护成本,还影响了用户体验。要解决这一问题,需从设计、生...

关键字: 驱动电源 照明系统 散热

根据LED驱动电源的公式,电感内电流波动大小和电感值成反比,输出纹波和输出电容值成反比。所以加大电感值和输出电容值可以减小纹波。

关键字: LED 设计 驱动电源

电动汽车(EV)作为新能源汽车的重要代表,正逐渐成为全球汽车产业的重要发展方向。电动汽车的核心技术之一是电机驱动控制系统,而绝缘栅双极型晶体管(IGBT)作为电机驱动系统中的关键元件,其性能直接影响到电动汽车的动力性能和...

关键字: 电动汽车 新能源 驱动电源

在现代城市建设中,街道及停车场照明作为基础设施的重要组成部分,其质量和效率直接关系到城市的公共安全、居民生活质量和能源利用效率。随着科技的进步,高亮度白光发光二极管(LED)因其独特的优势逐渐取代传统光源,成为大功率区域...

关键字: 发光二极管 驱动电源 LED

LED通用照明设计工程师会遇到许多挑战,如功率密度、功率因数校正(PFC)、空间受限和可靠性等。

关键字: LED 驱动电源 功率因数校正

在LED照明技术日益普及的今天,LED驱动电源的电磁干扰(EMI)问题成为了一个不可忽视的挑战。电磁干扰不仅会影响LED灯具的正常工作,还可能对周围电子设备造成不利影响,甚至引发系统故障。因此,采取有效的硬件措施来解决L...

关键字: LED照明技术 电磁干扰 驱动电源

开关电源具有效率高的特性,而且开关电源的变压器体积比串联稳压型电源的要小得多,电源电路比较整洁,整机重量也有所下降,所以,现在的LED驱动电源

关键字: LED 驱动电源 开关电源

LED驱动电源是把电源供应转换为特定的电压电流以驱动LED发光的电压转换器,通常情况下:LED驱动电源的输入包括高压工频交流(即市电)、低压直流、高压直流、低压高频交流(如电子变压器的输出)等。

关键字: LED 隧道灯 驱动电源
关闭