摘要:基于VxWorks操作系統(tǒng)設計了數(shù)據(jù)采集從板的驅動程序,程序框架上驅動程序將對從板的操作抽象為對字符型設備的操作,驅動程序在內部實現(xiàn)了數(shù)據(jù)IO操作的阻塞機制、查詢機制及信號通知機制,采用這種方式設計的驅動程序向用戶提供了統(tǒng)一的接口,方便用戶使用,同時將硬件操作與應用程序分開便于驅動程序進行擴展;驅動設計工作是精密環(huán)境控制系統(tǒng)的一部分,驅動程序的設計方法可以廣泛地應用于基于VME總線的從設備驅動設計。
關鍵詞:VxWorks操作系統(tǒng);VME總線;設備驅動程序;數(shù)據(jù)采集
基于VME總線搭建了精密環(huán)境控制系統(tǒng),整個系統(tǒng)中基于VxWorks的VME總線驅動程序連接了軟件操作與VME從板的硬件通信,VxWorks操作系統(tǒng)下驅動程序的開發(fā)是應用VxWorks操作系統(tǒng)的關鍵因素。本文應用通用公司的VG5-7457PowerPC嵌入式VME單板機作為主板及通用公司的VME-3122A作為數(shù)據(jù)采集從板組成數(shù)據(jù)采集系統(tǒng)。針對數(shù)據(jù)采集從板的通用特征詳細的設計了基于VG5硬件和VxWorks操作系統(tǒng)的VME數(shù)據(jù)采集從板的驅動程序,在驅動程序的設計過程中,特別地考慮了驅動程序數(shù)據(jù)傳輸機制的設計,采用良好傳輸機制設計的驅動程序具有優(yōu)良的驅動架構,便于移植及擴展。
1 采集系統(tǒng)的系統(tǒng)結構
1.1 采集系統(tǒng)結構分析
采集系統(tǒng)基于VME總線實現(xiàn),系統(tǒng)是精密環(huán)境控制的重要組成部分,它的整體結構如圖1所示。
系統(tǒng)以VME總線為整體架構,VME總線上使用VG5-7457PowerPC嵌入式VME單板機作VME總線控制器,通過VME總線控制數(shù)據(jù)采集設備(AD數(shù)據(jù)采集卡),同時將控制輸出經過VME總線下傳到控制輸出(DA數(shù)據(jù)輸出卡),它同時通過以太網(wǎng)絡與上位機相連;數(shù)據(jù)在VME總線的可靠傳輸是系統(tǒng)實現(xiàn)功能的關鍵部分,這主要通過在VG5單板機上設計基于VxWorks操作系統(tǒng)的VME總線的驅動來保證。
1.2 VG5主控板的結構分析及其對VME總線驅動的支持
驅動程序最終運行在VG5-7457單板機上,單板機的VME總線支持是實現(xiàn)單板機對VME總線驅動的關鍵因素。單板機系統(tǒng)的VME總線硬件結構如圖2所示。
單板機使用UniverseⅡVME-to-PCI總線橋芯片實現(xiàn)系統(tǒng)的VMM總線,芯片實際上完成了VME總線與PCI總線的操作的互相轉化,它同時具備多種轉換方式,首先可以完成2個總線中斷的互相轉換操作,其次可以完成通過VME總線訪問PCI總線,最后可以完成PIC總線訪問VME總線;這些轉換操作很多都是通過芯片的內部寄存器實現(xiàn)的。由于總線橋芯片的轉換能力,使得VG5-7457單板機既可以作為VME主控板使用,又可以作為從板使用。
VxWorks操作系統(tǒng)下將VME總線地址映射為CPU的本地地址,其映射可以在相關的BSP文件中定義,設計中的映射如表1所示,將VME總線映射為CPU本地地址后,對從板的操作就轉化為于對內存訪問操作相似的讀寫操作,使得VME總線的驅動可以方便的實現(xiàn)。
對于操作VME總線區(qū)域的內存空間,系統(tǒng)提供了一系列的接口函數(shù),系統(tǒng)提供的接口函數(shù)列表如表2所示。
寫內存空間的函數(shù)使用svsOut*函數(shù)族來完成,需要提供給函數(shù)的參數(shù)是寫入的地址及寫入的數(shù)據(jù);讀內存空間使用sysIn*函數(shù)族來完成,需要提供的參數(shù)是讀的地址,返回值是讀到的內容。函數(shù)在VxWorks的BSP中定義,使用匯編語言的方法實現(xiàn)相關的操作。
2 數(shù)據(jù)采集板的硬件結構抽象
從主板的VME地址空間上看從板的結構圖如圖3所示。
VME地址空間上從板主要分為4塊地址區(qū)域,它們分別為從板的標識寄存器、從板的隨機讀寫寄存器、功能設置寄存器及數(shù)據(jù)緩沖區(qū),前兩個存儲區(qū)域主要用來標識從板及對從板進行測試,功能設置寄存器主要用來完成對數(shù)據(jù)采集從板的功能配置,數(shù)據(jù)緩沖區(qū)主要用來完成數(shù)據(jù)的傳輸;其中功能設置寄存器及數(shù)據(jù)緩沖區(qū)是實現(xiàn)對從板數(shù)據(jù)采集及控制的關鍵。依據(jù)從板的結構特點設計字符型設備驅動框架,驅動程序設計的重點是驅動模型的建立。
3 驅動程序的設計
3.1 數(shù)據(jù)結構設計
將從板所占用的系統(tǒng)硬件及軟件資源抽象成為從板字符型設備的結構體,其定義如下所示。
這樣的數(shù)據(jù)結構設計實現(xiàn)了對從板的抽象,使得驅動程序具有良好的可移植性,方便的實現(xiàn)對多種板卡的驅動。
3.2 數(shù)據(jù)傳輸機制設計
驅動程序設計模仿了Linux操作系統(tǒng)實現(xiàn)了數(shù)據(jù)傳輸?shù)臋C制——查詢機制,數(shù)據(jù)傳輸?shù)淖枞麢C制及信號通知機制。
查詢機制主要是指驅動程序為應用程序提供查詢緩沖區(qū)標志的接口,應用程序可以隨時查詢緩沖區(qū)的狀態(tài)而不會引起任務狀態(tài)的變化;阻塞機制是調用獲取緩沖區(qū)的任務在緩沖區(qū)沒有數(shù)據(jù)時會使該任務處于阻塞狀態(tài),直到緩沖區(qū)數(shù)據(jù)可用獲得后,任務才會重新獲得運行;信號機制是應用程序預先設定一個信號處理函數(shù),當緩沖區(qū)有數(shù)據(jù)時,系統(tǒng)就會自動調用這個信號處理函數(shù)而完成用戶預定的操作;阻塞機制的任務圖示如圖4所示,這些機制的細節(jié)可用參考文獻。要實現(xiàn)這些功能需要實現(xiàn)中斷處理機制、字符設備操作的ioctrl方法和read方法。
4 驅動程序的實現(xiàn)
4.1 中斷程序的實現(xiàn)
中斷程序的實現(xiàn)上使用了上、下兩半部機制,上半部是中斷處理函數(shù),下半部是中斷處理任務,上、下兩半部使用信號量進行同步,其中功能性的操作主要安排在中斷處理任務中。其程序框架如圖5所示。在中斷任務中實現(xiàn)對數(shù)據(jù)緩沖區(qū)的操作及緩沖區(qū)標志操作,實現(xiàn)操作的過程中著重解決與ioctrl方法和read方法進行同步。
4.2 驅動程序ioctrl方法的實現(xiàn)
驅動程序的ioctrl方法在驅動程序中具有重要地位,它除了要實現(xiàn)從板功能寄存器的設置及驅動程序的查詢機制外,還要實現(xiàn)用戶信號處理函數(shù)的注冊工作,結合這些功能實現(xiàn)的ioctrl方法的框架代碼如下所示。
整個的ioctl方法由switch結構組成,這樣的結構代碼簡單明了,易讀性和可維護性都很好,同時可以方便地通過擴充命令的方法來實現(xiàn)對從板功能寄存器多種多樣的操作,便于驅動程序的重用。
4.3 驅動程序read方法的買現(xiàn)
驅動程序的read方法主要實現(xiàn)對緩沖區(qū)數(shù)據(jù)的讀取,同時它是實現(xiàn)數(shù)據(jù)阻塞操作的關鍵,read方法的程序流程圖如圖6所示。
函數(shù)首先進行參數(shù)的檢查及轉化;然后檢查緩沖區(qū)標志,如果緩沖區(qū)存在數(shù)據(jù)則直接讀出數(shù)據(jù),如果緩沖區(qū)沒有數(shù)據(jù),函數(shù)就會申請緩沖區(qū)的信號量而使任務處于掛起狀態(tài),當中斷處理任務處理完緩沖區(qū)后會發(fā)送一個信號量而使任務重新運行并且讀出緩沖區(qū)數(shù)據(jù);函數(shù)最后是設置緩沖區(qū)標志,表示緩沖區(qū)數(shù)據(jù)已經讀出。函數(shù)要與中斷處理任務進行同步;讀取和設置緩沖區(qū)標志使用原子操作的方法,等待中斷處理任務設置緩沖區(qū)時使用了信號量的方式完成了同步。
5 VME總線數(shù)據(jù)傳輸測試
VME數(shù)據(jù)傳輸測試主要是測試總線數(shù)據(jù)傳輸?shù)目煽啃?,只有總線數(shù)據(jù)傳輸?shù)目煽啃阅軌虮WC,驅動才能穩(wěn)定的運行,其測試的方法是通過隨機地讀寫從板的隨機讀寫寄存器來完成的,整個測試中為了模擬操作系統(tǒng)在有負載情況下的運行效果,增加了一些定時器操作,
其測試的程序流程圖如圖7所示。
使用這種測試的方法最終得到測試的結果如表3所示。從測試結果可以看出,數(shù)據(jù)傳輸?shù)臏蚀_性比較好,通過閱讀VG5-7457PowerPC的板級支持包可以發(fā)現(xiàn)其實現(xiàn)VME數(shù)據(jù)總線操作的函數(shù)都有原子操作過程,以此保證數(shù)據(jù)傳輸?shù)目煽啃浴A己玫腣ME總線傳輸特性為驅動的實現(xiàn)提供了良好的基礎。
6 結論
設計了基于VxWorks操作系統(tǒng)的VME總線從板的驅動程序框架,著重介紹了驅動程序的機制及這些機制的實現(xiàn)方法;在設計的整體上重點地考慮了驅動程序的可維護性及可移轉性。采用這種方式建立起來的驅動程序代碼的可讀性好,可維護性強,而且可以方便地移植到其他的應用場合。