MATLAB與DSP使用RTDX的實(shí)時(shí)數(shù)據(jù)交換
摘要:采用MATLAB輔助DSP程序的開發(fā)和調(diào)試,能加快DSP應(yīng)用程序的開發(fā)。實(shí)時(shí)數(shù)據(jù)交換(RTDX)為設(shè)計(jì)、驗(yàn)證DSP算法提供了一個(gè)快速、方便的解決方案。本文對(duì)RTDX的工作原理進(jìn)行了分析,討論了MATLAB與DSP使用RTDX插件實(shí)現(xiàn)雙向數(shù)據(jù)傳輸?shù)膶?shí)現(xiàn)方式,并通過一個(gè)簡(jiǎn)單的實(shí)例說明RTDX的具體實(shí)現(xiàn)過程。
本文引用地址:http://butianyuan.cn/article/201610/306116.htm引言
在傳統(tǒng)的DSP(Digital Signal Processor)應(yīng)用程序開發(fā)過程中,涉及的算法一般先用MATLAB語言進(jìn)行仿真,仿真結(jié)果滿意后,再進(jìn)入產(chǎn)品的實(shí)現(xiàn)階段。仿真實(shí)現(xiàn)后的算法用 C/C++或匯編語言實(shí)現(xiàn),首先在硬件DSP目標(biāo)板上調(diào)試,將中間結(jié)果通過DSP開發(fā)工具保存到PC機(jī)的硬盤上,然后調(diào)用到MATLAB工作空間,與 MATLAB仿真算法的中間結(jié)果進(jìn)行比較,以發(fā)現(xiàn)DSP程序中由于設(shè)計(jì)或精度導(dǎo)致的結(jié)果偏差。如此反復(fù)進(jìn)行,應(yīng)用程序開發(fā)十分不便。
鑒于DSP應(yīng)用開發(fā)的傳統(tǒng)設(shè)計(jì)方法十分不便,Math Works公司和TI公司聯(lián)合開發(fā)了MATLAB Link for CCS Development Tools(簡(jiǎn)稱CCSLink)。CCSLink將MATLAB、CCS(TI DSP集成開發(fā)環(huán)境)和目標(biāo)DSP三者連接起來,開發(fā)人員可以在MATLAB環(huán)境中像操作MATLAB變量一樣操作TI公司DSP的存儲(chǔ)器和寄存器,實(shí)現(xiàn)對(duì)CCS的控制,極大地方便了TI DSP應(yīng)用程序的開發(fā)。
本文所做的研究是以MATLAB2010b、CCS3.3以及基于TMS320VC5509A的開發(fā)板進(jìn)行的。目前大多數(shù)書籍就CCSLink的描述主要是基于MATLAB6.5的,而后續(xù)的MATLAB版本對(duì)CCSLink做了一定的修改和完善。RTDX插件作為CCSLink的重要組成部分之一,有其獨(dú)特的優(yōu)勢(shì)。在接下來的內(nèi)容中將對(duì)RTDX做詳細(xì)介紹,旨在向DSP研發(fā)人員提供一種更快捷的RTDX使用方式。
1 CCSLink的構(gòu)成
CCSLink由3部分組成:
①與CCS IDE的連接對(duì)象。利用此對(duì)象可以創(chuàng)建CCS與MATLAB的連接,執(zhí)行相應(yīng)的MATLAB命令就可以運(yùn)行CCS中的應(yīng)用程序,與目標(biāo)DSP的存儲(chǔ)器和寄存器進(jìn)行雙向數(shù)據(jù)交換。其優(yōu)點(diǎn)在于:
(a)用戶可以利用MATLAB強(qiáng)大的數(shù)據(jù)分析和可視化功能,節(jié)省設(shè)計(jì)和調(diào)試程序的時(shí)間。
(b)可以編寫用于調(diào)試數(shù)字信號(hào)處理程序的MATLAB語言批處理腳本,實(shí)現(xiàn)調(diào)試和分析的自動(dòng)化。
②與RTDX的連接對(duì)象。提供了MATLAB與目標(biāo)DSP之間的實(shí)時(shí)通信通道,利用此通道可以實(shí)時(shí)地與目標(biāo)DSP進(jìn)行數(shù)據(jù)交換而不用停止DSP上正在執(zhí)行的程序。Link for RTDX實(shí)現(xiàn)了對(duì)實(shí)時(shí)數(shù)據(jù)的自動(dòng)化高級(jí)分析和可視化,同時(shí)也實(shí)現(xiàn)了對(duì)復(fù)雜DSP程序的有效驗(yàn)證。
RTDX包括主機(jī)和目標(biāo)DSP兩部分,如圖1所示。在DSP上有一個(gè)小的RTDX庫(RTDX Target Library),其使用一個(gè)基于掃描的仿真器,通過增強(qiáng)型JTAG接口在主機(jī)和DSP之間傳輸數(shù)據(jù)。DSP應(yīng)用程序則通過調(diào)用RTDX庫的API函數(shù)來完成主機(jī)和DSP之間的通信。主機(jī)方運(yùn)行CCS軟件,CCS軟件同樣帶有一個(gè)RTDX庫(RTDX Host Library),通過一個(gè)COM接口將實(shí)時(shí)數(shù)據(jù)在主機(jī)上顯示。這樣,MATLAB中設(shè)計(jì)的參數(shù)可以通過RTDX輸入通道寫入DSP的存儲(chǔ)單元,而算法的最后結(jié)果也可以通過RTDX的輸出通道上傳到MATLAB中,通過編寫MATLAB程序來顯示、分析信號(hào)處理的結(jié)果。
③嵌入對(duì)象。在MATLAB環(huán)境中能夠創(chuàng)建一個(gè)代表嵌入在目標(biāo)C程序中的變量對(duì)象,利用嵌入式對(duì)象可以像處理MATLAB的變量那樣直接訪問嵌入在目標(biāo)DSP的存儲(chǔ)器和寄存器中的變量。
上述3種連接對(duì)象的實(shí)現(xiàn)方式略有不同,與CCS IDE的連接對(duì)象和嵌入式對(duì)象在數(shù)據(jù)的傳遞時(shí)可以不在目標(biāo)DSP程序中添加額外的語句,而與RTDX的連接對(duì)象在進(jìn)行數(shù)據(jù)傳遞時(shí)則需要在目標(biāo)DSP程序中添加操縱RTDX通道的語句。
2 RTDX的工作原理
實(shí)現(xiàn)MATLAB和目標(biāo)DSP之間的實(shí)時(shí)數(shù)據(jù)交換,既需要在目標(biāo)DSP程序中添加特定的語句,又需要MATLAB使用特定的語句實(shí)現(xiàn)與目標(biāo)DSP的數(shù)據(jù)傳遞。
2.1 DSP對(duì)RTDX的配置使用
2.1.1 設(shè)置RTDX輸入輸出通道
首先向工程文件中添加頭文件“rtdx.h”、主程序文件“main.c”和其他使用到RTDX的文件。
基于工程是否有與主機(jī)通信的需要,在“main.c”中添加輸入或輸出通道。通道的聲明采用全局變量的形式,不得包括在任何函數(shù)之中。
RTDX_CreateInputChannel(ichan);
/*創(chuàng)建名為ichan的輸入通道*/
RTDX_CreateOutputChannel(ochan);
/*創(chuàng)建名為ochan的輸出通道*/
默認(rèn)情況下,這些通道是不能在DSP中直接使用的,但可以在函數(shù)體內(nèi)使能這些RTDX通道。
RTDX_enableInput(ichan); /*使能ichan通道*/
RTDX_enableOutput(ochan); /*使能ochan通道*/
如果要在同一工程的其他C文件中使用已經(jīng)聲明過的RTDX通道,必須再次聲明。
Extern RTDX_input_channel ichan;
Extern RTDX_output_channel ochan;
最后,單擊CCS軟件Tools->RTDX->Configuration Control,在彈出的窗口中選擇“Enable RTDX”,手動(dòng)使能RTDX接口。
2.1.2 使用RTDX讀寫數(shù)據(jù)
DSP中的RTDX目標(biāo)庫提供了一些C函數(shù)發(fā)送和接收數(shù)據(jù):
①RTDX_readNB()讀數(shù)據(jù)函數(shù)包括3個(gè)參數(shù):第1個(gè)是輸入通道的指針,第2個(gè)是存儲(chǔ)數(shù)據(jù)的數(shù)組指針,第3個(gè)是數(shù)據(jù)字長(zhǎng)。這是非連續(xù)讀,即如果沒有數(shù)據(jù)可讀將直接返回。
②RTDX_read()函數(shù)的3個(gè)參數(shù)和RTDX_readNB()一樣,不同的是RTDX_read()是連續(xù)讀,即它將不返回直到讀完數(shù)據(jù)。如果通道忙或未使能,它將返回RTDX_READ_ERROR。
③RTDX_write()寫數(shù)據(jù)函數(shù)也包括3個(gè)參數(shù):第1個(gè)是輸出通道的指針,第2個(gè)是要傳輸?shù)臄?shù)組指針,第3個(gè)是數(shù)據(jù)字長(zhǎng)。執(zhí)行后會(huì)返回一個(gè)整數(shù),非0代表成功。
④RTDX_sizeofInput()包含輸入通道指針的一個(gè)參數(shù),并返回從緩沖器中讀取的字長(zhǎng),一般在RTDX_read NB()完成一次讀操作后使用它。
⑤RTDX_channelBLasy()包含輸入通道指針的一個(gè)參數(shù),并返回一個(gè)整數(shù)指示通道狀態(tài),0表示通道不忙。
它通常與RTDX_readNB()結(jié)合使用,用于檢查是否有其他讀數(shù)據(jù)請(qǐng)求。
2.2 MATLAB對(duì)RTDX的配置使用
2.2.1 發(fā)送數(shù)據(jù)
在傳輸數(shù)據(jù)之前,MATLAB需要知道目標(biāo)DSP板的信息,完成MATLAB和CCS以及目標(biāo)DSP的連接,使用下面這條指令實(shí)現(xiàn):
h=actxserver(‘RTDX’);
此指令要在DSP加載了可執(zhí)行文件并使能RTDX接口之后才能使用,使用這條指令還創(chuàng)建了與RTDX的連接對(duì)象,h為連接對(duì)象的句柄。
在MATLAB中打開并使能RTDX輸入通道之前,必須在DSP目標(biāo)程序中已經(jīng)創(chuàng)建了該輸入通道,調(diào)用下面這條指令實(shí)現(xiàn):
invoke(h,‘open’,‘ichan’,‘W’);
傳輸數(shù)據(jù)用下面這條指令實(shí)現(xiàn):
invoke(h,‘Write’,intl6(v));
數(shù)據(jù)通過最近打開的輸入通道由MATLAB向DSP寫數(shù)據(jù),intl6(v)表示對(duì)數(shù)據(jù)v做強(qiáng)制數(shù)據(jù)類型轉(zhuǎn)換,因?yàn)槭褂玫腡MS320VC5509A是16位定點(diǎn)DSP。
在完成數(shù)據(jù)傳輸或讀數(shù)據(jù)之前,應(yīng)該將此接口關(guān)閉,使用下面這條指令實(shí)現(xiàn):
invoke(h,‘close’);
2.2.2 接收數(shù)據(jù)
在MATLAB接收數(shù)據(jù)部分并沒有采用發(fā)送數(shù)據(jù)使用的那種最新的RTDX實(shí)現(xiàn)方式,因?yàn)樾路椒ǖ膶?shí)現(xiàn)難度較大,這里介紹通用的實(shí)現(xiàn)方法,具體步驟如下:
①cc=ticcs()實(shí)現(xiàn)MATLAB和CCS以及DSP三者的連接,并創(chuàng)建連接對(duì)象,對(duì)象句柄為cc。
②打開并使能RTDX通道:
cc.rtdx.open(‘ochan’,‘r’);%打開名為ochan的RTDX讀通道(MATLAB從DSP讀)
cc.rtdx.enable(‘ochan’);%使能通道ochan
cc.rtdx.enable;%使能RTDX接口
③讀取數(shù)據(jù):
cc.rtdx.readmsg(‘ochan’,‘intl6’);%讀取16位字的數(shù)據(jù)
3 應(yīng)用實(shí)例
列舉一個(gè)簡(jiǎn)單的求和運(yùn)算來說明RTDX的具體實(shí)現(xiàn)方法,旨在讓讀者掌握如何使用RTDX實(shí)現(xiàn)MATLAB和DSP之間的雙向數(shù)據(jù)傳遞。整個(gè)程序的實(shí)現(xiàn)思路是:首先MATLAB通過RTDX輸入通道向DSP中寫入10個(gè)數(shù)據(jù),然后DSP對(duì)這10個(gè)數(shù)據(jù)求和,最后將這個(gè)和值經(jīng)RTDX輸出通道傳遞給MATLAB。整個(gè)過程的實(shí)現(xiàn)流程如圖2所示。
3.1 DSP程序?qū)崿F(xiàn)
3. 2 MATLAB程序?qū)崿F(xiàn)
MATLAB向DSP寫數(shù)據(jù)
結(jié)語
RTDX技術(shù)巧妙地實(shí)現(xiàn)了MATLAB和目標(biāo)DSP之間的數(shù)據(jù)交換,使開發(fā)者能夠在算法仿真和實(shí)時(shí)處理之間進(jìn)行多次反復(fù),以確定最佳算法和參數(shù),極大地方便了DSP應(yīng)用程序的設(shè)計(jì),縮短了開發(fā)周期。
評(píng)論