VxWorks操作系統(tǒng)下ComPactPCI總線驅(qū)動(dòng)程序設(shè)計(jì)
PCI設(shè)備可以在地址空間中重定位是其重要功能之一,使得系統(tǒng)可合理地分配資源,甚至完全相同的兩塊PCI卡也能夠在同一總線內(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)將設(shè)備映射到存儲(chǔ)器空間。
系統(tǒng)配置軟件通過(guò)向基址寄存器寫(xiě)入全“1”后再讀回的方式確定設(shè)備要求的地址空間范圍,與地址空間無(wú)關(guān)的位其返回值為0。
在VxWorks操作系統(tǒng)下實(shí)現(xiàn)CompactPCI總線設(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è)備。并返回總線號(hào)、設(shè)備號(hào)以及功能號(hào)。函數(shù)的定義如下:本文引用地址:http://2s4d.com/article/173660.htm
)
(2)配置CompactPCI設(shè)備 通過(guò)操作系統(tǒng)提供的API函數(shù)訪問(wèn)CompactPCI設(shè)備的配置空間,配置CompactPCI設(shè)備基址寄存器、中斷、ROM基地址寄存器等,可得到Compact-PCI的仔儲(chǔ)器空間和I/O地址空間映射、設(shè)備的中斷號(hào)等。在VxWorks操作系統(tǒng)中訪問(wèn)CompactPCI設(shè)備配置空間的函數(shù)有pciConfigInLong()、pciConfigOutLong()等,它們分別完成對(duì)CompactPCI設(shè)備配置空間的讀寫(xiě)操作。這一系列操作也稱為PCI設(shè)備枚舉。然后,根據(jù)CompactPCI設(shè)備的配置參數(shù),對(duì)不同的設(shè)備編寫(xiě)初始化程序、中斷服務(wù)程序以及對(duì)PCI設(shè)備存儲(chǔ)空間的訪問(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總線的中斷,因此在系統(tǒng)進(jìn)行中斷服務(wù)程序的配置時(shí),必須設(shè)定該寄存器的內(nèi)容,否則系統(tǒng)不能正常響應(yīng)中斷 在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è)被稱為中斷服務(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)量能夠滿足兩種類型的任務(wù)協(xié)調(diào)需要:互斥與同步。二進(jìn)制信號(hào)量需要的系統(tǒng)開(kāi)銷小,因而適用于高性能的需求。二進(jìn)制信號(hào)量可以看成一個(gè)標(biāo)記:對(duì)應(yīng)的資源是可用f滿)還是不可用(空)。當(dāng)任務(wù)調(diào)用函數(shù)semTake()取一個(gè)信號(hào)量時(shí),其結(jié)果依賴于在調(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總線的驅(qū)動(dòng)與控制方法可行,保證系統(tǒng)實(shí)時(shí)數(shù)據(jù)采集的可靠性。
評(píng)論