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