當前位置:首頁 > 顯示光電 > 顯示光電
[導(dǎo)讀]WinCE下光電編碼器的驅(qū)動程序設(shè)計近年來,嵌入式技術(shù)發(fā)展迅速,嵌入式系統(tǒng)在各行各業(yè)得到了廣泛的應(yīng)用。然而,由于嵌入式計算機的專用性,系統(tǒng)的硬件、軟件結(jié)構(gòu)千差萬別,其輸入設(shè)備也不再像通用計算機那樣單一。嵌入

WinCE下光電編碼器的驅(qū)動程序設(shè)計

近年來,嵌入式技術(shù)發(fā)展迅速,嵌入式系統(tǒng)在各行各業(yè)得到了廣泛的應(yīng)用。然而,由于嵌入式計算機的專用性,系統(tǒng)的硬件、軟件結(jié)構(gòu)千差萬別,其輸入設(shè)備也不再像通用計算機那樣單一。嵌入式計算機的輸入沒備一般有鼠標、鍵盤、觸摸屏、按鈕、旋鈕等,而光電編碼器(俗稱“單鍵飛梭”)作為一種輸入設(shè)備,由于其具有輸入靈活,簡單可靠等特點,因此特別適合應(yīng)用在嵌入式儀器和手持式設(shè)備上,整個系統(tǒng)可以只用一個鍵作為輸入。觸摸屏由于其方便靈活、節(jié)省空間、界面直觀等特點也備受青睞,但存在壽命短,長時間使用容易產(chǎn)生誤差等缺點。如果用光電編碼器輔助觸摸屏作為輸入設(shè)備,必將大大增強系統(tǒng)的可靠性,使得人機接口更加人性化。但由于光電編碼器并不是WinCE的標準輸入設(shè)備,因此其驅(qū)動程序在嵌入式操作系統(tǒng)Windows CE Platform Builder中并未給出。本文以三星公司S3C2410(ARM9芯片)為CPU的嵌入式系統(tǒng)開發(fā)板為平臺,詳細闡述了嵌入式操作系統(tǒng)WinCE下光電編碼器驅(qū)動程序的設(shè)計方法,以供同行參考。

  1 光電編碼器的工作原理

  光電編碼器(OptICal Encoder)俗稱“單鍵飛梭”,其外觀好像一個電位器,因其外部有一個可以左右旋轉(zhuǎn)同時又可按下的旋鈕,很多設(shè)備(如顯示器、示波器等)用它作為人機交互接口。下面以美國Greyhill公司生產(chǎn)的光電編碼器為例,介紹其工作原理及使用方法。光電編碼器的內(nèi)部電路如圖1所示,其內(nèi)部有1個發(fā)光二極管和2個光敏三極管。當左右旋轉(zhuǎn)旋鈕時,中間的遮光板會隨旋鈕一起轉(zhuǎn)動,光敏三極管就會被遮光板有次序地遮擋,A、B相就會輸出圖2所示的波形;當按下旋鈕時,2、3兩腳接通,其用法同一般按鍵。

  

  當順時針旋轉(zhuǎn)時,光電編碼器的A相相位會比B相超前半個周期;反之,A相會比B相滯后半個周期。通過檢測A、B兩相的相位就可以判斷旋鈕是順時針還是逆時針旋轉(zhuǎn),通過記錄A或B相變化的次數(shù),就可以得出旋鈕旋轉(zhuǎn)的次數(shù),通過檢測2、3腳是否接通就可以判斷旋鈕是否按下。其具體的鑒相規(guī)則如下:

  A為上升沿,B=0時,旋鈕右旋;

  B為上升沿,A=l時,旋鈕右旋;

  A為下降沿,B=1時,旋鈕右旋;

  B為下降沿,A=O時,旋鈕右旋;

  B為上升沿,A=0時,旋鈕左旋;

  A為上升沿,B=1時,旋鈕左旋;

  B為下降沿,A=l時,旋鈕左旋;

  A為下降沿,B=0時,旋鈕左旋。

  通過上述方法,可以很簡單地判斷旋鈕的旋轉(zhuǎn)方向。在判斷時添加適當?shù)难訒r程序,以消除抖動干擾。

  2 WinCE提供的驅(qū)動模型

  WinCE操作系統(tǒng)支持兩種類型的驅(qū)動程序。一種為本地驅(qū)動程序,是把設(shè)備驅(qū)動程序作為獨立的任務(wù)實現(xiàn)的,直接在頂層任務(wù)中實現(xiàn)硬件操作,因此都有明確和專一的目的。本地設(shè)備驅(qū)動程序適合于那些集成到Windows CE平臺的設(shè)備,諸如鍵盤、觸摸屏、音頻等設(shè)備。另一種是具有定制接口的流接口驅(qū)動程序。它是一般類型的設(shè)備驅(qū)動程序。流接口驅(qū)動程序的形式為用戶一級的動態(tài)鏈接庫(DLL)文件,用來實現(xiàn)一組固定的函數(shù)稱為“流接口函數(shù)”,這些流接口函數(shù)使得應(yīng)用程序可以通過文件系統(tǒng)訪問這些驅(qū)動程序。本文討論的光電編碼器就屬于流接口設(shè)備。

  2.1 流設(shè)備驅(qū)動加載過程

  WinCE.NET系統(tǒng)運行時會啟動負責(zé)流驅(qū)動的加載進程DEVICE.exe。DEVICE.exe進程對驅(qū)動的加載是通過裝載注冊表列舉器(RegEnum.dll)實現(xiàn)的。在WinCE.NET中,所有設(shè)備的資源信息都由OAL負責(zé)記錄在系統(tǒng)注冊表中,RegEnum.dll一個一個掃描注冊表項HEKY_LOCAL_MACHINEDriverBuiltIn下的子鍵,發(fā)現(xiàn)新設(shè)備就根據(jù)每個表項的內(nèi)容進行硬件設(shè)備初始化。

  2.2 中斷與中斷處理

  如果一個驅(qū)動程序要處理一個中斷,那么驅(qū)動程序需要首先使用CreateEvent函數(shù)建立一個事件,調(diào)用InterruptInitialize函數(shù)將該事件與中斷標識綁定。然后驅(qū)動程序中的IST就可以使用WaitForSing|eObject函數(shù)來等待中斷的發(fā)生。在一個硬件中斷發(fā)生之后,操作系統(tǒng)進入異常處理程序,異常處理程序調(diào)用OAL的OEMInterruptHandler函數(shù),該函數(shù)檢測硬件并將中斷標識返回給系統(tǒng);系統(tǒng)得到該中斷標識便會找到該中斷標識對應(yīng)的事件,并喚醒等待相應(yīng)事件的線程(IST),然后IST進行中斷處理。處理完成之后,IST需要調(diào)用InterruptDone函數(shù)來告訴操作系統(tǒng)中斷處理結(jié)束,操作系統(tǒng)再次調(diào)用OAL中的OEMInterruptDone函數(shù),最后完成中斷的處理。圖3為WinCE.NET中斷處理的流程框圖。

  



3 光電編碼器驅(qū)動程序的設(shè)計

  3.1 光電編碼器與S3C2410的硬件接口

  光電編碼器與S3C24lO的接口電路如圖4所示。光電編碼器的A、B相為集電極開路輸出,由于S3C2410的I/O口電平為3.3 V,所以將其通過電阻上拉到3.3V后再分別接到CPU的EINT0和EINT1上;將Pl直接接到3.3V,P2通過電阻下拉到GND。當旋鈕按下時,P2口輸出為高電平,否則輸出為低電平。

  

  工作狀態(tài)下,將EINTO、EINTl配置成上升沿和下降沿均觸發(fā)的外部中斷,將EINT2配置成上升沿觸發(fā)的中斷,旋鈕按下時EINT2引腳產(chǎn)生上升沿觸發(fā)中斷。

  3.2 外部中斷初始化及中斷服務(wù)程序的編寫

  首先必須完成CPU的I/O口和中斷的初始化工作,然后再編寫中斷處理程序。具體分為4個步驟:

  初始化I/O口。在Port_Init()函數(shù)中,將EINT0和EINTl初始化為上升沿和下降沿均觸發(fā)的中斷。將EINT2初始化為上升沿觸發(fā)的中斷。

  添加中斷號。在oalint.h下添加光電編碼器中斷向量的宏定義。代碼為#define SYSINTR_OED(SYSINTR_FIRMWARE+20)

  添加中斷的初始化、禁止、復(fù)位等函數(shù),分別在OEMInterruptEnable()、OEMInterruptDisable()、OEM-InterruptDone()等函數(shù)中加入相關(guān)代碼。

  返同中斷標識,由OEMInterruptHandler()函數(shù)返回中斷標識(SYSINTR_OED)。

  3.3 編寫流接口驅(qū)動程序

  Windows CE.net把中斷處理分成兩個部分:中斷服務(wù)程序(ISR)和中斷服務(wù)線程(IST)。TSR通常要求越短、越快越好,它的唯一任務(wù)就是返回中斷標識。正由于ISR很小,只能做少量的處理,因此中斷處理器就調(diào)用IST執(zhí)行大多數(shù)的中斷處理。中斷服務(wù)線程(IST)在從waitForSingleObject()函數(shù)得到中斷已經(jīng)發(fā)生的信號前一直保持空閑;當接收到中斷信號后,它就在本機設(shè)備驅(qū)動程序的PDD層調(diào)用子程序,這些程序反過來訪問硬件以獲得硬件的狀態(tài)。IST使用InterruptInitialize()函數(shù)來注冊自己,然后使用WaitForSingleObject()函數(shù)等待中斷信號。如果這時中斷信號到來,則應(yīng)將光電編碼器的狀態(tài)記錄下來,保存在變量OED_Status中。OED_Status=1表示旋鈕按下,OED_Status=2表示旋鈕逆時針旋轉(zhuǎn),OED_Status=3表示旋鈕順時針旋轉(zhuǎn)。

  這里還有一種比較簡單的鑒相規(guī)則,具體步驟是,當創(chuàng)建線程時讀出EINTl的電平狀態(tài)并保存在變量PreEINTl中,每次中斷到來時首先判斷EINT2是否為高電平。如果為高電平,則說明按鈕按下;如果EINT2為低電平,則判斷EINTO電平是否與PreEINTl相同。如果相同,則說明旋鈕逆時針旋轉(zhuǎn);反之,旋鈕順時針旋轉(zhuǎn),判斷的流程如圖5所示。

  


 Windows CE流接口驅(qū)動程序模型要求驅(qū)動程序開發(fā)者編寫10個接口函數(shù),針對光電編碼器的驅(qū)動主要應(yīng)完成設(shè)備初始化和數(shù)據(jù)讀取2個函數(shù)的編寫。WindowsCE設(shè)備文件名前綴由3個大寫字母組成,操作系統(tǒng)使用這3個字母來識別與流接口驅(qū)動程序相對應(yīng)的設(shè)備。這里定義設(shè)備文件名前綴為“OED”(OptICal Encoder),其中設(shè)備初始化函數(shù)OED_Init()在Windows CE裝載驅(qū)動程序時用于創(chuàng)建中斷事件和中斷服務(wù)線程。在函數(shù)OED_Read()中將光電編碼器的狀態(tài)(OED_Status)返回。

  3.4 封裝驅(qū)動程序并加入到WinCE中

  根據(jù)上述方法編譯出動態(tài)鏈接庫(DLL)還不夠,因為它的接口函數(shù)還沒有導(dǎo)出,還需要告訴鏈接程序輸出什么樣的函數(shù),因此必須建立一個后綴名為def的文件。在本設(shè)計中為OpticalEnccder.def。下面是此文件的內(nèi)容:

  

  一個具體的流接口驅(qū)動程序和注冊表是密不可分的。向WinCE內(nèi)核添加注冊表項的方法有兩種:一種是直接修改Platform Builder下的reg文件;另一種是自己編寫一個注冊表文件,通過添加組件的方法將動態(tài)鏈接庫文件添加到內(nèi)核中。這里用第2種方法,將OpticalEncoder.dll添加到內(nèi)核中。編寫的注冊表文件內(nèi)容如下:

  

  最后編寫一個CEC文件,完成對定制內(nèi)核注冊表部分的修改并將OpticalEncoder.dll添加到系統(tǒng)內(nèi)核中去,然后在Platform Builder中就可以直接添加已經(jīng)編寫好的驅(qū)動程序了。

  結(jié)語

  本文主要介紹了光電旋轉(zhuǎn)編碼器的原理及應(yīng)用方法,并詳細介紹了WinCE驅(qū)動程序的結(jié)構(gòu),成功地開發(fā)出了光電編碼器在嵌入式操作系統(tǒng)WinCE下的驅(qū)動程序。實驗證明,該方法正確可行,程序運行穩(wěn)定可靠。

本站聲明: 本文章由作者或相關(guān)機構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫毥谦F公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

加利福尼亞州圣克拉拉縣2024年8月30日 /美通社/ -- 數(shù)字化轉(zhuǎn)型技術(shù)解決方案公司Trianz今天宣布,該公司與Amazon Web Services (AWS)簽訂了...

關(guān)鍵字: AWS AN BSP 數(shù)字化

倫敦2024年8月29日 /美通社/ -- 英國汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時1.5...

關(guān)鍵字: 汽車 人工智能 智能驅(qū)動 BSP

北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運行,同時企業(yè)卻面臨越來越多業(yè)務(wù)中斷的風(fēng)險,如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報道,騰訊和網(wǎng)易近期正在縮減他們對日本游戲市場的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會開幕式在貴陽舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機 衛(wèi)星通信

要點: 有效應(yīng)對環(huán)境變化,經(jīng)營業(yè)績穩(wěn)中有升 落實提質(zhì)增效舉措,毛利潤率延續(xù)升勢 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競爭力 堅持高質(zhì)量發(fā)展策略,塑強核心競爭優(yōu)勢...

關(guān)鍵字: 通信 BSP 電信運營商 數(shù)字經(jīng)濟

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺與中國電影電視技術(shù)學(xué)會聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會上宣布正式成立。 活動現(xiàn)場 NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會上,軟通動力信息技術(shù)(集團)股份有限公司(以下簡稱"軟通動力")與長三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉