新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > MATLAB與DSP使用RTDX的實時數(shù)據(jù)交換

MATLAB與DSP使用RTDX的實時數(shù)據(jù)交換

作者: 時間:2017-02-06 來源:網(wǎng)絡 收藏

  摘要:采用輔助程序的開發(fā)和調(diào)試,能加快應用程序的開發(fā)。實時數(shù)據(jù)交換(RTDX)為設計、驗證算法提供了一個快速、方便的解決方案。本文對RTDX的工作原理進行了分析,討論了與DSP使用RTDX插件實現(xiàn)雙向數(shù)據(jù)傳輸?shù)膶崿F(xiàn)方式,并通過一個簡單的實例說明RTDX的具體實現(xiàn)過程。

本文引用地址:http://2s4d.com/article/201702/343613.htm

  引言

  在傳統(tǒng)的DSP(Digital Signal Processor)應用程序開發(fā)過程中,涉及的算法一般先用語言進行仿真,仿真結(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程序中由于設計或精度導致的結(jié)果偏差。如此反復進行,應用程序開發(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ā)板進行的。目前大多數(shù)書籍就CCSLink的描述主要是基于MATLAB6.5的,而后續(xù)的MATLAB版本對CCSLink做了一定的修改和完善。RTDX插件作為CCSLink的重要組成部分之一,有其獨特的優(yōu)勢。在接下來的內(nèi)容中將對RTDX做詳細介紹,旨在向DSP研發(fā)人員提供一種更快捷的RTDX使用方式。

  1 CCSLink的構成

  CCSLink由3部分組成:

  ①與CCS IDE的連接對象。利用此對象可以創(chuàng)建CCS與MATLAB的連接,執(zhí)行相應的MATLAB命令就可以運行CCS中的應用程序,與目標DSP的存儲器和寄存器進行雙向數(shù)據(jù)交換。其優(yōu)點在于:

  (a)用戶可以利用MATLAB強大的數(shù)據(jù)分析和可視化功能,節(jié)省設計和調(diào)試程序的時間。

  (b)可以編寫用于調(diào)試數(shù)字信號處理程序的MATLAB語言批處理腳本,實現(xiàn)調(diào)試和分析的自動化。

 ?、谂cRTDX的連接對象。提供了MATLAB與目標DSP之間的實時通信通道,利用此通道可以實時地與目標DSP進行數(shù)據(jù)交換而不用停止DSP上正在執(zhí)行的程序。Link for RTDX實現(xiàn)了對實時數(shù)據(jù)的自動化高級分析和可視化,同時也實現(xiàn)了對復雜DSP程序的有效驗證。

  RTDX包括主機和目標DSP兩部分,如圖1所示。在DSP上有一個小的RTDX庫(RTDX Target Library),其使用一個基于掃描的仿真器,通過增強型JTAG接口在主機和DSP之間傳輸數(shù)據(jù)。DSP應用程序則通過調(diào)用RTDX庫的API函數(shù)來完成主機和DSP之間的通信。主機方運行CCS軟件,CCS軟件同樣帶有一個RTDX庫(RTDX Host Library),通過一個COM接口將實時數(shù)據(jù)在主機上顯示。這樣,MATLAB中設計的參數(shù)可以通過RTDX輸入通道寫入DSP的存儲單元,而算法的最后結(jié)果也可以通過RTDX的輸出通道上傳到MATLAB中,通過編寫MATLAB程序來顯示、分析信號處理的結(jié)果。

 

 ?、矍度雽ο?。在MATLAB環(huán)境中能夠創(chuàng)建一個代表嵌入在目標C程序中的變量對象,利用嵌入式對象可以像處理MATLAB的變量那樣直接訪問嵌入在目標DSP的存儲器和寄存器中的變量。

  上述3種連接對象的實現(xiàn)方式略有不同,與CCS IDE的連接對象和嵌入式對象在數(shù)據(jù)的傳遞時可以不在目標DSP程序中添加額外的語句,而與RTDX的連接對象在進行數(shù)據(jù)傳遞時則需要在目標DSP程序中添加操縱RTDX通道的語句。

  2 RTDX的工作原理

  實現(xiàn)MATLAB和目標DSP之間的實時數(shù)據(jù)交換,既需要在目標DSP程序中添加特定的語句,又需要MATLAB使用特定的語句實現(xiàn)與目標DSP的數(shù)據(jù)傳遞。

  2.1 DSP對RTDX的配置使用

  2.1.1 設置RTDX輸入輸出通道

  首先向工程文件中添加頭文件“rtdx.h”、主程序文件“main.c”和其他使用到RTDX的文件。

  基于工程是否有與主機通信的需要,在“main.c”中添加輸入或輸出通道。通道的聲明采用全局變量的形式,不得包括在任何函數(shù)之中。

  RTDX_CreateInputChannel(ichan);

  /*創(chuàng)建名為ichan的輸入通道*/

  RTDX_CreateOutputChannel(ochan);

  /*創(chuàng)建名為ochan的輸出通道*/

  默認情況下,這些通道是不能在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”,手動使能RTDX接口。

  2.1.2 使用RTDX讀寫數(shù)據(jù)

  DSP中的RTDX目標庫提供了一些C函數(shù)發(fā)送和接收數(shù)據(jù):

 ?、賀TDX_readNB()讀數(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。

 ?、跼TDX_write()寫數(shù)據(jù)函數(shù)也包括3個參數(shù):第1個是輸出通道的指針,第2個是要傳輸?shù)臄?shù)組指針,第3個是數(shù)據(jù)字長。執(zhí)行后會返回一個整數(shù),非0代表成功。

 ?、躌TDX_sizeofInput()包含輸入通道指針的一個參數(shù),并返回從緩沖器中讀取的字長,一般在RTDX_read NB()完成一次讀操作后使用它。

 ?、軷TDX_channelBLasy()包含輸入通道指針的一個參數(shù),并返回一個整數(shù)指示通道狀態(tài),0表示通道不忙。

  它通常與RTDX_readNB()結(jié)合使用,用于檢查是否有其他讀數(shù)據(jù)請求。

  2.2 MATLAB對RTDX的配置使用

  2.2.1 發(fā)送數(shù)據(jù)

  在傳輸數(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’,intl6(v));

  數(shù)據(jù)通過最近打開的輸入通道由MATLAB向DSP寫數(shù)據(jù),intl6(v)表示對數(shù)據(jù)v做強制數(shù)據(jù)類型轉(zhuǎn)換,因為使用的TMS320VC5509A是16位定點DSP。

  在完成數(shù)據(jù)傳輸或讀數(shù)據(jù)之前,應該將此接口關閉,使用下面這條指令實現(xiàn):

  invoke(h,‘close’);

  2.2.2 接收數(shù)據(jù)

  在MATLAB接收數(shù)據(jù)部分并沒有采用發(fā)送數(shù)據(jù)使用的那種最新的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取數(shù)據(jù):

  cc.rtdx.readmsg(‘ochan’,‘intl6’);%讀取16位字的數(shù)據(jù)

  3 應用實例

  列舉一個簡單的求和運算來說明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所示。

 

  3.1 DSP程序?qū)崿F(xiàn)

 

    

 

  3. 2 MATLAB程序?qū)崿F(xiàn)

  MATLAB向DSP寫數(shù)據(jù)

 

    

 

  結(jié)語

  RTDX技術巧妙地實現(xiàn)了MATLAB和目標DSP之間的數(shù)據(jù)交換,使開發(fā)者能夠在算法仿真和實時處理之間進行多次反復,以確定最佳算法和參數(shù),極大地方便了DSP應用程序的設計,縮短了開發(fā)周期。



關鍵詞: MATLAB DSP

評論


相關推薦

技術專區(qū)

關閉