基于DSP的PCI高速測控系統(tǒng)結(jié)構(gòu)的研究設(shè)計
PC219054提供了三個物理總線接口: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所示。
PCI9054在DMA傳輸方式下,通過設(shè)置其DMA控制器內(nèi)部的寄存器即可實現(xiàn)兩總線之間的數(shù)據(jù)傳送。傳輸過程由以下幾個步驟實現(xiàn):
1.設(shè)置傳輸方式寄存器:通過寄存器DMA MODE0或DMAMODE1的位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è)的地址空間。
當(dāng)進行數(shù)據(jù)采集時,由應(yīng)用程序或通過DSP的外部引腳(pin21)向DSP發(fā)出采集命令,同時復(fù)位FIFO,在13SP內(nèi)部程序和CPLD的控制下,數(shù)據(jù)經(jīng)DO-31源源不斷地輸入到FIFO中,當(dāng)FIFO半滿時發(fā)出半滿標志信號(HF#),CPLD接到半滿信號后,立即向PCI9054發(fā)出中斷請求信號(LINT),驅(qū)動程序響應(yīng)中斷,在中斷響應(yīng)程序內(nèi),發(fā)出讀命令、要讀取的字節(jié)數(shù)、傳輸方向、地址信號等,PCI9054設(shè)定DMA傳輸開始位啟動數(shù)據(jù)傳輸,當(dāng)ADS#為低(有效),BLAST為高(無效),LW/R為低(有效)時,表明PCI9054開始一個有效的讀數(shù)據(jù)周期,CPLD產(chǎn)生一個低電平信號REN#給FIFO,同時作為Ready信號返回給PCI9054, 表明已準備就緒。直到ADS#為高(無效)且BLAST#為低(有效)時,表明PCI9054已經(jīng)開 始最后一個周期,同時設(shè)定D M A傳輸結(jié)束位結(jié)束DMA操作,此時REN#信號再次變高電平(無效),完成一次數(shù)據(jù)突發(fā)傳輸。接口電路如圖4所示。
該系統(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ū)Чδ埽軌蚍浅7奖愕貙崿F(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和K C o m m o n D m a B U ff e r。KDmaTransfer用于DMA傳輸控制。KdmaAdapter用于建立一個DMA適配器來說明DMA通道的特性。KCommonDmaBuffer用于申請系統(tǒng)提供的公用緩沖區(qū)。
執(zhí)行過程中驅(qū)動程序首先設(shè)置PCI9054的工作方式和中斷寄存器、DMA配置寄存器,然后等待本地中斷的到來。當(dāng)FIFO半滿時表明本地中斷到來,在設(shè)備成員函數(shù)Isr_IrqO中屏蔽本地中斷,在設(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)用前景。
評論