亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        Windows CE下GPIO流接口的驅(qū)動(dòng)程序開發(fā)原理

        2011-06-22 08:18:42張愛民梁書劍付健
        關(guān)鍵詞:驅(qū)動(dòng)程序內(nèi)核寄存器

        張愛民,梁書劍,付健

        (總參謀部通信訓(xùn)練基地,宣化075100)

        張愛民(講師),研究方向?yàn)檐娪脽o線通信與網(wǎng)絡(luò)、通信抗干擾技術(shù)。梁書劍(講師),研究方向?yàn)檐娪脽o線通信;付健(講師),研究方向?yàn)橥ㄐ趴垢蓴_技術(shù)。

        1 概 述

        Windows CE是Microsoft公司專門針對(duì)嵌入式產(chǎn)品領(lǐng)域開發(fā)的嵌入式操作系統(tǒng)。該系統(tǒng)是一種緊湊、高效、可伸縮的32位操作系統(tǒng),主要面向各種嵌入式系統(tǒng)和產(chǎn)品。它的模塊化設(shè)計(jì)使嵌入式系統(tǒng)和應(yīng)用程序開發(fā)者能夠方便地加以定制,以適應(yīng)一系列產(chǎn)品(例如消費(fèi)類電子設(shè)備、專用工業(yè)控制器和嵌入式通信設(shè)備等)的需要。GPIO是端口的擴(kuò)展器,當(dāng)微控制器或者芯片沒有足夠的I/O端口,或者當(dāng)系統(tǒng)需要用遠(yuǎn)端串行通信端口時(shí),GPIO能夠提供額外的控制和監(jiān)視功能[1]。用戶可以通過GPIO與硬件工作,例如點(diǎn)亮LED、控制蜂鳴器、控制 LCD顯示和鍵盤的輸入等。所以GPIO的應(yīng)用極為廣泛,但是這些都需要驅(qū)動(dòng)的支持。

        2 GPⅠO流驅(qū)動(dòng)原理

        Windows CE的所有驅(qū)動(dòng)程序都可以通過流接口驅(qū)動(dòng)來實(shí)現(xiàn),GPIO驅(qū)動(dòng)程序開發(fā)也通過流接口驅(qū)動(dòng)來實(shí)現(xiàn)。流接口驅(qū)動(dòng)是最基本的一種驅(qū)動(dòng)結(jié)構(gòu),它的接口是一組固定的流接口函數(shù)。流接口驅(qū)動(dòng)可以把外設(shè)抽象成一個(gè)文件,過程是:應(yīng)用程序調(diào)用操作系統(tǒng)的 API函數(shù),操作系統(tǒng)通過驅(qū)動(dòng)接口調(diào)用驅(qū)動(dòng)程序的硬件操作函數(shù)來完成對(duì)硬件的操作。

        流接口函數(shù)包括 XXX_Init、XXX_Deinit、XXX_Open 、XXX_Close 、XXX_Read 、XXX_Write、XXX_PowerUp 、XXX_PowerDown、XXX_IOControl、XXX_Seek 、XXX_PreClose、XXX_PreDeinit。其中,XXX表示設(shè)備名的前綴,它非常重要,因?yàn)樵O(shè)備管理器在注冊(cè)表中通過前綴來識(shí)別設(shè)備。流接口驅(qū)動(dòng)是動(dòng)態(tài)鏈接庫,由設(shè)備管理程序的特殊應(yīng)用程序加載、管理和卸載。在實(shí)際的開發(fā)中,用設(shè)備的前綴名來代替XXX。例如:GPIO設(shè)備的前綴名可以是GIO,相應(yīng)地要實(shí)現(xiàn)的DLL接口為GIO_Init、GIO_Read 、GIO_IOControl等。其中,XXX_Init用于初始化必要的資源、內(nèi)存映射和IST(中斷服務(wù)線程)。XXX_IOControl為設(shè)備的特定操作提供擴(kuò)展接口,對(duì)于大多數(shù)的驅(qū)動(dòng),GPIO主要操作都在這里,它會(huì)被應(yīng)用層的API函數(shù)調(diào)用來獲得或者設(shè)置狀態(tài)。應(yīng)用程序通過調(diào)用XXX_IOControl函數(shù)并傳入不同的操作碼,實(shí)現(xiàn)GPIO的各種功能。而在應(yīng)用程序里對(duì)應(yīng)的文件API函數(shù)有ActivateDeviceEx、RegisterDevice、CreateFile、DeviceIoControl、ReadFile、WriteFile、CloseHandle、SetFilePointer等 。

        流接口驅(qū)動(dòng)既可以是不分層的架構(gòu),也可以是分層架構(gòu)[2]。同時(shí),流接口驅(qū)動(dòng)既可以管理內(nèi)建設(shè)備,也可以管理安裝設(shè)備;既可以在設(shè)備啟動(dòng)時(shí)加載,也可以在需要時(shí)動(dòng)態(tài)加載。流接口驅(qū)動(dòng)的架構(gòu)如圖1所示。

        3 GPⅠO驅(qū)動(dòng)開發(fā)過程

        Samsung公司基于ARM11內(nèi)核的SC36410處理器包含了17個(gè)GP端口,從GPA到GPQ共187針。這些I/O大部分是可以復(fù)用的,可以作為輸入口、輸出口和特殊功能口,不同的功能通過各自的配置控制寄存器GPxCON選擇來實(shí)現(xiàn)。配置好相應(yīng)的控制寄存器后就可以選擇相應(yīng)數(shù)據(jù)寄存器GPxDAT進(jìn)行讀寫數(shù)據(jù)。GPxDAT用來選擇是否使用內(nèi)部上拉電阻,當(dāng)引腳被設(shè)置為輸入時(shí),讀此寄存器可知引腳的狀態(tài)是高電平還是低電平;當(dāng)引腳被設(shè)置為輸出時(shí),寫此寄存器可令該引腳為高電平或者低電平。以SC36410的GPM端口為例來介紹GPIO驅(qū)動(dòng)的開發(fā)。通過查閱SC36410手冊(cè)看到GPMCON的地址為0x7F008820,GPMDAT的地址為0x7F008824,GPMPUD的地址為0x7F008828。GPM端口包括6針(GPM[5:0]),每針的輸入/輸出由GPM0到GPM5寄存器分別確定。控制寄存器GPM0設(shè)置為0000時(shí),表明GPM[0]引腳為輸入腳;控制寄存器 GPM0設(shè)置為 0001時(shí),表明GPM[0]引腳為輸出腳。其他引腳操作完全類似。

        圖1 流接口驅(qū)動(dòng)的架構(gòu)

        3.1 地址映射

        Windows CE有虛擬地址和物理地址之分,程序訪問的地址都是虛擬地址。要訪問硬件的物理地址,驅(qū)動(dòng)程序必須將設(shè)備的物理地址映射到IST正在運(yùn)行的地址空間,完成物理地址到虛擬地址的映射[3]。函數(shù)VirtualAlloc、VirtualCopy和VirtualFree是Windows CE的內(nèi)核函數(shù),具有同樣功能的CEDDK函數(shù)MmMapIoSpace和UnMmMap-IoSpace也可以完成地址映射。添加如下語句:

        經(jīng)過地址映射后,結(jié)構(gòu)體變量指針v_pIOPregs就可以訪問GPM的寄存器了。

        3.2 編寫驅(qū)動(dòng)實(shí)現(xiàn)代碼

        Windows CE里設(shè)備驅(qū)動(dòng)程序本質(zhì)上是一些動(dòng)態(tài)鏈接庫(DLL),它們向內(nèi)核提供一些入口函數(shù),這樣設(shè)備管理器就可以通過這些函數(shù)與具體的硬件設(shè)備進(jìn)行通信。GPIO驅(qū)動(dòng)的入口函數(shù)為DllMain。DllMain是一個(gè)可選的DLL入口方式,在進(jìn)程和線程初始化或終止時(shí)以及調(diào)用LoadLibrary或FreeLibrary之后被系統(tǒng)調(diào)用,DllMain函數(shù)如下所示:

        Windows CE加載設(shè)備驅(qū)動(dòng)時(shí),產(chǎn)生DLL_PROCESS_ATTACH調(diào)用DllMain,初始化設(shè)備,分配所需資源,并且開啟ISR和IST;當(dāng)卸載設(shè)備驅(qū)動(dòng)時(shí),產(chǎn)生DLL_PROCESS_DETACH,調(diào)用DllMain,關(guān)閉設(shè)備并釋放它占用的各種資源[4]。

        加載設(shè)備驅(qū)動(dòng)的具體步驟如下:

        ①新建GPM_Driver.cpp文件,添加一些頭文件和完善接口函數(shù)的內(nèi)容:在GPM_Init()函數(shù)中完成虛擬地址映射,在GPM_Deinit()中釋放虛擬地址空間和各種資源。代碼如下:

        在GPM_IOControl()函數(shù)中實(shí)現(xiàn)了GPIO的大部分操作,按照SC36410手冊(cè)的說明和要求使I/O控制代碼識(shí)別要完成的操作。GPMCON控制寄存器的輸入/輸出配置,GPMDAT負(fù)責(zé)數(shù)據(jù)寄存器的讀寫,部分代碼如下:

        ②創(chuàng)建GPM_Driver.DEF文件,提供驅(qū)動(dòng)接口。

        3.3 驅(qū)動(dòng)程序配置[5]

        配置驅(qū)動(dòng)程序的具體步驟如下:

        ①為使Windows CE生成內(nèi)核映像時(shí)自動(dòng)將GPM_Driver.dll加入到系統(tǒng)內(nèi)核映像,在platform.bib文件中添加如下內(nèi)容:

        ②在platform.reg文件中添加如下內(nèi)容,當(dāng)Win-dows CE啟動(dòng)時(shí),就會(huì)自動(dòng)加載該驅(qū)動(dòng)了。

        ③新建Makefile文件,并添加內(nèi)容如下:!INCLUDE$(_MAKEENVROOT)makefile.def

        ④配置sources文件。把其他驅(qū)動(dòng)程序的sources文件復(fù)制過來,在文件某些位置替換為GPM_Driver的內(nèi)容。

        ⑤在X:WINCE600PLATFORMSMDK6410SRCDRIVERS的dirs文件下,X代表Windows CE的安裝盤符,按照文件格式添加GPM_Driver。

        ⑥對(duì)驅(qū)動(dòng)程序進(jìn)行編譯,生成的GPM_Driver.dll會(huì)自動(dòng)加入到操作系統(tǒng)內(nèi)核映像,最終生成NK.bin文件,下載到目標(biāo)板后即可被頂層的應(yīng)用程序API函數(shù)調(diào)用,實(shí)現(xiàn)GPIO的輸入/輸出等功能。這樣,GPM便可以實(shí)現(xiàn)控制LED發(fā)光、蜂鳴器發(fā)出聲響等功能了。

        結(jié) 語

        Windows CE已經(jīng)成為廣泛應(yīng)用的嵌入式操作系統(tǒng),本文以SC36410的GPM端口為例,主要介紹了Windows CE下GPIO驅(qū)動(dòng)程序的開發(fā)方法,分析了GPIO流接口驅(qū)動(dòng)程序的開發(fā)原理,主要包括建立DLL項(xiàng)目、編寫一些輸入/輸出函數(shù)和寄存器,以及配置驅(qū)動(dòng)程序等,對(duì)Windows CE下GPIO驅(qū)動(dòng)編寫具有一定的參考價(jià)值。

        [1]周建設(shè).Windows CE設(shè)備驅(qū)動(dòng)及BSP開發(fā)指南[M].北京:中國電力出版社,2009.

        [2]張冬泉,譚南林.Windows CE開發(fā)實(shí)例精粹[M].北京:電子工業(yè)出版社,2008.

        [3]胡秀鳳,丁承君,張明路,等.Windows CE下GPIO驅(qū)動(dòng)程序的設(shè)計(jì)與應(yīng)用[J].微計(jì)算機(jī)信息,2009,25(6-2);140-141.

        [4]趙振中,徐家愷.基于WindowsCE的GPIO鍵盤驅(qū)動(dòng)設(shè)計(jì)與實(shí)現(xiàn)[J].科學(xué)技術(shù)與工程,2008,8(6);1598-1600.

        [5]楊澤輝,徐燕玲,劉碧君,等.基于嵌入式 WinCE的GPIO驅(qū)動(dòng)開發(fā)[J].太原科技大學(xué)學(xué)報(bào),2010,31(6);446-448.

        猜你喜歡
        驅(qū)動(dòng)程序內(nèi)核寄存器
        萬物皆可IP的時(shí)代,我們當(dāng)夯實(shí)的IP內(nèi)核是什么?
        強(qiáng)化『高新』內(nèi)核 打造農(nóng)業(yè)『硅谷』
        Lite寄存器模型的設(shè)計(jì)與實(shí)現(xiàn)
        基于嵌入式Linux內(nèi)核的自恢復(fù)設(shè)計(jì)
        Linux內(nèi)核mmap保護(hù)機(jī)制研究
        分簇結(jié)構(gòu)向量寄存器分配策略研究*
        高速數(shù)模轉(zhuǎn)換器AD9779/AD9788的應(yīng)用
        一種可重構(gòu)線性反饋移位寄存器設(shè)計(jì)
        驅(qū)動(dòng)程序更新與推薦
        驅(qū)動(dòng)程序更新與推薦
        国产人成无码视频在线观看| 国产一区二区内射最近更新| 日本不卡一区二区三区在线| 国产麻豆精品久久一二三| av大片在线无码免费| 日韩精品成人一区二区三区| 亚洲AⅤ无码国精品中文字慕| 亚洲AV无码成人精品区H| 亚洲av网站首页在线观看| 日韩av一区二区蜜桃| 少妇精品亚洲一区二区成人| 亚洲一区二区三区四区五区黄| 麻豆免费观看高清完整视频| 国产成人乱色伦区| 天天躁日日躁狠狠躁人妻| 国产精彩刺激对白视频| 久久久国产精品三级av| 一区二区三区天堂在线| 亚洲日韩精品无码av海量| 精品av天堂毛片久久久| 国产成人精品日本亚洲语音1| 国产成人夜色在线视频观看| 久久精品久久精品中文字幕| 久久九九精品国产av| 欧美性生交活xxxxxdddd| 污污内射在线观看一区二区少妇| 少妇无码av无码去区钱| 一个人的视频免费播放在线观看| 亚洲精品偷拍自综合网| 亚洲最好看的中文字幕| 狼人青草久久网伊人 | 国产精品成人一区二区三区| 无码超乳爆乳中文字幕| 日本在线观看三级视频| 久久精品99国产精品日本| 国产伦久视频免费观看视频| 91成人午夜性a一级毛片| 久久亚洲一区二区三区四区五| 一区二区三区人妻少妇| 女邻居的大乳中文字幕| 国产精品天天看大片特色视频|