采用PCI9052及GP2010實(shí)現GPS信號采集
關(guān)鍵詞:PCI總線(xiàn) GPS DMA
引言
全球定位系統GPS(Global Position System),可以給用戶(hù)提供實(shí)時(shí)的定位、速度和時(shí)間信息?,F在的GPS接收機大多采用硬件電路進(jìn)行碼相關(guān)運算,結構復雜,更新升級比較困難;而基于軟件無(wú)線(xiàn)電的GPS接收機受電路限制較少,更新?lián)Q代只需調整相應軟件,十分靈活。該數據采集卡就是基于以上考慮設計的。
1 PCI9052的特點(diǎn)與功能
PCI9052(以下簡(jiǎn)稱(chēng)9052)提供高性能的從目標PCI接口板卡與PCI總線(xiàn)的連接,支持寬范圍速率的本地總線(xiàn),最高可達132 MB/s的傳輸速率。對9052編程可實(shí)現復用/非復用的8位、16位、32位的本地總線(xiàn)接口。9052還有內部FIFO可以加速本地總線(xiàn)的操作,此外它還有以下功能:
①支持PCI r2.1版本,可以方便地將ISA卡轉換為PCI卡;
②支持從目標傳輸模式,可以對存儲器空間進(jìn)行突發(fā)讀/寫(xiě),對I/O空間單次訪(fǎng)問(wèn);
③2個(gè)本地中斷總線(xiàn)配置;
④可編程的本地總線(xiàn)配置;
⑤串行E2PROM配置;
⑥4個(gè)本地片選引腳,5個(gè)本地空間;
⑦多種本地讀/寫(xiě)操作模式,方便地實(shí)現PCI與本地的接口。
圖1給出了9052內部結構。
2 GP2010射頻前端器件
GP2010(以下簡(jiǎn)稱(chēng)2010)是為GPS接收機設計的射頻前端器件,它接收GPS(L1)調制信號。L1是50位/Hz的信息碼速率經(jīng)過(guò)1.023MHz的偽隨機碼擴頻后以BPSK方式調制在1575.42MHz的載波上形成的擴頻信號。信號電平在進(jìn)入天線(xiàn)之前大約只有-130dB,帶寬為2.046MHz,所以L(fǎng)1基本上被噪聲所掩蓋。2010經(jīng)過(guò)內部鎖相環(huán)頻率綜合器產(chǎn)生1.4GHz、140MHz、與31.11MHz的三級時(shí)鐘分別與射頻輸入的L1信號進(jìn)行混頻,其中還經(jīng)過(guò)3級濾波抑制帶外干擾,最后將其變換到4.309MHz的中頻,然后進(jìn)行5.714MHz的采樣實(shí)現A/D變換(2位量化,符號位SIGN和數據位MAG)。根據奈奎斯特定律對帶通信號要以高于兩倍的信號帶寬進(jìn)行采樣才可無(wú)失真的恢復,用5.714MHz的速率采樣也要考慮到信號傳播過(guò)程中由于相對運動(dòng)而產(chǎn)生的多普勒效應使信號帶寬變寬的緣故。量化數據在每個(gè)時(shí)鐘的上升沿輸出。圖2給出2010的內部結構圖。
圖2 GP2010內部結構圖
3 數據采集卡系統結構
GPS信號數據采集卡實(shí)現基本的一路GPS衛星信號的采集工作。由于2010為2位、5.714MHz的采樣速率,我們在FPGA中首先將2位數據進(jìn)行串并變換,使其每滿(mǎn)32位后進(jìn)行一次傳輸存儲,這樣存儲速率就變?yōu)?57.12kHz。緩存選用4片18k16位的FIFO,這樣就可以省略地址產(chǎn)生邏輯。在程序設計中,采樣數據首先存入FIFO(A),待滿(mǎn)后會(huì )產(chǎn)生相應的中斷,中斷服務(wù)程序將讀取其中的數據。在讀過(guò)程中,采樣數據會(huì )繼續寫(xiě)入FIFO(B),如此反復可將數據采入計算機內存。選用緩存時(shí),建議在可行的情況下,容量越大越好。因為PCI總線(xiàn)上,除了設計的采集卡在不斷地申請占用總線(xiàn)外,還會(huì )有其余的設備占用,如果緩存不夠大將會(huì )丟失采樣數據。FPGA的主要功能是實(shí)現數據串行變換、控制采樣過(guò)程和與FIFO的接口邏輯。圖3是該數據采集卡的系統框圖。
4 9052使用中應該注意的問(wèn)題
9052內部的配置寄存器是通過(guò)外部串行E2PROM上電加載的。9052會(huì )自動(dòng)根據該E2PROM的狀態(tài)來(lái)決定其內部寄存器的值。如果E2PROM不存在(此時(shí)E2PROM和9052連接的數據引腳應加上拉電阻)或其內部無(wú)有效值,9052會(huì )將其內部寄存器配置為缺省值。值得一提的是,如果E2PROM內部沒(méi)有燒寫(xiě)為有效值時(shí),應保證其開(kāi)始48位為全“1”;否則,系統上電時(shí)可能會(huì )產(chǎn)生錯誤。
9052有5個(gè)本地空間,用戶(hù)可根據實(shí)際需要進(jìn)行相應的配置。當將本地空間配置成I/O時(shí),對該空間的讀/寫(xiě)操作只能單次進(jìn)行。利用PLXMon來(lái)開(kāi)發(fā)驅動(dòng)程序(調用其提供的API函數)進(jìn)行I/O讀/寫(xiě),速度會(huì )十分慢(一般不會(huì )超過(guò)500kHz);而如配置成存儲器空間,用戶(hù)會(huì )有多種接入模式,可大大提高接入速度。突發(fā)模式是為提高本地總線(xiàn)操作速度而設計的。在該模式期間,9052只提供一次傳輸開(kāi)始和終止信號。開(kāi)始信號有效后,地址將以本地時(shí)鐘的頻率(最高可達40MHz)遞增,可以利用Bterm#引腳是否有效來(lái)終止突發(fā)操作。由于FIFO只需要一個(gè)口地址,在設計中為了利用其快速的存儲器訪(fǎng)問(wèn)(突發(fā)訪(fǎng)問(wèn))特性,我們還是為其分配了36KB的地址空間,以保證在該范圍內FIFO的片選始終有效。圖4是一次突發(fā)讀時(shí)序。其中LCLK是本地時(shí)鐘,ADS有效表示一次傳輸的開(kāi)始,BLAST有效表示本次傳輸的終止。
在此須澄清一個(gè)概念:Pentium系列計算機(指CPU),不支持突發(fā)讀操作,只可能產(chǎn)生單次讀操作。用戶(hù)若想在PCI總線(xiàn)上實(shí)現突發(fā)操作(FRAME信號有效,多余一個(gè)PCI時(shí)鐘周期),應使用支持DMA傳輸的芯片,如PLX9054。但9052會(huì )將PCI總線(xiàn)上的多次單次讀操作轉化為本地空間上的突發(fā)操作。
5 PLXMon及PLX器件驅動(dòng)程序的開(kāi)發(fā)
PLXMon是PLX公司專(zhuān)為其產(chǎn)品開(kāi)發(fā)的測試軟件。在用戶(hù)的板卡插入PCI槽,并安裝了PLXMon提供的驅動(dòng)程序后,啟動(dòng)該軟件就可以觀(guān)察和修改芯片內部寄存器的值,并可以對存儲器空間進(jìn)行測試。
Windows下的驅動(dòng)程序包括硬件物理設備的驅動(dòng)程序和文件系統等非物理設備的虛擬設備驅動(dòng)程序,我們所編寫(xiě)的是硬件物理設備的驅動(dòng)程序。Windows類(lèi)操作系統(Windows 95、Windows 98、WindowsNT、Windows 2000)為了保證其安全性、穩定性和可移植性,對應用程序訪(fǎng)問(wèn)硬件資源加以限制,用戶(hù)需要對系統硬件及操作系統軟件有詳細的了解才可開(kāi)發(fā)出高效的驅動(dòng)程序,因此開(kāi)發(fā)周期較長(cháng)。利用第三方提供的開(kāi)發(fā)軟件,可以大大縮短開(kāi)發(fā)時(shí)間,但效率不一定高,尤其對實(shí)時(shí)性要求嚴格的程序顯得有些無(wú)力。
①Device Developer Kit(DDK)。該軟件中包括了有關(guān)設備驅動(dòng)開(kāi)發(fā)的文檔、編譯需要的頭文件和庫文件、調試工具和程序范例;但是由于DDK主要是使用匯編語(yǔ)言進(jìn)行描述,開(kāi)發(fā)起來(lái)比較困難。
②VtoolsD。該軟件包是基于C/C++的,支持BorlandC++和VisualC++,使用和維護比較方便。
③WinDriver。允許用戶(hù)使用Visual C++、Borland或者其它Win32編程工具軟件在用戶(hù)模式(UserMode)上編寫(xiě)設備驅動(dòng)程序。
④PLXMon。PLX公司專(zhuān)為其芯片提供的驅動(dòng)程序開(kāi)發(fā)包和測試軟件,同樣可以在用戶(hù)模式上編寫(xiě)。支持Visual C++環(huán)境。
圖4 突發(fā)讀時(shí)序
在開(kāi)發(fā)程序時(shí),我們發(fā)現PLXMon和WinDriver不兼容,而且除非有正式版本的WinDriver;否則試用期過(guò)后,利用它開(kāi)發(fā)的驅動(dòng)程序將無(wú)法使用。所以建立使用PLXMon,只需包括相應的頭文件,用戶(hù)便可以方便地調用其提供的API函數,對板卡上的資源進(jìn)行訪(fǎng)問(wèn)。以下的程序片段是在調試電路板時(shí)編寫(xiě)的基本查詢(xún)中斷是否有效來(lái)讀取緩存的。所調用的函數均為PLXMon提供的API函數。其中:PlxPciBaseAddressesGet()是得到板卡上存儲空間的物理地址,而*(Data+i)=*(U32*)(va.Va3)是將該空間的值裝入計算機內存。
圖5是驅動(dòng)程序流程圖。
程序段如下:
Example:
rc_w=PlxPciBaseAddressesGet(hDevice,va);
while(TRUE){
Int_Flag=*(U32*)(va.Va0+0x4c);
if(Int_Flag[0]4) {
for(i=0;iFIFO_Size;i++)
*(Sample_Data+i)=*(U32*)(va.Va3);
*(U32*)(va.Va0+0x4c)=Clear_Flag;
break;
}
}
結語(yǔ)
由于PCI總線(xiàn)的高速特性,使其被廣泛應用于高速數據采集系統中,有效地解決了實(shí)時(shí)采集、實(shí)時(shí)傳輸和實(shí)時(shí)存儲等問(wèn)題。而PCI總線(xiàn)控制器專(zhuān)用芯片的出現則縮短了PCI總線(xiàn)硬件設備的開(kāi)發(fā)周期,使得硬件設備的可靠性和穩定性都有了較大的提高。在開(kāi)過(guò)程中,我們發(fā)現要想有高效率的操作特性,使用第三方提供的驅動(dòng)程序開(kāi)發(fā)包總是不太理想,尤其對于高速采樣及實(shí)時(shí)嚴格的系統。用戶(hù)還是要利用DDK開(kāi)發(fā)符合自己要求的驅動(dòng)程序。該數據采集卡實(shí)現了一路GPS信號的采集工作,為今后利用通用PC機進(jìn)行數字信號的捕獲、跟蹤及解調,初步實(shí)現軟件無(wú)線(xiàn)電GPS接收機打下基礎。
評論