基于VxWorks的PCI總線(xiàn)多功能數據采集卡驅動(dòng)開(kāi)發(fā)
在前面的一節中提到過(guò),要訪(fǎng)問(wèn)一個(gè)PCI設備,首先要知道它的廠(chǎng)商號和設備號,在實(shí)際工作中,可以通過(guò)WinDriver這個(gè)在windows平臺下運行的編寫(xiě)驅動(dòng)的軟件獲得,這樣比較方便和直觀(guān),通過(guò)它,得到7396的廠(chǎng)商號(Dev7396_VENDOR_ID)為0x144a,設備號Dev7396_DEVICE_ ID)為0x7396。知道廠(chǎng)商號和設備號后,就可以利用VxWorks提供的函數pciFindDevice()獲得設備的總線(xiàn)號、設備編號和功能號。然后調用peiConfigInLong()獲得多功能數據采集卡設備的配置空間、內存空間、I/O空間的地址;pciConfigInByte得到設備中斷號。7396設備沒(méi)有要訪(fǎng)問(wèn)的內存空間,所以沒(méi)有涉及到內存的映射和操作。主要的實(shí)現代碼如下所示:

在讀取設備的基地址時(shí),要特別注意結合設備相關(guān)的說(shuō)明書(shū)進(jìn)行,在前面的章節中提到過(guò),7396設備包含3個(gè)寄存器空間(詳見(jiàn)2多功能數據采集卡7396簡(jiǎn)介),所以讀出來(lái)的基地址空間有可能是3個(gè)里面的一個(gè)。

由于使用的是PENTIUM系列的CPU來(lái)進(jìn)行板卡驅動(dòng)的開(kāi)發(fā),所以在邊接中斷向量的時(shí)候,中斷號要加上0x20。

特別要注意操作9050的控制寄存器的偏移為0x4c的地方的操作,它是要實(shí)現中斷必須要進(jìn)行的操作,沒(méi)有操作正確的話(huà),中斷是不能夠正確運行的,而且9050的這個(gè)寄存器的各個(gè)位和9052還是不一樣的,雖然都是PLX公司的產(chǎn)品。
讀取完上面的I/O基地址和相應的中斷后,就可以操作I/O空間了,這要根據相應板卡說(shuō)明書(shū)上的基地址偏移來(lái)操作,而且還要注意設置端口是輸入端口還是輸出端口。中斷服務(wù)程序在VxWorks下也有嚴格的要求,要注意。
5 結束語(yǔ)
文中結合具體的Adlink公司的7396數據采集卡,介紹了在VxWorks下編寫(xiě)PCI設備驅動(dòng)的相關(guān)方法以及要注意的事項,并介紹了VxWorks的I/O系統和驅動(dòng)相關(guān)的理論知識,它們是開(kāi)發(fā)驅動(dòng)的基礎。根據上面方法開(kāi)發(fā)出的7396驅動(dòng)已經(jīng)在某綜合控制系統中穩定地運行。本文引用地址:http://dyxdggzs.com/article/148492.htm
評論