基于LabVIEW中DSP目標文件加載的實(shí)現
數據采集卡(DAQ)的存儲空間是系統設計的一個(gè)重要的硬件資源,對采樣速率、實(shí)時(shí)處理性與系統功能都有很大的影響。在虛擬頻譜儀設計中,信號采樣數據的存儲、DSP分析、處理信號程序,都需要有足夠內存空間。由于該儀器信號采集數據量大,DSP所實(shí)現的功能多,導致出現存儲空間不足。針對上述問(wèn)題,本文談?wù)勗鯓踊贚abVIEW通過(guò)CLFN調用DLL加載DSP 目標文件(*.out),從而在一定的程序存儲空間情況下來(lái)完成基于DSP數據采集卡的虛擬儀器的研制。
LabVIEW中的CLFN
LabVIEW程序由三部分組成:前面板、框圖程序和圖標/連接器。程序前面板用于設置輸入量和觀(guān)測量,模擬真實(shí)儀器的前面板;每一個(gè)程序前面板都有相應的框圖程序與之對應,框圖程序用圖形編程語(yǔ)言編寫(xiě)。圖標/連接端口可以讓用戶(hù)把VI程序定義為一個(gè)子程序,從而實(shí)現模塊化編程。
調用庫函數節點(diǎn)(Call Library Function Node,CLFN)是一個(gè)圖形化節點(diǎn),是LabVIEW調用C語(yǔ)言編寫(xiě)的可執行程序代碼的一個(gè)通用的方法,常用于調用動(dòng)態(tài)連接庫(DLL),這種方式特別適合于用戶(hù)創(chuàng )建實(shí)現自己特定功能的DLL。但是對C語(yǔ)言的編譯必須通過(guò)外部的開(kāi)發(fā)平臺環(huán)境,在Win9x/NT下可以使用Microsoft Visual C++軟件平臺。
用CLFN調用DLL來(lái)實(shí)現DSP 目標文件加載,簡(jiǎn)要步驟如下:
(1)在LabVIEW程序框圖中放置一CLFN節點(diǎn)。對CLFN設置,建立函數原型:unsigned char dspload(CStr coffname)。其中coffname 是被加載的DSP 目標文件名(*.out),unsigned char 是函數dspload返回值error的類(lèi)型,返回值為0,表明DSP目標文件加載成功,其它值表明加載失敗。
(2)在Microsoft Visual C++環(huán)境下建立DLL工程,從而生成dspload.dll文件。
在源程序中必須包含頭文件:extcode.h和evm6xdll.h。前者是LabVIEW調用外部代碼管理函數集的頭文件,后者是DSP數據采集卡的DLL的頭文件。
(3)設置前面板參數并完成框圖程序,將DSP目標文件加載的前面板與相應的框圖程序,保存為dspload.vi。執行程序dspload.vi前,輸入目標文件名(*.out)。
DSP數據采集卡
所用的數據采集卡是美國TI公司的TMS320C6701 DSP數據采集卡,方框圖如圖1所示。
DSP數據采集卡的特點(diǎn)有:
PCI總線(xiàn)接口,支持即插即用;通過(guò)HPI(Host Port Interface)訪(fǎng)問(wèn)DSP內存;16-bit音頻編解碼器,支持5.5kHz~48kHz采樣率;三種DSP boot 模式:無(wú)自舉模式,HPI 自舉模式,ROM 自舉 模式;256kB同步突發(fā)靜態(tài)RAM (SBSRAM);8MB同步動(dòng)態(tài)RAM (SDRAM)。
TMS320C6701是浮點(diǎn)型DSP,片內有8個(gè)并行的處理單元,分為相同的兩組。8個(gè)獨立的功能單元采用加載/存儲(load/store)體系結構,數據在多處理單元之間的傳輸依靠32個(gè)32bit通用寄存器。
DSP的體系結構采用甚長(cháng)指令字(VLIW)結構,8個(gè)指令組成一個(gè)指令包,總字長(cháng)為256 bit。芯片內部設置了專(zhuān)門(mén)的指令分配模塊,可以將每個(gè)256bit的指令包同時(shí)分配到8個(gè)處理單元,并由8個(gè)單元同時(shí)運行。芯片最大處理能力可以達到2400MIPs。
C6701的存儲器尋址空間為32bit,片內RAM被分為內部程序/Cache存儲器和內部數據/Cache存儲器。當片內的RAM容量不滿(mǎn)足系統的程序/數據空間要求時(shí),可利用外存儲器接口(External Memory Interface,EMIF)在片外進(jìn)行存儲器擴展。EMIF整個(gè)外部空間最大容量為64MB,分為4個(gè)空間CE0~CE3。
HPI(Host-Port Interface)是一個(gè)16bit 的并行接口,外部主機可以通過(guò)HPI直接訪(fǎng)問(wèn)CPU的存儲空間。外部的主機是該接口的主控者。
HPI存取的接口由一套寄存器來(lái)實(shí)現。HPI控制寄存器HPIC(HPI Control Register)完成對接口的設置,主機和CPU都可以訪(fǎng)問(wèn)HPIC;外部主機進(jìn)一步通過(guò)主機地址寄存器HPIA(Host Address Register)和主機數據寄存器HPID(Host Data Register)來(lái)完成對CPU存儲空間的訪(fǎng)問(wèn)。主機對這些寄存器的訪(fǎng)問(wèn)是通過(guò)外部的控制信號實(shí)現的。
HPI到CPU的存儲空間的連接由DMA控制器完成。在C6701中有專(zhuān)門(mén)的DMA輔助通道完成數據傳輸任務(wù)。
軟件設計
在DSP數據采集卡與LabVIEW 的接口應用中主要利用CLFN來(lái)實(shí)現此功能:PC機通過(guò)HPI接口把文件名為*.out可執行文件裝載到DSP程序存儲空間,之后DSP執行該文件。
DSP boot模式設置為HPI 自舉。HPI自舉工作原理如下:在自舉時(shí),核心CPU停留在復位狀態(tài),硬件其余部分均保持正常狀態(tài)。在這期間,外部主機通過(guò)HPI初始化CPU的存儲空間。主機完成所有的初始化工作后,將HPI控制存儲器中的DSPINT設置為1,結束自舉過(guò)程。此時(shí)CPU退出復位狀態(tài),開(kāi)始執行地址0處的指令。HPI自舉過(guò)程中,主機可以對DSPs所有的存儲空間進(jìn)行讀和寫(xiě)。
在軟件設計中,打開(kāi)數據采集卡,以獲取采集卡的句柄;復位DAQ卡之后,設置HPI自舉模式,使DSP處于復位狀態(tài);這時(shí)如果DSP與HPI建立了連接,并且DMA輔助通道的優(yōu)先級比DSP高,通過(guò)調用函數evm6x_coff_load把coffname所指定的目標文件加載到DSP內存中。一旦DSP不處于復位狀態(tài)時(shí),DSP就開(kāi)始執行被加載的文件。
結語(yǔ)
通過(guò)CLFN調用DLL加載DSP目標文件從而節省數據采集卡的內存空間的方法已經(jīng)應用到吉林大學(xué)-TI DSPs實(shí)驗室的虛擬頻譜分析儀中。由于DSP加載程序是C語(yǔ)言程序,因此可移植性好。另外,可看出通過(guò)調用庫函數節點(diǎn)CLFN,將C語(yǔ)言同LabVIEW中編程直觀(guān)方便的圖形化G語(yǔ)言結合起來(lái),以加快程序運行速度,提高軟件性能,并方便程序模塊共享,節省編程時(shí)間?!?/P>
參考文獻:
1. TMS320C6201/6701 Evaluation Module Technical Reference, Texas Instruments, 1998.
2. 任麗香,馬淑芬,李方慧,TMS320C6000系列DSPs的原理與應用,北京:電子工業(yè)出版社,2000.
3. 張雄偉,曹鐵勇,DSP芯片的原理與開(kāi)發(fā)應用(第2版),北京:電子工業(yè)出版社,2001.
4. Using External Code in LabVIEW, National Instruments, 2000.
5. 袁淵,古軍,虛擬儀器基礎教程,電子科技大學(xué)出版社,2000.
圖1 TMS320C6701 DSP數據采集卡方框圖
評論