基于VxWorks的PCI總線多功能數(shù)據(jù)采集卡驅(qū)動開發(fā)
在前面的一節(jié)中提到過,要訪問一個PCI設(shè)備,首先要知道它的廠商號和設(shè)備號,在實際工作中,可以通過WinDriver這個在windows平臺下運(yùn)行的編寫驅(qū)動的軟件獲得,這樣比較方便和直觀,通過它,得到7396的廠商號(Dev7396_VENDOR_ID)為0x144a,設(shè)備號Dev7396_DEVICE_ ID)為0x7396。知道廠商號和設(shè)備號后,就可以利用VxWorks提供的函數(shù)pciFindDevice()獲得設(shè)備的總線號、設(shè)備編號和功能號。然后調(diào)用peiConfigInLong()獲得多功能數(shù)據(jù)采集卡設(shè)備的配置空間、內(nèi)存空間、I/O空間的地址;pciConfigInByte得到設(shè)備中斷號。7396設(shè)備沒有要訪問的內(nèi)存空間,所以沒有涉及到內(nèi)存的映射和操作。主要的實現(xiàn)代碼如下所示:
在讀取設(shè)備的基地址時,要特別注意結(jié)合設(shè)備相關(guān)的說明書進(jìn)行,在前面的章節(jié)中提到過,7396設(shè)備包含3個寄存器空間(詳見2多功能數(shù)據(jù)采集卡7396簡介),所以讀出來的基地址空間有可能是3個里面的一個。
由于使用的是PENTIUM系列的CPU來進(jìn)行板卡驅(qū)動的開發(fā),所以在邊接中斷向量的時候,中斷號要加上0x20。
特別要注意操作9050的控制寄存器的偏移為0x4c的地方的操作,它是要實現(xiàn)中斷必須要進(jìn)行的操作,沒有操作正確的話,中斷是不能夠正確運(yùn)行的,而且9050的這個寄存器的各個位和9052還是不一樣的,雖然都是PLX公司的產(chǎn)品。
讀取完上面的I/O基地址和相應(yīng)的中斷后,就可以操作I/O空間了,這要根據(jù)相應(yīng)板卡說明書上的基地址偏移來操作,而且還要注意設(shè)置端口是輸入端口還是輸出端口。中斷服務(wù)程序在VxWorks下也有嚴(yán)格的要求,要注意。
5 結(jié)束語
文中結(jié)合具體的Adlink公司的7396數(shù)據(jù)采集卡,介紹了在VxWorks下編寫PCI設(shè)備驅(qū)動的相關(guān)方法以及要注意的事項,并介紹了VxWorks的I/O系統(tǒng)和驅(qū)動相關(guān)的理論知識,它們是開發(fā)驅(qū)動的基礎(chǔ)。根據(jù)上面方法開發(fā)出的7396驅(qū)動已經(jīng)在某綜合控制系統(tǒng)中穩(wěn)定地運(yùn)行。本文引用地址:http://2s4d.com/article/148492.htm
評論