王凱 海軍裝備部 710043
基于CompactPCI總線和DSP技術(shù)的數(shù)據(jù)采集板的設(shè)計(jì)
王凱 海軍裝備部 710043
本文是工程實(shí)踐中,利用TI高性能DSP器件TMS320LF2407實(shí)現(xiàn)對(duì)控制系統(tǒng)中轉(zhuǎn)塔角度的采集、轉(zhuǎn)速采集,是伺服系統(tǒng)控制中的重要環(huán)節(jié),并基于Compact總PCI線遷入控制計(jì)算機(jī)中,與主機(jī)完成實(shí)時(shí)通訊功能。
Compact;PCIDSP;數(shù)據(jù)采集;CPLD
并行總線技術(shù)的發(fā)展,使CompactPCI的優(yōu)勢(shì)很快在電信行業(yè)獨(dú)樹一幟,其優(yōu)良的結(jié)構(gòu)規(guī)范以及電器特性也正為工業(yè)控制、航空、航天領(lǐng)域逐步接受。信息化的發(fā)展使人們認(rèn)識(shí)到其基礎(chǔ)是數(shù)字化,而數(shù)字化的核心技術(shù)之一是數(shù)字信號(hào)處理。數(shù)字信號(hào)處理的任務(wù)在很大程度上需要由DSP器件來完成。同時(shí),DSP在各個(gè)領(lǐng)域日益增長(zhǎng)的應(yīng)用帶動(dòng)了DSP自身的發(fā)展, DSP在其他領(lǐng)域的潛力也是巨大的。
數(shù)據(jù)采集板作為某型號(hào)計(jì)算機(jī)中一塊嵌入式控制板,與伺服控制板、通訊控制板以及CPU板構(gòu)建成一套高性能整機(jī),處于控制系統(tǒng)的核心控制地位,完成實(shí)時(shí)采集陀螺、旋轉(zhuǎn)變壓器的數(shù)據(jù),采集系統(tǒng)探測(cè)信息,通過伺服軟件的PID算法,由D/ A變換輸出模擬校正量到伺服電子箱,實(shí)現(xiàn)伺服系統(tǒng)的閉環(huán)控制。
數(shù)據(jù)采集板采用TI公司的高性能DSP器件TMS320LF2407為核心,通過Compact PCI總線受主控計(jì)算機(jī)的控制,對(duì)系統(tǒng)提供的信息,經(jīng)過數(shù)據(jù)采集軟件處理,輸出模擬量給伺服電子箱。高性能D S P器件TMS320LF2407是TI公司2x系列中的高端產(chǎn)品,主頻最高為50MHz,并采用低功耗設(shè)計(jì),工作電壓為3.3V,外圍器件工作電壓以3.3V為多,大大降低了數(shù)據(jù)采集板的功耗。在實(shí)際設(shè)計(jì)中,外部程序可燒入片上FlashRAM 器件(256K×32bit),實(shí)現(xiàn)了在線編程的特點(diǎn),大大提高了系統(tǒng)的可操作性和可維護(hù)性。角度采集器件選用高分辨率(19bit)高精度(±2lsb)器件,數(shù)據(jù)存儲(chǔ)空間選用高速RAM(256x32bit)掛接在DSP的本地總線上,3.3V信號(hào)與5V信號(hào)采用74LVCC16245A隔離,大容量可編程器件完成DSP對(duì)外部資源控制的譯碼以及兩路同步同步串口數(shù)據(jù)采集變換。
TMS320LF2407 DSP器件采用雙端口RAM 實(shí)現(xiàn)與伺服控制板以及與主機(jī)通訊,DSP器件分別以5和2、1m s(可選)為采樣和處理周期,實(shí)時(shí)采集轉(zhuǎn)塔的位置信息,以及陀螺、旋轉(zhuǎn)變壓器的數(shù)據(jù),并把采集結(jié)果發(fā)送給主機(jī)及伺服控制板。硬件看門狗電路實(shí)現(xiàn)對(duì)模板軟件監(jiān)控,在程序跑飛情況下,實(shí)現(xiàn)對(duì)DSP以及外部電路的軟復(fù)位并向主機(jī)報(bào)錯(cuò)。主機(jī)每隔20m s讀取雙端口RAM中的數(shù)據(jù),DSP在完成每次處理5m s(包含2m s或1m s),在雙端口RAM 中寫入相應(yīng)的處理結(jié)果或工作狀態(tài)信息,供主機(jī)查詢,避免了DSP與主機(jī)之間的中斷處理時(shí)間。
圖1 數(shù)據(jù)采集板功能框圖
PCI橋選用PLX公司的PCI9052橋芯片,工作模式為L(zhǎng)acal方式,PCI9052是PLX公司繼PCI9050之后推出的低成本PCI總線接口芯片,低功耗,PQFP160p in s封裝,可以使局部總線快速轉(zhuǎn)換到PCI總線上。其主要特點(diǎn)如下:
符合PCI2.1規(guī)范,支持低成本從屬適配器
包括一個(gè)64Byte的寫FIFO和一個(gè)32Byte的讀FIFO,通過讀寫FIFOs,可實(shí)現(xiàn)高性能的突發(fā)式數(shù)據(jù)傳輸;
支持兩個(gè)來自局部總線的中斷,可生成一個(gè)PCI中斷,利用軟件寫內(nèi)部寄存器位也可以達(dá)到同樣的目的;
PCI9052的局部總線與PCI總線的時(shí)鐘相互獨(dú)立運(yùn)行,局部總線的時(shí)鐘頻率范圍為0~40MHz,TTL電平,PCI的時(shí)鐘頻率范圍為0~33MHz。兩種總線的異步運(yùn)行方便了高低速設(shè)備的兼容;
可編程的局部總線配置,支持復(fù)用或非復(fù)用模式的8、16或32位的局部總線;
4個(gè)局部設(shè)備片選信號(hào),各設(shè)備的基址和地址范圍及其映射可由串行EEPROM或主機(jī)編程實(shí)現(xiàn);
支持Big/Little Endian 編碼字節(jié)的轉(zhuǎn)換;
局部總線等待狀態(tài),除了用于握手的等待信號(hào)LRDYI# 外,PCI9052還有一個(gè)內(nèi)部等待產(chǎn)生器(包括地址到數(shù)據(jù)周期、數(shù)據(jù)到數(shù)據(jù)周期和數(shù)據(jù)到地址周期的等待);
可編程實(shí)現(xiàn)讀寫信號(hào)選通的延遲和寫周期的保持;
可編程器件邏輯設(shè)計(jì)
在CPLD內(nèi)部邏輯設(shè)計(jì)上,我們?cè)诒疚闹兄饕獙?duì)同步串口的設(shè)計(jì)進(jìn)行比較詳細(xì)的描述,其余為控制譯碼邏輯設(shè)計(jì),在此不再贅述。
本模板的軟件設(shè)計(jì)包括TMS320LF2407相關(guān)軟件的編寫,Vxworks嵌入式操作系統(tǒng)下的驅(qū)動(dòng)程序和測(cè)試軟件的編寫。
3.1 TMS320LF2407相關(guān)軟件
TMS320LF2407軟件的編寫相信大家也比較熟悉,在此主要強(qiáng)調(diào)對(duì).cm d文件的編寫:
C編譯器對(duì)C語(yǔ)言程序編譯后生成六個(gè)可以重新定位的代碼和數(shù)據(jù)塊,這些塊可以用不同的方式分配至存儲(chǔ)器以符合不同系統(tǒng)配置的要求。這六個(gè)塊可以分為兩種類型:已初始化塊和未初始化塊。已初始化主要包括數(shù)據(jù)表和可執(zhí)行代碼。C編譯器共創(chuàng)建三個(gè)已初始化塊:.text塊(包括可執(zhí)行代碼和字符串)、.cinit塊(包含初始化變量和常數(shù)表)和.const塊(字符串和. swith表)。未初始化塊用于保留存儲(chǔ)器空間,程序運(yùn)行時(shí)利用這些空間創(chuàng)建和存儲(chǔ)變量。C編譯器創(chuàng)建三個(gè)未初始化塊:.bss塊(用于保留全局和靜態(tài)變量空間)和. stack塊(為系統(tǒng)堆棧分配存儲(chǔ)器)和. system塊(為動(dòng)態(tài)存儲(chǔ)器函數(shù)分配存儲(chǔ)空間)。
依據(jù)C33的系統(tǒng)資源分配,構(gòu)建系統(tǒng)的CMD文件代碼,在生成COFF(*.out)文件過程中,依據(jù)CMD內(nèi)容把六個(gè)代碼和數(shù)據(jù)段定位到RAM區(qū)的不同地址段上。
以下是本模板的.cmd 文件:
在程序調(diào)試完畢后就可把最終的COFF(.out)可執(zhí)行文件用文件轉(zhuǎn)換程序HEX30制作成可寫入FlashRAM 的16進(jìn)制BOOT文件,燒寫入Flash RAM 中即可。
3.2 VxWorks驅(qū)動(dòng)程序
該模板實(shí)際使用時(shí)工作在VxWorks操作系統(tǒng)下,因此,必須為它編寫VxWorks操作系統(tǒng)下的驅(qū)動(dòng)程序。
VxWorks中對(duì)PCI設(shè)備的操作,首先應(yīng)在系統(tǒng)中找到所需的PCI設(shè)備,然后從它的配置空間中將所需的資源信息取出來,如內(nèi)存基地址、I/O 基地址、中斷號(hào)等,再根據(jù)這些信息及設(shè)備的特性對(duì)其進(jìn)行初始化。
3.2.1 查找PCI設(shè)備
在系統(tǒng)中查找PCI設(shè)備所必需的是設(shè)備的vendor ID和device ID。有了這兩個(gè)信息,就可以調(diào)用pciFind Device()函數(shù)進(jìn)行查找,pciFind Device()的原型為:這個(gè)函數(shù)尋找與指定的vendorId和deviceId相同的第index個(gè)設(shè)備。
該函數(shù)若成功執(zhí)行,則返回OK,此時(shí)在pBusNo,pDeviceNo和pFuncNo中存的是找到的PCI設(shè)備的總線號(hào)、設(shè)備號(hào)及功能號(hào),這些信息在后面的操作中將會(huì)用到。若函數(shù)執(zhí)行不成功,則返回ERROR。
3.2.2 獲取PCI設(shè)備信息
找到PCI設(shè)備后,下一步就是要將它的資源信息從配置空間中讀出來。對(duì)配置空間的讀寫操作一般使用下面的這些函數(shù):
還有一些其它的函數(shù)可進(jìn)行對(duì)PCI配置空間的操作,具體內(nèi)容可以參看VxWorks幫助。
獲取PCI設(shè)備的I/O基地址或內(nèi)存基地址
可以使用下面的函數(shù)來獲取PCI設(shè)備所分配的內(nèi)存資源:
其中pActualRes是一個(gè)結(jié)構(gòu)體,里面保存與PCI設(shè)備相關(guān)的信息,定義如下:
pActualRes.pciBus,pActualRes. pciDevice,pActualRes.pciFunc分別是執(zhí)行pciFindDevice()函數(shù)時(shí)獲得的pBusNo,pDeviceNo, pFuncNo 。PCI_CFG_BASE_ADDRESS_0 是要讀取的數(shù)據(jù)在PCI配置空間中的偏移量,它們?cè)谖募ciConfigLib.h中定義,BaseAddress為讀出的I/O空間的基地址或內(nèi)存空間基地址,具體是哪一類空間由讀出數(shù)據(jù)的最低位來判斷,若最低位為0,則為內(nèi)存空間,為1,則是I/O空間。
若讀出的是I/O空間基地址,在使用前,需先將它和PCI_IOBASE_MASK 進(jìn)行與運(yùn)算,以屏蔽最低兩位。PCI_IOBASE_MASK 也在pciConfigLib.h中定義。
得到基地址后,可用下面的函數(shù)進(jìn)行內(nèi)存或I/O的讀寫操作:
還有一些其它的相關(guān)函數(shù),它們的定義在syslib.h中。
獲取PCI設(shè)備的IRQ:
對(duì)分配有中斷的設(shè)備,可以用下面的函數(shù)來得到系統(tǒng)為它分配的中斷資源:
irq中是讀出的PCI設(shè)備的IRQ。知道了IRQ后,還需要知道中斷向量,X86平臺(tái)的機(jī)器上中斷向量為IRQ+0X20。得到中斷向量后,就可以將中斷與中斷服務(wù)程序連接起來。一般設(shè)備將中斷與中斷服務(wù)程序連接時(shí)用intConnect()函數(shù),而對(duì)于PCI設(shè)備則需用pciIntConnect,如:
pciIntConnect (INUM_TO_IVEC(ivec), isr,0)
其中ivec為中斷向量,isr為中斷服務(wù)程序,最后是傳給中斷服務(wù)例程的參數(shù)。
3.3 測(cè)試程序的編寫
驅(qū)動(dòng)程序編寫完成后,進(jìn)行編譯,連接后生成驅(qū)動(dòng)程序目標(biāo)代碼,將其拷貝到相應(yīng)bsp目錄下,并在config.h文件中加入對(duì)該設(shè)備的聲明。
創(chuàng)建一個(gè)新的工程文件,在builds->macros->Extra MODULES->Value 中添入生成的驅(qū)動(dòng)程序文件,具體路徑需根據(jù)實(shí)際情況改變。
使用時(shí)驅(qū)動(dòng)程序時(shí),必須先調(diào)用先對(duì)驅(qū)動(dòng)程序進(jìn)行安裝,例:
從設(shè)備中讀取數(shù)據(jù)時(shí),使用read()函數(shù),其調(diào)用格式如下:
向設(shè)備中寫入數(shù)據(jù)時(shí),使用w rite()函數(shù),其調(diào)用格式如下:
其中fd為打開的設(shè)備句柄,inbuf為接收緩沖區(qū),outbut為輸出緩沖區(qū),len為輸入輸出的長(zhǎng)度。
[1]蘇濤,蔡建隆,何學(xué)輝.DSP接口電路設(shè)計(jì)與編程.西安:西安電子科技大學(xué)出版社.2003
[2]http://focus.ti.com/dsp
10.3969/j.issn.1001-8972.2011.09.074