覃遠年,孫麗真,田柯
(桂林電子科技大學 通信實驗中心,桂林541000)
在傳統(tǒng)的DSP(Digital Signal Processor)應(yīng)用程序開發(fā)過程中,涉及的算法一般先用 MATLAB語言進行仿真,仿真結(jié)果滿意后,再進入產(chǎn)品的實現(xiàn)階段。仿真實現(xiàn)后的算法用C/C++或匯編語言實現(xiàn),首先在硬件DSP目標板上調(diào)試,將中間結(jié)果通過DSP開發(fā)工具保存到PC機的硬盤上,然后調(diào)用到 MATLAB工作空間,與MATLAB仿真算法的中間結(jié)果進行比較,以發(fā)現(xiàn)DSP程序中由于設(shè)計或精度導(dǎo)致的結(jié)果偏差[1]。如此反復(fù)進行,應(yīng)用程序開發(fā)十分不便。
鑒于DSP應(yīng)用開發(fā)的傳統(tǒng)設(shè)計方法十分不便,Math-Works公司和TI公司聯(lián)合開發(fā)了MATLAB Link for CCS Development Tools(簡稱 CCSLink)。CCSLink將MATLAB、CCS(TI DSP集成開發(fā)環(huán)境)和目標DSP三者連接起來,開發(fā)人員可以在MATLAB環(huán)境中像操作MATLAB變量一樣操作TI公司DSP的存儲器和寄存器,實現(xiàn)對CCS的控制,極大地方便了TI DSP應(yīng)用程序的開發(fā)。
本文所做的研究是以MATLAB2010b、CCS3.3以及基于TMS320VC5509A的開發(fā)板進行的。目前大多數(shù)書籍就CCSLink的描述主要是基于 MATLAB6.5的,而后續(xù)的MATLAB版本對CCSLink做了一定的修改和完善。RTDX插件作為CCSLink的重要組成部分之一,有其獨特的優(yōu)勢。在接下來的內(nèi)容中將對RTDX做詳細介紹,旨在向DSP研發(fā)人員提供一種更快捷的RTDX使用方式。
CCSLink由3部分組成[1]:
①與CCS IDE的連接對象。利用此對象可以創(chuàng)建CCS與MATLAB的連接,執(zhí)行相應(yīng)的MATLAB命令就可以運行CCS中的應(yīng)用程序,與目標DSP的存儲器和寄存器進行雙向數(shù)據(jù)交換。其優(yōu)點在于:
(a)用戶可以利用MATLAB強大的數(shù)據(jù)分析和可視化功能,節(jié)省設(shè)計和調(diào)試程序的時間。
(b)可以編寫用于調(diào)試數(shù)字信號處理程序的MATLAB語言批處理腳本,實現(xiàn)調(diào)試和分析的自動化。
②與RTDX的連接對象。提供了MATLAB與目標DSP之間的實時通信通道,利用此通道可以實時地與目標DSP進行數(shù)據(jù)交換而不用停止DSP上正在執(zhí)行的程序。Link for RTDX實現(xiàn)了對實時數(shù)據(jù)的自動化高級分析和可視化,同時也實現(xiàn)了對復(fù)雜DSP程序的有效驗證。
RTDX包括主機和目標DSP兩部分,如圖1所示。在DSP上有一個小的RTDX庫(RTDX Target Library)[2],其使用一個基于掃描的仿真器,通過增強型JTAG接口在主機和DSP之間傳輸數(shù)據(jù)。DSP應(yīng)用程序則通過調(diào)用RTDX庫的API函數(shù)來完成主機和DSP之間的通信。主機方運行CCS軟件,CCS軟件同樣帶有一個RTDX庫(RTDX Host Library),通過一個COM接口將實時數(shù)據(jù)在主機上顯示[3]。這樣,MATLAB中設(shè)計的參數(shù)可以通過RTDX輸入通道寫入DSP的存儲單元,而算法的最后結(jié)果也可以通過RTDX的輸出通道上傳到MATLAB中,通過編寫MATLAB程序來顯示、分析信號處理的結(jié)果。
圖1 RTDX原理框圖
③嵌入對象。在MATLAB環(huán)境中能夠創(chuàng)建一個代表嵌入在目標C程序中的變量對象,利用嵌入式對象可以像處理MATLAB的變量那樣直接訪問嵌入在目標DSP的存儲器和寄存器中的變量。
上述3種連接對象的實現(xiàn)方式略有不同,與CCS IDE的連接對象和嵌入式對象在數(shù)據(jù)的傳遞時可以不在目標DSP程序中添加額外的語句,而與RTDX的連接對象在進行數(shù)據(jù)傳遞時則需要在目標DSP程序中添加操縱RTDX通道的語句。
實現(xiàn)MATLAB和目標DSP之間的實時數(shù)據(jù)交換,既需要在目標DSP程序中添加特定的語句,又需要MATLAB使用特定的語句實現(xiàn)與目標DSP的數(shù)據(jù)傳遞。
2.1.1 設(shè)置RTDX輸入輸出通道
首先向工程文件中添加頭文件“rtdx.h”、主程序文件“main.c”和其他使用到RTDX的文件。
基于工程是否有與主機通信的需要,在“main.c”中添加輸入或輸出通道。通道的聲明采用全局變量的形式,不得包括在任何函數(shù)之中。
默認情況下,這些通道是不能在DSP中直接使用的,但可以在函數(shù)體內(nèi)使能這些RTDX通道。
如果要在同一工程的其他C文件中使用已經(jīng)聲明過的RTDX通道,必須再次聲明。
最后,單擊CCS軟件Tools->RTDX->ConfigurationControl,在彈出的窗口中選擇“Enable RTDX”,手動使能RTDX接口。
2.1.2 使用RTDX讀寫數(shù)據(jù)
DSP中的RTDX目標庫提供了一些C函數(shù)發(fā)送和接收數(shù)據(jù):
①RTDX_read NB()讀數(shù)據(jù)函數(shù)包括3個參數(shù):第1個是輸入通道的指針,第2個是存儲數(shù)據(jù)的數(shù)組指針,第3個是數(shù)據(jù)字長。這是非連續(xù)讀,即如果沒有數(shù)據(jù)可讀將直接返回。
②RTDX_read()函數(shù)的3個參數(shù)和RTDX_readNB()一樣,不同的是RTDX_read()是連續(xù)讀,即它將不返回直到讀完數(shù)據(jù)。如果通道忙或未使能,它將返回RTDX_READ_ERROR。
③RTDX_write()寫數(shù)據(jù)函數(shù)也包括3個參數(shù):第1個是輸出通道的指針,第2個是要傳輸?shù)臄?shù)組指針,第3個是數(shù)據(jù)字長。執(zhí)行后會返回一個整數(shù),非0代表成功。
④RTDX_sizeofInput()包含輸入通道指針的一個參數(shù),并返回從緩沖器中讀取的字長,一般在RTDX_read-NB()完成一次讀操作后使用它。
⑤RTDX_channelBusy()包含輸入通道指針的一個參數(shù),并返回一個整數(shù)指示通道狀態(tài),0表示通道不忙。它通常與RTDX_read NB()結(jié)合使用,用于檢查是否有其他讀數(shù)據(jù)請求。
2.2.1 發(fā)送數(shù)據(jù)[4]
在傳輸數(shù)據(jù)之前,MATLAB需要知道目標DSP板的信息,完成MATLAB和CCS以及目標DSP的連接,使用下面這條指令實現(xiàn):
h=actxserver(′RTDX′);
此指令要在DSP加載了可執(zhí)行文件并使能RTDX接口之后才能使用,使用這條指令還創(chuàng)建了與RTDX的連接對象,h為連接對象的句柄。
在MATLAB中打開并使能RTDX輸入通道之前,必須在DSP目標程序中已經(jīng)創(chuàng)建了該輸入通道,調(diào)用下面這條指令實現(xiàn):
invoke(h,′open′,′ichan′,′W′);
傳輸數(shù)據(jù)用下面這條指令實現(xiàn):
invoke(h,′Write′,int16(v));
數(shù)據(jù)通過最近打開的輸入通道由MATLAB向DSP寫數(shù)據(jù),int16(v)表示對數(shù)據(jù)v做強制數(shù)據(jù)類型轉(zhuǎn)換,因為使用的TMS320VC5509A是16位定點DSP。
在完成數(shù)據(jù)傳輸或讀數(shù)據(jù)之前,應(yīng)該將此接口關(guān)閉,使用下面這條指令實現(xiàn):
invoke(h,′close′);
2.2.2 接收數(shù)據(jù)
在MATLAB接收數(shù)據(jù)部分并沒有采用發(fā)送數(shù)據(jù)使用的那種最新的RTDX實現(xiàn)方式,因為新方法的實現(xiàn)難度較大,這里介紹通用的實現(xiàn)方法,具體步驟如下[3]:
①cc=ticcs()實現(xiàn)MATLAB和CCS以及DSP三者的連接,并創(chuàng)建連接對象,對象句柄為cc。
②打開并使能RTDX通道:
③讀取數(shù)據(jù):
列舉一個簡單的求和運算來說明RTDX的具體實現(xiàn)方法,旨在讓讀者掌握如何使用RTDX實現(xiàn)MATLAB和DSP之間的雙向數(shù)據(jù)傳遞。整個程序的實現(xiàn)思路是:首先MATLAB通過RTDX輸入通道向DSP中寫入10個數(shù)據(jù),然后DSP對這10個數(shù)據(jù)求和,最后將這個和值經(jīng)RTDX輸出通道傳遞給MATLAB。整個過程的實現(xiàn)流程如圖2所示。
圖2 程序流程圖
RTDX技術(shù)巧妙地實現(xiàn)了MATLAB和目標DSP之間的數(shù)據(jù)交換,使開發(fā)者能夠在算法仿真和實時處理之間進行多次反復(fù),以確定最佳算法和參數(shù),極大地方便了DSP應(yīng)用程序的設(shè)計,縮短了開發(fā)周期。
[1]陳泰紅,任勝杰,魏宇.手把手教你學DSP—基于TMS320C55x[M].北京:北京航空航天大學出版社,2011.
[2]金衛(wèi).利用RTDX實現(xiàn)DSP與 Matlab的數(shù)據(jù)交換[C]//四川省電子學會電子測量與儀器專委會2005年學術(shù)年會(第十二屆),2005.
[3]李真芳,蘇濤,黃小宇.DSP程序開發(fā)-MATLAB調(diào)試及直接目標代碼生成[M].西安:西安電子科技大學出版社,2003.
[4]Thomas Shen.Using RTDX with a MATLAB GUI[EB/OL].[2015-03].http://cnx.org/content/m14388/latest.
[5]Texas Instruments Inc.TMS320 DSP/BIOS User’s Guide[EB/OL].[2015-03].http://wenku.baidu.com/link?url=DEaRFy VIAH4kZ7 Tolplf FhFhm Ak3gFa NSOH7 XPzf T-nCWY4 CBfCAKSoCu Y_yin RE4zuzhhbob K_929 TMCmF-p Ogp 4J3KT_s22o0dmy Vyki2CS.