基于DSP的PCI總線數(shù)據采集系統(tǒng)的研究
隨著數(shù)字信號處理器性能的不斷提高及其成本與售價的大幅下降,數(shù)字信號處理應用領域飛速擴展,信號處理進入了一個新的發(fā)展時期。同時隨著計算機技術以及互聯(lián)網絡技術的不斷發(fā)展,越來越多的數(shù)據需要經過計算機來進行處理、存儲、傳輸籌操作。計算機的應用已經遍及我們生活的每一個角落。由于計算機本身的特點,通用計算機通常僅負責沒有實時性要求的工作,而不適于進行實時性要求很高的數(shù)字信號處理。將計算機和 DSP有機地結合起來,充分利用各自的優(yōu)點,它們將會相得益彰,滿足現(xiàn)實應用中對數(shù)據實時處理能力、數(shù)據傳輸能力以及數(shù)據管理能力提出的越來越高的要求。 PCI總線以其眾多優(yōu)點在計算機中具有不可取代的作用,采用PCI總線使DSP與計算機通信可以很好地滿足其對高速數(shù)據傳輸?shù)囊?。本文以實際開發(fā)系統(tǒng)為背景,以TI公司的TMS320VC5402與PLX公司的PCI9052為基礎。詳細論述了基于DSP的PCI總線結構的數(shù)據采集系統(tǒng)硬件及軟件設計方案和實現(xiàn)方法。
2 數(shù)據采集系統(tǒng)硬件設計
2.1 系統(tǒng)結構及原理
基于DSP的PCI總線高速數(shù)據采集系統(tǒng)的結構如圖1所示,它主要由A/
A/D轉換器采用TI公司的TLC5510,TLC5510為8 bit、20 MS/s的高速并行A/D轉換器。TLC5510在每個時鐘的下降沿采樣,該采樣點的轉換數(shù)據經過2.5個延遲后,在時鐘的上升沿輸出,也就是每個點的轉換時間為2.5個時鐘周期,一旦轉換流水線啟動,則在每個時鐘的上升沿都有一個轉換數(shù)據輸出。
DSP與計算機之間的通信由接口電路PCI9052實現(xiàn)。PCI9052是PLX公司推出的一種簡單、高效的PCI從設備接口,可實現(xiàn)多種外設局部總線和PCI總線的互連。根據PCI規(guī)范,主設備和從設備的劃分本質上是確定數(shù)據傳輸雙方訪問與被訪問的能力和關系。在此,PCI9052只能由主機或其它擁有總線主控制能力的設備進行數(shù)據的讀寫操作。但由于其內部有64Byte寫FIFO和32Byte讀FIFO,使PCI9052的局部總線和PCI總線能互相獨立工作,可支持傳輸速度為132 Mb/s的突發(fā)傳輸[2]。
DSP采用TI公司的TMS320VC5402,它的處理能力可達到100 Mb/s,具有改進型的8位HPI接口,有16 K*16 Bit DARAM,以及4 K*l6 Bit ROM存儲空間。具有較高的性價比[3]。
2.2 PCI9052與TMS320VC5402的接口
PCI9052的局部總線設置為8位局部總線,采用地址數(shù)據非復用模式,PCI9052和TMS320VC5402的接口電路如圖2所示[4,5]。此時,LBE1為LA1,LBE0為LA0。將PCI9052的LBE0接HPI的HBIL,用以區(qū)分第一字節(jié)和第二字節(jié)。PCI9052的LA17接TMS320VC5402的HCNTL1,LA16接HC-NTL0,以選擇HPI寄存器。PCI9052的LAD[0:7]接TMS320VC5402的HD[7:0]。TMS320VC5402的HINT反向后接至PCI9052的LINT1,之所以反向是由于HINT低電平有效,而UNT1是高電平有效。PCI9052的LW/R反向后接至TMS320VC5402的HR/W,因為LW/R高電平表示寫,低電平表示讀;而HR/W高電平表示主機要讀HPI,低電平表示主機要寫HPI。PCI9052的CS0與CS1相或后連接至HCS,RD和WR分別連接到HDS1,HDS2。TMS320VC5402的LRDY通過一定的邏輯組合再加上一個D觸發(fā)器與PCI9052的LRDY相連以實現(xiàn)PCI9052與HPI的同步。PCI9052局部時鐘采用40MHz。其中CPLD選用EPM7128,使用MAX+PLUSⅡ進行設計。
HPI主機接口采用訪問寄存器的方式來進行DSP內部數(shù)據的讀寫,把HPI口單純映射到PCI的I/O空間或者存儲器空間都有不可避免的缺點,因此本接口電路采用雙映射方式,利用映射來訪問控制、地址寄存器和單個數(shù)據口,而利用存儲器映射來訪問連續(xù)數(shù)據口。以實現(xiàn)TMS320VC5402與PCI9052之間方便、高效的數(shù)據通信[6]。
3 數(shù)據采集系統(tǒng)軟件的設計
數(shù)據采集系統(tǒng)的軟件設計包括三個部分:DSP上的采集程序及響應程序。數(shù)據采集卡的驅動程序,在驅動程序上構建的應用程序。驅動程序是實現(xiàn)DSP與計算機通信的關鍵,本文主要介紹設備驅動模型及其初始化的設計方法。
3.1 驅動程序模型
Win2000不支持直接訪問硬件,虛擬驅動器依賴運行在內核模式的真正的驅動器。內核模式驅動程序使用系統(tǒng)級代碼編寫,且運行在內核模式下,因為內核模式允許直接硬件訪問。內核驅動程序可被進一步分成遺留模式的驅動程序和Windows驅動模式的驅動程序(WDM)。
Windows驅動程序模型(WDM)如圖3所示。圖中左邊是一個設備對象堆棧。設備對象是系統(tǒng)為幫助軟件管理硬件而創(chuàng)建的數(shù)據結構。處于堆棧最底層的設備對象稱為物理設備對象(PDO)。在設備對象堆棧的中間某處有一個功能設備對象(FDO)。FDO的上面和下面還會有一些過濾設備對象。位于FDO上面的過濾設備對象稱為上層過濾器,位于FDO下面的過濾器設備對象稱為下層過濾器。
總線驅動器的任務之一就是枚舉總線上的設備。并為每個設備創(chuàng)建一個PDO。一旦總線驅動器程序檢查到新硬件存在,PnP管理器就創(chuàng)建一個PDO,創(chuàng)建完PDO后,PnP管理器參照注冊表中的信息查找與這個PDO相關的過濾器和功能驅動程序。系統(tǒng)安裝程序負責這些注冊表項,而驅動程序包中控制硬件安裝的INF文件負責添加其他表項。這些表項定義了過濾器和功能驅動程序
3.2 驅動程序的初始化
PnP管理器先裝入硬件需要的驅動程序,然后再調用驅動程序中的AddDevice函數(shù)。一個驅動程序可以被多個類似的硬件使用。但驅動程序的某些全局初始化操作只能在第一次被裝入時執(zhí)行一次。而DriverEntry例程就是用于這個目的。DriverEntry是內核模式驅動程序主入口點常用的名字。I/O管理器按下面方式調用該例程:
DriverEntry的第一個參數(shù)是一個指針,指向一個被初始化的驅動程序對象,該對象代表用戶的驅動程序。DriverEntry的第二個參數(shù)是設備服務鍵鍵名,其主要工作是把各種函數(shù)指針填入驅動程序對象。這些指針為操作系統(tǒng)指明了驅動程序容器中各種子例程的位置。
PnP管理器先裝入最底層的過濾器驅動程序并調用其AddDevice函數(shù)。該函數(shù)創(chuàng)建一個FiDO,這樣就在過濾器驅動程序和FiDO之間建立了水平連接。然后AddDevice把PDO連接到FiDO上。PnP管理器繼續(xù)下上執(zhí)行,裝入并調用每個底層過濾器、功能驅動程序、高層過濾器,直到完成這個堆棧。該函數(shù)的原型如下:
DriverObject參數(shù)指向一個驅動程序對象,就是在DriverEntry例程中初始化的那個驅動程序對象。PDO參數(shù)指向設備堆棧底部的物理設備對象。AddDevice函數(shù)的基本任務是創(chuàng)建一個設備對象并把它連接到以PDO為底的設備堆棧中。
當AddDevice函數(shù)將FDO和FiDO創(chuàng)建且連接好后,PnP管理器分配資源且發(fā)送PRP_MN_START_DEVICE,功能驅動程序需要在這個IRP上做大量工作,包括分配并配置額外的軟件資源以及為設備操作做準備。處理這個IRP主要通過PnPStartDevice函數(shù)完成。PnPStartDevice函數(shù)首先將IRP傳遞到底層驅動程序。等待完成后,調用IoGetCurrentIrpStackLocation函數(shù)得到當前自己的堆棧單元。I/O堆棧單元的Parameters聯(lián)合有一個名為StarDevice的子結構,該結構包含了資源分配信息。在StarDevice里就可以將分配的資源填充到PDO的設備擴展域中,并且調用IoConnectInterrupt函數(shù)連接中斷。
層次結構可以使I/O請求過程更加明了。每個影響到設備的操作都使用I/O請求包。通常IRP先被送到設備堆棧的最上層驅動程序,然后逐漸過濾到下面的驅動程序。內核通常通過發(fā)送I/O請求包(IRP)來運行驅動程序中的代碼。
4 結束語
基于DSP的PCI總線數(shù)據采集系統(tǒng)充分利用了DSP豐富的內部資源、強大的數(shù)字信號處理能力及PCI總線的高傳輸速度,能夠方便的開發(fā)數(shù)據壓縮、語音壓縮存儲等新功能信號,并進行預處理與分析處理。通過PCI總線進行數(shù)據傳送可大大提高傳輸速度。本系統(tǒng)適用于高速數(shù)據的采集和處理以及需要進行大量數(shù)據傳輸?shù)膽脠龊稀?
評論