基于DSP的PCI高速測控系統(tǒng)結(jié)構(gòu)的研究
摘 要:本文提出一種基于DSP的PCI測控系統(tǒng)的設(shè)計思想,系統(tǒng)采用DSP作為外圍核心處理單元,PCI9054作為PCI橋芯片,著重論述了測控系統(tǒng)的數(shù)據(jù)采集與傳輸?shù)挠布涌诮鉀Q方案和驅(qū)動程序設(shè)計。
關(guān)鍵詞:PCI總線;DSP;WDM驅(qū)動;測控系統(tǒng)
引 言
隨著數(shù)字信號處理芯片性價比的不斷提高,數(shù)字信號處理的應(yīng)用領(lǐng)域飛速發(fā)展,同時Pentium高速CPU的出現(xiàn),要求有極高的數(shù)據(jù)通量予以支持,而低速的ISA總線在解決這些問題方面逐漸無能為力,取而代之的是高速的PCI總線。PCI總線可將高速外圍設(shè)備直接掛在CPU總線上,33MHz/32位時數(shù)據(jù)傳輸速率可達132MB/s,66MHz/64位時更是性能加倍,打破了數(shù)據(jù)傳輸速率的瓶頸,使得CPU的性能得到充分發(fā)揮。如果采用美國TI公司生產(chǎn)的高速高性能數(shù)字信號處理器DSP取代原來的單片機作為板載CPU,可以充分利用PCI總線的優(yōu)點直接將采集的數(shù)據(jù)傳到微機內(nèi)存,有效地解決了數(shù)據(jù)的實時傳輸和存儲問題。
測控系統(tǒng)的硬件組成
系統(tǒng)基本硬件結(jié)構(gòu)如圖1所示。整個高速測控系統(tǒng)主要由信號調(diào)理電路、DSP模塊、FIFO存儲器、CPLD控制電路、PCI9054接口芯片等組成。系統(tǒng)采用主從結(jié)構(gòu),PC機作為上位機,用于完成對系統(tǒng)的控制(如AD轉(zhuǎn)換的開始、DSP復(fù)位、中斷響應(yīng)、數(shù)據(jù)接收與處理等)。DSP作為下位機,用于完成數(shù)據(jù)的采集與處理、PWM波以及其他外圍信號的控制等。
圖1 系統(tǒng)硬件結(jié)構(gòu)圖
DSP測控模塊介紹
系統(tǒng)采用的DSP芯片為TI公司的TMS320LF2407。電路設(shè)計時,利用的DSP內(nèi)部的16通道A/D轉(zhuǎn)換實現(xiàn)數(shù)據(jù)采集,DSP與FIFO的電路接口電壓都為3.3V,可實現(xiàn)無縫連接,DSP的數(shù)據(jù)總線直接與FIFO的數(shù)據(jù)輸入端口相連,DSP與FIFO的時鐘頻率應(yīng)設(shè)為相同。這樣,無需插入等待周期,控制信號經(jīng)CPLD直接轉(zhuǎn)換為FIFO的讀寫信號,實現(xiàn)數(shù)據(jù)的高速存儲。
先進先出存儲器
在DMA傳輸方式下,由于PCI9054內(nèi)部的FIFO只有32級深度,實時傳送高速數(shù)據(jù)時,PCI9054內(nèi)部的FIFO會很快存滿,而DSP內(nèi)的數(shù)據(jù)仍會源源不斷的傳送過來,易造成數(shù)據(jù)的丟失,因此必須要擴展外部FIFO。
本系統(tǒng)采用IDT公司高速CMOS同步FIFO芯片IDT72V3660,它的容量為4096×36bit;有高達100MHz的讀寫速度;可以兼容3.3V和5V兩種接口電壓。該FIFO具有標準的“滿”(FF#)、“半滿”(HF#)、“空”(EF#)等標志。系統(tǒng)可以根據(jù)這些標志信號控制對FIFO的讀寫操作。在CPLD的邏輯控制下,當WEN#有效時,在WCLK的每一個上升沿,F(xiàn)IFO會把輸入數(shù)據(jù)線上的數(shù)據(jù)存入內(nèi)部存儲器。當REN#有效且輸出允許(OE#有效)時,在RCLK的每一個上升沿,F(xiàn)IFO會把內(nèi)部存儲器中的數(shù)據(jù)發(fā)送到輸出數(shù)據(jù)總線上(低電平用“#”表示)。
控制邏輯芯片CPLD
本系統(tǒng)采用Altera公司的EPM7128來實現(xiàn)系統(tǒng)的邏輯控制,主要包括DSP控制邏輯、FIFO控制邏輯、PCI9054接口控制邏輯三個部分,其中,對PCI9054的邏輯控制是設(shè)計的重點。設(shè)計中利用MaxPlusⅡ軟件進行VHDL語言編程、仿真和調(diào)試。
PCI9054及外部接口分析
PCI與板載CPU的橋接有兩種設(shè)計方案,一種是采用FPGA,通過軟件編程實現(xiàn)硬件功能。另一種是利用專用PCI橋接芯片,適合快速開發(fā)的場合。
本系統(tǒng)采用PLX公司的PCI總線專用接口控制芯片PCI9054。它符合PCIV2.1和PCIV2.2規(guī)范;可同時支持3.3V和5V兩種信號環(huán)境;提供了兩個獨立的可編程DMA控制器;內(nèi)部有6種可編程FIFO,以實現(xiàn)零等待突發(fā)傳輸及局部總線和PCI總線之間的異步操作;在PCI總線端支持33MHz/32位,傳輸速率最高可達132MB/s;在局部端可編程實現(xiàn)8/16/32位的數(shù)據(jù)寬度,支持復(fù)用/非復(fù)用的32位地址/數(shù)據(jù),時鐘最高可達50MHz。
PCI9054局部總線可工作在M、J、C三種模式,M模式是專門為Motorola公司的MPC850和MPC860提供直接非復(fù)用的接口;J模式地址/數(shù)據(jù)線復(fù)用;C模式與J模式差別不大,但地址/數(shù)據(jù)線非復(fù)用,更符合連接習慣。本設(shè)計采用C模式。
PCI9054的數(shù)據(jù)傳輸模式可分為主模式、從模式、DMA模式。模式的選擇主要根據(jù)硬件設(shè)計者對硬件的設(shè)計需要而定。本系統(tǒng)采用DMA模式,在DMA傳輸模式下,PCI9054既是PCI端的主控方,又是局部端的主控方。
PCI9054集成了兩個互相獨立的DMA通道,每個通道都支持Block DMA和Scatter/Gather DMA,其中通道0還支持請求(Demand) DMA傳輸方式。當有通道進行DMA傳輸時,DMA控制器將發(fā)起對局部總線和PCI總線操作,其傳輸過程如圖2所示。
圖2 DMA傳輸過程
PCI9054提供了三個物理總線接口:PCI總線接口、EEPROM接口、局部總線接口。PCI總線接口依照PCI擴展板上定義的引腳分配情況將彼此對應(yīng)的信號連接在一起即可。本系統(tǒng)采用的EEPROM為4K、3.3V串行的93LC66B,通過對PCI時鐘分頻來產(chǎn)生EEPROM時鐘,內(nèi)部存放PCI9054的配置信息,系統(tǒng)加電時PCI9054自動加載EEPROM中的配置信息,并由BIOS通過PCI總線對配置寄存器讀寫,來完成各種控制功能。接口電路如圖3所示。
圖3 PCI9054與EEPROM的接口
PCI9054在DMA傳輸方式下,通過設(shè)置其DMA控制器內(nèi)部的寄存器即可實現(xiàn)兩總線之間的數(shù)據(jù)傳送。傳輸過程由以下幾個步驟實現(xiàn):
1. 設(shè)置傳輸方式寄存器:通過寄存器DMA MODE0或DMA MODE1的位9來設(shè)置DMA通道的傳輸方式,置0表示Block傳輸,置1表示Scatter/Gather傳輸;
2. 設(shè)置命令/狀態(tài)寄存器:啟動/停止DMA操作,并讀此寄存器返回DMA狀態(tài);
3. 設(shè)置描述寄存器:設(shè)置DMA的傳輸方向;
4. 設(shè)置傳輸計數(shù)寄存器:以字節(jié)為單位設(shè)置傳輸數(shù)據(jù)量;
5. 設(shè)置PCI地址寄存器:設(shè)置PCI總線側(cè)的地址空間;
6. 設(shè)置局部地址寄存器:設(shè)置局部總線側(cè)的地址空間。
當進行數(shù)據(jù)采集時,由應(yīng)用程序或通過DSP的外部引腳(pin21)向DSP發(fā)出采集命令,同時復(fù)位FIFO,在DSP內(nèi)部程序和CPLD的控制下,數(shù)據(jù)經(jīng)D0-31源源不斷地輸入到FIFO中,當FIFO半滿時發(fā)出半滿標志信號(HF#),CPLD接到半滿信號后,立即向PCI9054發(fā)出中斷請求信號(LINT),驅(qū)動程序響應(yīng)中斷,在中斷響應(yīng)程序內(nèi),發(fā)出讀命令、要讀取的字節(jié)數(shù)、傳輸方向、地址信號等,PCI9054 設(shè)定“DMA傳輸開始位”啟動數(shù)據(jù)傳輸,當ADS#為低(有效),BLAST為高(無效),LW/R為低(有效)時,表明PCI9054開始一個有效的讀數(shù)據(jù)周期,CPLD產(chǎn)生一個低電平信號REN#給FIFO,同時作為Ready信號返回給PCI9054,表明已準備就緒。直到ADS#為高(無效)且BLAST#為低(有效)時,表明PCI9054已經(jīng)開始最后一個周期, 同時設(shè)定DMA“傳輸結(jié)束位”結(jié)束DMA操作,此時REN#信號再次變高電平(無效),完成一次數(shù)據(jù)突發(fā)傳輸。接口電路如圖4所示。
圖4 PCI9054接口控制原理圖
PCI驅(qū)動程序設(shè)計
該系統(tǒng)的軟件設(shè)計主要包括DSP測控程序、PCI設(shè)備驅(qū)動程序和Windows應(yīng)用程序三個部分。驅(qū)動程序是連接硬件系統(tǒng)和應(yīng)用程序的橋梁,是整個測控系統(tǒng)開發(fā)中的關(guān)鍵一步。在此簡單介紹一下PCI設(shè)備驅(qū)動程序開發(fā)過程。
在Windows環(huán)境下共有三種類型的驅(qū)動程序,分別是VXD、NT、WDM。因為WDM可以應(yīng)用在windows98/2000/XP下,支持即插即用、電源管理、WMI等功能,是Windows NT驅(qū)動體系基礎(chǔ)上發(fā)展起來的未來主流驅(qū)動程序體系,所以為這里選擇設(shè)計WDM驅(qū)動程序。
開發(fā)工具選擇Compuware公司提供的DriverStudio完成驅(qū)動程序的開發(fā),DriverWorks是DriverStudio中的一個部分,DriverWorks中的類庫封裝了針對驅(qū)動程序的各種通用操作,使用其中的DriverWizard向?qū)Чδ?,能夠非常方便地實現(xiàn)WDM驅(qū)動程序的開發(fā),
其中PCI配置空間的訪問采用KPciConfiguration實現(xiàn)。I/O訪問采用DriverStudio中的KIoRange類實現(xiàn)。硬件中斷響應(yīng)的處理可以采用Kinterrupt類實現(xiàn)。DMA讀主要是利用三個類來實現(xiàn)數(shù)據(jù)傳輸,分別為:KDmaTransfer、KdmaAdapter和KCommonDmaBuffer。KDmaTransfer用于DMA傳輸控制。KdmaAdapter用于建立一個DMA適配器來說明DMA通道的特性。 KCommonDmaBuffer用于申請系統(tǒng)提供的公用緩沖區(qū)。
執(zhí)行過程中驅(qū)動程序首先設(shè)置PCI9054的工作方式和中斷寄存器、DMA配置寄存器,然后等待本地中斷的到來。當FIFO半滿時表明本地中斷到來,在設(shè)備成員函數(shù)Isr_Irq()中屏蔽本地中斷,在設(shè)備成員函數(shù)DpcFor_Irq()中調(diào)用KDmaTransfer:: Continue()函數(shù)進行DMA傳輸。一次數(shù)據(jù)傳輸完畢后,驅(qū)動程序通過操作系統(tǒng)將內(nèi)核中的數(shù)據(jù)拷貝到用戶態(tài)內(nèi)存,交給應(yīng)用軟件處理。
結(jié)語
在實驗室中利用PCI9054作為接口芯片的高速測控系統(tǒng),可實現(xiàn)持續(xù)數(shù)據(jù)傳輸速率達50MB/s,且系統(tǒng)運行穩(wěn)定,具有廣泛的應(yīng)用前景。
參考文獻
1.劉和平,張衛(wèi)寧.TMS320LF/LC24系列DSP的CPU與外設(shè)[M].北京:清華大學(xué)出版社,2004.
2.申江云,寧 濱.一種實時的交通信息采集處理系統(tǒng)的設(shè)計與實現(xiàn)[J].微計算機信息,2005(11):62-64.
3.李貴山,陳金鵬.PCI局部總線及其應(yīng)用[M].西安:西安電子科技大學(xué)出版社,2003.
4.PLX Technology Inc.PCI9054 Data Book[OL].美國:PLX公司.2000.
5.武安河.Windows 2000/XP WDM設(shè)備驅(qū)動程序開發(fā)[M].北京:電子工業(yè)出版社,2005.