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