1 引言
VxWorks" title="VxWorks">VxWorks是美國Wind River公司專門為嵌入式處理器設計的一種模塊化、高性能的實時多任務操作系統(tǒng),。嵌入式軟件多采用交叉開發(fā)的方式,,即主機運行開發(fā)工具Tonado,通過某種連接方式連接目標機,,硬件平臺為PC/104+架構(gòu),。這里提出一種VxWorks操作系統(tǒng)下ComPactPCI總線" title="ComPactPCI總線">ComPactPCI總線驅(qū)動程序的設計及實現(xiàn)。該設計使用德國Kontron DT-64,,它是一款高性能嵌入式計算機,。采用Dual PentiLim 3 CPU,工作頻率高達866 MHz,,具有128 KB一級高速緩存和128 KB二級高速緩存,。KontronDT-64與PC/AT標準完全兼容,并遵從PC/104+標準,。具有PC/104結(jié)構(gòu)的優(yōu)點,,適用于各種復雜的工作環(huán)境。
2 BSP" title="BSP">BSP與VxWorks的關系
板級支持包BSP(board support packet)通常是針對具體的硬件平臺,,是用戶所編寫的啟動代碼和部分設備驅(qū)動程序的集合,。在VxWorks操作系統(tǒng)中,BSP是介于底層硬件環(huán)境和VxWorks之間的一個軟件接口,,它的主要功能是系統(tǒng)加電后初始化目標機硬件,、初始化操作系統(tǒng)及提供部分硬件的驅(qū)動程序。BSP與VxWorks之間的關系如圖1所示,。從圖1發(fā)現(xiàn),,BSP不是一個設備驅(qū)動程序。它只能運行于指定設備的硬件環(huán)境中,,對其進行控制和初始化,。這里主要闡述在PCM發(fā)送,接收模塊的設計過程中,,如何利用DT-64 BSP來實現(xiàn)PCI總線的驅(qū)動程序,。
3 總線及接口技術
由于CompactPCI規(guī)范定義基于PCI總線方式的復印加堅固而耐用的PCI版本,并且適用于工業(yè)和嵌入式應用,,本設計采用此規(guī)范,。CompactPCI總線是3種技術的集成:通用PCI局部總線(Local Bus)的高性能,安裝牢固的歐卡結(jié)構(gòu),,接觸可靠的針孔連接器(pin-antl-soeket connector),。
PCI局部總線是一種地址和數(shù)據(jù)復用的高性能32,64位總線,,它在高度集成的外圍控制器件,、外圍插件板和處理器/存儲器之間起連接作用。PCI總線為CPU和板上外設提供了方便的高速通信連接,,工作頻率為66 MHz或更高,。PCI作為一種同步的,、獨立于處理器的32 bit或64 bit局部總線,在工作頻率為33 MHz總線寬度為32 bit最低規(guī)格時其峰值吞吐速率可達到132 MB/s,,適用于網(wǎng)絡適配器,、硬盤驅(qū)動器、視頻卡,、圖形卡等各類高速外設,。連接到PCI總線上的設備分為主控和目標兩類,,PCI支持多主系統(tǒng),。PCI總線的一個重要特點是存在配置空間,它提供一種配置關聯(lián),,適合于目前或?qū)淼南到y(tǒng)配置機制,,實現(xiàn)參數(shù)自動配置。系統(tǒng)軟件通過讀取配置空間中相應參數(shù),,即可確定PCI總線上掛接了什么設備以及需要哪些資源,,通過對地址空間的重定位分配資源避免競爭,實現(xiàn)PCI設備的即插即用,。
連接到PCI總線的用戶功能板卡需要使用PCI總線接口控制器和PCI總線進行交互,,在應用系統(tǒng)設計時采用OL5064器件。QL5064是一款32 bit/33 MHz的通用PCI總線控制器,,符合PCI規(guī)范2.2版,,本突發(fā)傳輸速率達到132 MB/s??勺鳛镻CI總線的主控設備控制總線,,也可作為目標設備響應總線。Ql5064提供了PCI總線,、E2ROM,、LOCAL總線3個接口。LOCAL總線支持復用/非復用的32 bit地址/數(shù)據(jù),,有3種工作模式:M,、C和J。在系統(tǒng)實際數(shù)據(jù)采集時,,將LOCAl總線設置為C模式,,這是一種目標設備模式。選用NM93CS56L型串行E2PROM作為QL5064的配置器件,,該器件通過E2ROM接口和QL5064相連,。QL5064的長配置方式要求68個字節(jié)的信息,主要包括:設備識別號,、供應商代碼號,、LO-CAL總線3個空間的性質(zhì),、范圍以及基址等,這些配置信息內(nèi)容一般要預先設計并用編程器事先寫入配置器件中,。在計算機啟動時,,系統(tǒng)將根據(jù)配置信息分配器件所申請的資源。Q155064作為一種橋接器件,,在PCI總線和LOCAL總線之間有3種主要數(shù)據(jù)傳輸模式:
(1)PCI Initiator數(shù)據(jù)傳輸模式 主控模式,,LOCAL總線主設備通過QL5064訪問PCI總線存儲空間和I/O空間;
(2)PCI Target數(shù)據(jù)傳輸模式PCI總線主設備通過QL5064訪問LOCAL總線存儲空問和I/O空間,;
(3)DMA數(shù)據(jù)傳輸模式QL5064作為兩總線的主設備,,從PCI總線存儲空間讀數(shù)據(jù)到LOCAL總線存儲空間或者從LOCAL總線存儲空間讀數(shù)據(jù)到PCI總線存儲空間。在系統(tǒng)設計中,,使用PCI Target數(shù)據(jù)傳輸模式讀寫控制模塊中的寄存器,。
4 設備的配置技術
VxWorks是專門為實時嵌人式系統(tǒng)設計開發(fā)的操作系統(tǒng)軟件,提供高效的實時任務調(diào)度,、中斷管理,、實時的系統(tǒng)資源分配以及實時的任務間通信。程序員可將主要精力放在應用程序本身,,而不用關心對系統(tǒng)資源的管理,。
為闡明在VxWorks操作系統(tǒng)下如何實現(xiàn)CompaetPCI總線設備的驅(qū)動,需了解PCI設備的配置寄存器空間,。PCI設備有3種物理存儲空間:配置寄存器空間,、存儲器空間和I/O空間。PCI局部總線設備中配置寄存器空間是一容量為256 KB并具有特定記錄結(jié)構(gòu)的地址空間,,該空間分為頭標區(qū)和設備有關區(qū)兩部分,,空間頭標區(qū)的定義如圖2所示。
在配置空間中,,只讀空間有設備標識,、供應商代碼、修改版本,、分類代碼以及頭標類型,。其中供應商代碼用來標識設備供應商;設備標識用來標識某一特殊的設備,;修改版本標識設備的版本號,;分類代碼用來標識設備的種類;而頭標類型用來標識頭類型以及是否為多功能設備,。除供應商代碼之外,,其他字段的值由供應商分配。
PCI設備可以在地址空間中重定位是其重要功能之一,使得系統(tǒng)可合理地分配資源,,甚至完全相同的兩塊PCI卡也能夠在同一總線內(nèi)工作而不會產(chǎn)生地址沖突,。基地址寄存器的功能是分配PCI設備的系統(tǒng)地址空間,,在基地址寄存器中,,位0(最低位)均為只讀位并且用來標識是存儲器空間還是I/O地址空間。如果該位為0,,表示映射到存儲器空間,。映射到I/O空間的基址寄存器寬度總是32 bit,其中位0值為1 (用硬件實現(xiàn)),,位1為保留位并且其讀出值必須為0,,其余各位用來把設備映射到I/O空間。映射到存儲器空間的基址寄存器可以是32 bit寬度,,也可以是64 bit寬度,。其中位0也要用硬件方式使其恒為0,。位2和位1兩位用來表示映射類型,,其余各位用來將設備映射到存儲器空間。
系統(tǒng)配置軟件通過向基址寄存器寫入全“1”后再讀回的方式確定設備要求的地址空間范圍,,與地址空間無關的位其返回值為0,。
在VxWorks操作系統(tǒng)下實現(xiàn)ComPactPCI總線設備的驅(qū)動過程主要包括下面步驟:
(1)查找CompaetPCI設備在VxWorks操作系統(tǒng)中通過函數(shù)peiFindDeviee()來實現(xiàn),該函數(shù)可根據(jù)給定的設備標識和供應商代碼找到相應的設備,。并返回總線號,、設備號以及功能號。函數(shù)的定義如下:
)
(2)配置CompactPCI設備 通過操作系統(tǒng)提供的API函數(shù)訪問CompactPCI設備的配置空間,,配置CompactPCI設備基址寄存器,、中斷、ROM基地址寄存器等,,可得到Compact-PCI的仔儲器空間和I/O地址空間映射,、設備的中斷號等。在VxWorks操作系統(tǒng)中訪問CompactPCI設備配置空間的函數(shù)有pciConfigInLong(),、pciConfigOutLong()等,,它們分別完成對CompactPCI設備配置空間的讀寫操作。這一系列操作也稱為PCI設備枚舉,。然后,,根據(jù)CompactPCI設備的配置參數(shù),對不同的設備編寫初始化程序,、中斷服務程序以及對PCI設備存儲空間的訪問程序,。
5 中斷的響應與控制
硬件中斷處理是實時系統(tǒng)設計的關鍵環(huán)節(jié),系統(tǒng)通過中斷與外部事件交互,。為了獲得盡可能快的中斷響應時間,,Vx-Works的中斷處理程序需要運行在特定的上下文中,,也就是在所有任務上下文之外。因此,,中斷處理不會涉及任何任務上下文的切換,。QL5064接幾器件的寄存器序列巾有一個中斷控制/狀態(tài)寄存器,其偏移地址為0x68H,。該寄存器可以使能或禁止CompactPCI總線的中斷,,因此在系統(tǒng)進行中斷服務程序的配置時,必須設定該寄存器的內(nèi)容,,否則系統(tǒng)不能正常響應中斷&nBSP; 在VxWorks系統(tǒng)下可以使用pciIntConnect()函數(shù)將中斷和特定的C程序連接起來,,該函數(shù)將指定的C函數(shù)與中斷向量相聯(lián)系,甬數(shù)的地址將存儲在這個中斷向量里,。所以當中斷發(fā)生時,,系統(tǒng)將調(diào)用這個被稱為中斷服務程序的函數(shù)。因此,,cPCI設備的中斷響應設置主要有兩點:
(1)調(diào)用pciIntConnect()函數(shù)設置中斷服務程序,,該函數(shù)的定義如下:
如果要禁止該設備的中斷響應,可以給QL5064的中斷控制寄存器寫入0x0f000000即可,。
中斷服務程序ISR負責協(xié)凋系統(tǒng)的采集任務,,在系統(tǒng)設計時采用信號量的方式實現(xiàn)任務間的同步,因此ISR的程序非常簡單,,只給出和特定中斷事件相關的信號量即可,。舉例如下:
VxWorks信號量是提供任務間通信、同步和互斥的最優(yōu)選擇,,它提供任務問的最快速通信,,也是提供任務間同步和互斥的主要手段。對于同步,,信號量可以協(xié)調(diào)外部事件與任務的執(zhí)行,。通用二進制信號量能夠滿足兩種類型的任務協(xié)調(diào)需要:互斥與同步。二進制信號量需要的系統(tǒng)開銷小,,因而適用于高性能的需求,。二進制信號量可以看成一個標記:對應的資源是可用f滿)還是不可用(空)。當任務調(diào)用函數(shù)semTake()取一個信號量時,,其結(jié)果依賴于在調(diào)用的時刻信號量是否可用,。如果此時信號量可用,調(diào)用semTake()的結(jié)果使信號量變?yōu)椴豢捎?,任務繼續(xù)執(zhí)行,;如果此時信號量不可用,調(diào)用semTake()的任務進入一個阻塞隊列,進入等待狀態(tài)該信號量變?yōu)榭捎米枞麪顟B(tài),。通過信號量來同步整個系統(tǒng)中數(shù)據(jù),,可保證系統(tǒng)運行的實時性和可靠性。
6 結(jié)束語
采用上述控制技術,,在系統(tǒng)中成功實現(xiàn)控制驅(qū)動對多種CompactPCI板卡以及DSP信號處理板,、高速A/D通道、低速A/D轉(zhuǎn)換通道,、計數(shù)器通道等均能正常工作,。達到系統(tǒng)設計要求,因此可說明VxWorks系統(tǒng)CompactPCI總線的驅(qū)動與控制方法可行,,保證系統(tǒng)實時數(shù)據(jù)采集的可靠性,。