摘 要:為了提高DSP程序的開(kāi)發(fā)效率以及處理程序運(yùn)行過(guò)程中出現(xiàn)的大量數(shù)據(jù),介紹如何利用Matlab中的CCSLink結(jié)合CCS進(jìn)行DSP程序的調(diào)試以及代碼的直接生成。利用從概念設(shè)計(jì)到實(shí)時(shí)實(shí)現(xiàn)的集成、統(tǒng)一的開(kāi)發(fā)環(huán)境,完成代碼產(chǎn)生、代碼加載、執(zhí)行以及與目標(biāo)DSP進(jìn)行通信。最后通過(guò)實(shí)例驗(yàn)證了該方案的有效性。
關(guān)鍵詞:Matlab;CCSLink;CCS;直接代碼
中圖分類號(hào):TP368.1文獻(xiàn)標(biāo)識(shí)碼:B文章編號(hào):1004373X(2008)2006803
Methods of Debugging DSP and Producing Codes Based on Matlab
LENG Bin1,LI Xueyong2,LIU Jianhua1
(1.Jiangxi Tourism Commerce College,Nanchang,330063,China;2.Nanchang Hangkong University,Nanchang,330063,China)
Abstract:In order to improve the efficient of DSP program development and handle the data in process of running program,CCSLink is used to debug DSP program in Matlab and direct code production with CCS.In the integrate and uniform development circumstance,in which the designing can be accomplished from concept to real-time actualizing,producing code,loading code,performing code and communicating with DSP can be all completed.Finally the examples validate the method.
Keywords:Matlab;CCSLink;CCS;direct code
Matlab作為一種有效的信號(hào)處理工具,已經(jīng)滲透到DSP的設(shè)計(jì)當(dāng)中[1]。開(kāi)發(fā)者在將一個(gè)新的數(shù)字信號(hào)處理算法應(yīng)用于實(shí)際前,一般是先用Matlab進(jìn)行模擬驗(yàn)證,當(dāng)模擬結(jié)果滿意時(shí)再把算法修改成C或DSP匯編語(yǔ)言通過(guò)CCS在目標(biāo)DSP上實(shí)現(xiàn),并比較實(shí)際應(yīng)用與模擬的結(jié)果以發(fā)現(xiàn)誤差,如此反復(fù)進(jìn)行。在較新版本的Matlab(6.0以上)中提供了Matlab與DSP的統(tǒng)一集成環(huán)境后,眾多學(xué)者對(duì)Matlab環(huán)境下的DSP調(diào)試進(jìn)行了研究[2-4]。文獻(xiàn)[2-4]從CCSLink的角度出發(fā),對(duì)Matlab環(huán)境下的DSP調(diào)試進(jìn)行了原理及思路上的闡述,但均未涉及到直接代碼生成。本文在介紹CCSLink的連接對(duì)象、嵌入式對(duì)象和RTDX對(duì)象的基礎(chǔ)上,詳細(xì)闡述Simulink環(huán)境下的直接代碼生成。
1 CCSLink及ETTIC2000概述
Matlab具有強(qiáng)大的分析、計(jì)算和可視化功能,但處理速度慢;DSP具有快速的信號(hào)處理能力,但是其CCS的編譯環(huán)境中數(shù)據(jù)可編輯和分析能力不如Matlab;而MathWorks公司和TI公司聯(lián)合開(kāi)發(fā)的Matlab Link for CCS Development Tools(CCSLink)和Embedded Target for the TI TMS320C2000 DSP Platform(ETTIC2000),CCSLink提供了Matlab和CCS的接口,能把Matlab和TI CCS及目標(biāo)DSP連接起來(lái)。利用此工具可以像操作Matlab變量一樣來(lái)操作TI DSP的存儲(chǔ)器或寄存器。CCSLink支持CCS能夠識(shí)別的任何目標(biāo)板(C200,C5000,C600),此工具用于DSP程序的調(diào)試過(guò)程。而CCSLink與ETTIC2000的配合使用,可直接由Matlab的Simulink模型生成TIC2000DSP的可執(zhí)行代碼,能在集成、統(tǒng)一的Matlab環(huán)境下完成DSP的整個(gè)開(kāi)發(fā)過(guò)程。
2 CCSLink 環(huán)境下的DSP調(diào)試
CCSLink向用戶提供了3個(gè)組件內(nèi)容,如圖1所示。
2.1 CCSLink的接口對(duì)象
2.1.1 CCS IDE的連接對(duì)象
該對(duì)象支持TI的C2000/5000/6000系列DSP,利用此對(duì)象可創(chuàng)建CCS IDE和Matlab的連接。用戶可以編寫(xiě)用于DSP程序的Matlab語(yǔ)言批處理腳本,從Matlab的命令窗中直接運(yùn)行CCS IDE中的應(yīng)用程序,向硬件DSP的存儲(chǔ)器或寄存器發(fā)送或取出數(shù)據(jù),檢查DSP的狀態(tài),停止或啟動(dòng)程序在DSP中的運(yùn)行。
2.1.2 與RTDX的連接對(duì)象
該對(duì)象提供Matlab和硬件DSP之間的實(shí)時(shí)通信通道。它允許用戶在主機(jī)和目標(biāo)板之間進(jìn)行實(shí)時(shí)的數(shù)據(jù)交換而不用考慮目標(biāo)程序的運(yùn)行。RTDX連接對(duì)象實(shí)際上是CCS連接對(duì)象的一個(gè)子類,在創(chuàng)建CCS連接對(duì)象的同時(shí)創(chuàng)建RTDX連接對(duì)象,它們不能分別創(chuàng)建。
2.1.3 嵌入式對(duì)象
在Matlab環(huán)境中創(chuàng)建一個(gè)可以代表嵌入在目標(biāo)C程序中的變量的對(duì)象。利用嵌入式對(duì)象可直接訪問(wèn)嵌入在目標(biāo)DSP的存儲(chǔ)器和寄存器中的變量,即把目標(biāo)C程序中的變量作為Matlab的一個(gè)變量來(lái)對(duì)待,并把編輯后的信息反返回到DSP程序中。所有這些操作均在Matlab環(huán)境下完成。
2.2 CCS IDE連接對(duì)象應(yīng)用
CCS IDE連接對(duì)象提供Matlab與CCS IDE和目標(biāo)DSP的連接,利用此連接可以在Matlab環(huán)境中控制和操作DSP中的應(yīng)用程序;利用Matlab中強(qiáng)大的計(jì)算、分析和可視化工具來(lái)分析和對(duì)比目標(biāo)程序運(yùn)行過(guò)程中的結(jié)果;而嵌入式對(duì)象則提供Matlab對(duì)DSP內(nèi)存中的變量進(jìn)行實(shí)時(shí)訪問(wèn)和控制,這樣大大縮短嵌入式應(yīng)用程序的開(kāi)發(fā)調(diào)試周期。本文以運(yùn)行具體程序說(shuō)明調(diào)試過(guò)程。源程序PWM.pjt保存在Matlab根目錄下的project文件下。
(1) 加載DSP目標(biāo)板
mypjt=ccsdsp %建立CCSLink連接對(duì)象mypjt
CCSDSP Object:%Matlab界面返回信息
Processor type:TMS320C24xx
Processor name :CPU_1
Running?:No
Board number :0
Processor number :0
Default timeout :10.00 secs
Ccsboardinfo %測(cè)試目標(biāo)板狀態(tài)
Board Board Proc Processor Processor
NumNameNumNameType
...........................................
0tds5102xx 0 CPU_1 TMS320C24xx
%Matlab環(huán)境下調(diào)試已建立好的DSP程序
profile=fullfile(Matlabroot,′myproject′,…
′PWM.pjt′);%調(diào)用硬盤(pán)目錄下的工程文件
projpath=fileparts(profile);%建立路徑
open(mypjt,projpath);%打開(kāi)文件
visible(mypjt,1);%主機(jī)顯示CCS調(diào)試界面
cd(mypjt,projfile);%更改Matlab工作路徑
build(mypjt,′all′,60);%編譯程序
load(mypjt,′PWM.out′,30);%載入執(zhí)行文件
animate(mypjt);%運(yùn)行程序
(2) 利用CCSLink連接對(duì)象控制訪問(wèn)DSP
open(mypjt,′PWM.c′,′text′);%打開(kāi)源程序
open(mypjt,′PWM.cmd′,′text′);%打開(kāi)命令文件
insert(mypjt,′PWM.c′,20);%在源程序第20行插入斷點(diǎn)
halt(mypjt);%在斷點(diǎn)處暫停目標(biāo)DSP
restart(mypjt);%復(fù)位程序計(jì)數(shù)器PC
run(mypjt,′runtohalt′,20);%運(yùn)行程序,知道第20行才把控制權(quán)返回到Matlab
PWMdat=read(mypjt,address(mypjt,′cesi1′),′int′);%讀cesi1
IPWMdat=read(mypjt,address(mypjt,′cesi2′),′int′);%讀cesi2
Write (mypjt,address(mypjt,′cesi1′),int([0]);%將數(shù)組[0]寫(xiě)入cesi1
run(mypjt,′runtohalt′,20);%運(yùn)行程序,知道第20行才把控制權(quán)返回到Matlab
(3) 利用嵌入式對(duì)象調(diào)試訪問(wèn)DSP內(nèi)存
由于CCSLINK不支持240x系列DSP,下面程序在28xx系列目標(biāo)板上進(jìn)行調(diào)試,過(guò)程如下:
restart(mypjt);%重新啟動(dòng)工程文件
goto(mypjt,′main′);%跳到主程序入口處
PMW1=createobj(mypjt,′cesi1′);%為cesi1創(chuàng)建潛入式對(duì)象
read(PWM1);%讀出該嵌入式對(duì)象
write(PWM1,0);%將該嵌入式對(duì)象寫(xiě)0
sct(PWM1,′size′,[400]);%更改該嵌入式對(duì)象數(shù)組長(zhǎng)度
clear mypjt;%斷開(kāi)連接
從上述程序可知,在Matlab環(huán)境下可以完成對(duì)CCS工程文件的調(diào)入、編譯,生成可執(zhí)行文件并將其加載到DSP目標(biāo)板。并且可以通過(guò)相應(yīng)的連接對(duì)象和嵌入式對(duì)象操作函數(shù),實(shí)現(xiàn)在DSP硬件不停止執(zhí)行程序的情況下對(duì)DSP的C語(yǔ)言程序中數(shù)據(jù)結(jié)構(gòu)變量的讀寫(xiě)修改。
3 ETTIC2000 環(huán)境下的直接代碼生成
由第2節(jié)中可知,CCSLink為TI DSP實(shí)時(shí)應(yīng)用開(kāi)發(fā)的調(diào)試和測(cè)試階段提供了強(qiáng)大的支持,而ETTIC2000則為TI C2000 DSP實(shí)時(shí)應(yīng)用開(kāi)發(fā)的整個(gè)過(guò)程(概念設(shè)計(jì)、算法仿真、源代碼編寫(xiě)、目標(biāo)代碼生成、調(diào)試和測(cè)試)都提供了支持。利用ETTIC2000能夠從Simulink模型自動(dòng)生成TI C2000 DSP的可執(zhí)行代碼,并且為TI LF2407 EVM目標(biāo)板上的I/O設(shè)備提供驅(qū)動(dòng)代碼,使得MINULINK模型可以直接在LF2407 EVM板上進(jìn)行實(shí)時(shí)測(cè)試,從而在Simulink統(tǒng)一環(huán)境下就可以實(shí)現(xiàn)整個(gè)硬件在線仿真。
3.1 ETTIC2000應(yīng)用開(kāi)發(fā)過(guò)程
應(yīng)用ETTIC2000開(kāi)發(fā)實(shí)時(shí)DSP處理的過(guò)程如下:
(1)概念構(gòu)思和DSP處理算法設(shè)計(jì);
(2)在Simulink環(huán)境下,利用DSP BLOCKSET,F(xiàn)IXED-POINT BLOCKSET,C2000 DSPLIB和Simulink等庫(kù)中的模塊構(gòu)建算法模型,并在Simulink環(huán)境下進(jìn)行仿真;
(3)如果Simulink仿真效果滿意,就可以在模型中加入需要的LF2407 EVM 目標(biāo)板上的I/O模塊;
(4)設(shè)置REAL-TIME WORKSHOP 中的編譯鏈接(BUILD)選項(xiàng);
(5)利用CCS中的調(diào)試工具、CCSLink 或RTDX來(lái)調(diào)試目標(biāo)DSP中的程序;
REAL-TIME WORKSHOP 能夠從Simulink模型中自動(dòng)產(chǎn)生C代碼并且插入ADC和DAC模塊指定的I/O設(shè)備驅(qū)動(dòng)程序。再通過(guò)REAL-TIME WORKSHOP 面板上的BUILD按鈕,REAL-TIME WORKSHOP 會(huì)自動(dòng)產(chǎn)生實(shí)時(shí)可執(zhí)行代碼。
3.2 建立Simulink模型
由前述連接對(duì)象可知,系統(tǒng)已經(jīng)正確安裝了TIC2000系列DSP目標(biāo)板。在Matlab命令窗口輸入:C2000LIB,打開(kāi)TIC2000的Simulink模塊庫(kù),其模型庫(kù)組成如圖2所示。本系統(tǒng)采用2407目標(biāo)板,因此只用到C2000 Target Preferences 和C2400 DSP Chip Support等模塊。本文以脈寬調(diào)制中A/D采樣控制為例,其建立的Simulink模型如圖3所示。
3.3 REAL-TIME WORKSHOP 選項(xiàng)設(shè)置
建立好Simulink模型后,設(shè)置其屬性,生成CCS可執(zhí)行的工程文件。
在Simulink模型窗口選擇Simulation下拉菜單中選擇Configuration Parameters,彈出如圖4所示對(duì)話框。在屬性對(duì)話框中單擊Real-Time Workshop選項(xiàng)卡,在Category欄中選中Target configuration 修改System target file和Template make file文件名。其他選擇默認(rèn)值,單擊Generate Code,就可以將Simulink模型自動(dòng)生成CCS IDE的工程文件,并自動(dòng)調(diào)入CCS IDE中,則該工程文件就可以在CCS IDE中編譯下載運(yùn)行。其生成的工程文件在CCS IDE環(huán)境下的載入情況如圖5所示。
在直接代碼生成時(shí),Matlab命令窗口返回信息如下:
### Writing header file c2407adcpwmtest.h
### Writing source file c2407adcpwmtest.c.
### TLC code generation complete.
### Creating project marker file:rtw_proj.tmw
### Wrapping unrecognized make command
###
### Creating c2407adcpwmtest.mk from F:\\\\Matlab71\\\oolbox\\\\rtw\\\argets\\\ic2000\\\ic2000\\\i_c2000_grt.tmf
### Creating project in Code Composer Studio(tm)
### Building Code Composer Studio(tm) project...
### Build complete
至此,代碼生成并在CCS IDE中編譯完畢。
4 結(jié) 語(yǔ)
本文基于Matlab環(huán)境對(duì)DSP的實(shí)時(shí)調(diào)試及直接代碼生成過(guò)程做了詳細(xì)的闡述,并結(jié)合實(shí)例給予演示。實(shí)驗(yàn)證明,應(yīng)用Matlab對(duì)DSP進(jìn)行實(shí)時(shí)調(diào)試和代碼生成,有效地改變了傳統(tǒng)的設(shè)計(jì)方法。Matlab的易于操作性有助于在設(shè)計(jì)早期發(fā)現(xiàn)錯(cuò)誤并進(jìn)行實(shí)時(shí)更改。而CCSLINK與ETTIC2000的結(jié)合,使得在集成、統(tǒng)一的Matlab環(huán)境下完成DSP開(kāi)發(fā)的整個(gè)過(guò)程。
參考文獻(xiàn)
[1]李真芳,蘇濤,黃小宇.DSP程序開(kāi)發(fā)[M].西安:西安電子科技大學(xué)出版社,2003.
[2]王宏.Matlab 6.5及其在信號(hào)處理中的應(yīng)用[M].北京:清華大學(xué)出版社,2004.
[3]許儒泉,高雪清.基于Matlab的DSP系統(tǒng)級(jí)的設(shè)計(jì)方法[J].現(xiàn)代電子技術(shù),2004,27(13):152-156.
[4]沈鴻章,盧佩.CCSLINK 在實(shí)時(shí)DSP程序調(diào)試中的應(yīng)用[J].單片機(jī)與嵌入式系統(tǒng)應(yīng)用,2007(6):29-31.
[5]汪洋,郭麗麗,樊麗萍.一種基于Matlab的DSP開(kāi)發(fā)思路的研究[J].控制工程,2006,5(13):123-126.
[6]劉和平,王維俊,江渝,等.TMS320LF240X DSP C語(yǔ)言開(kāi)發(fā)應(yīng)用[M].北京:北京航空航天大學(xué)出版社,2005.
[7]TMS320LF240X Evaluation Module User′s Guide.Texas Instruments Inc.,August 2002.
[8]Developer′s Kit for Texas Instruments DSP User′s Guide.MathWorks Inc.February 2001.
作者簡(jiǎn)介 冷 斌 男,1981年出生,江西南昌人,在讀工程碩士,2004年7月畢業(yè)于南昌大學(xué)自動(dòng)化學(xué)院,現(xiàn)任教于江西旅游商貿(mào)職業(yè)技術(shù)學(xué)院。研究方向?yàn)殡娏﹄娮蛹夹g(shù)。
李學(xué)勇 男,1982年出生,湖南長(zhǎng)沙人,在讀碩士研究生,2004年7月畢業(yè)于哈爾濱工程大學(xué)建筑工程學(xué)院,現(xiàn)就讀于南昌航空大學(xué)自動(dòng)化學(xué)院。研究方向?yàn)楝F(xiàn)代電力電子技術(shù)。