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