首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

MATlab的ccslink仿真

转载
采用MATLAB的DSP调试方法时间:2010-06-22 04:16:08 来源: 作者:

本文结合具体例证,介绍基于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代码实例
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。
返回列表