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

        ?

        基于WINCE5.0的IIC總線驅(qū)動程序設(shè)計

        2012-03-26 03:32:56陳紹貴王新華郭淑琴
        關(guān)鍵詞:驅(qū)動程序調(diào)用寄存器

        陳紹貴,王新華,郭淑琴

        (1.浙江工業(yè)大學(xué)信息學(xué)院,浙江杭州310023;2.浙江科技學(xué)院信息學(xué)院,浙江杭州310023)

        0 引言

        隨著信息技術(shù)的發(fā)展,以嵌入式智能設(shè)備為核心的后PC時代已經(jīng)來臨,嵌入式技術(shù)和產(chǎn)品得到了很大的發(fā)展,美國微軟公司也發(fā)布了一系列嵌入式操作系統(tǒng),并且取得了巨大的成功。WinCE是微軟公司設(shè)計的一個開放的、可裁剪的、32位的實時窗口操作系統(tǒng),具有可靠性好、實時性高、內(nèi)核體積小等特點;擁有良好的通信能力、出色的圖形界面、靈活的電源管理,并內(nèi)置多媒體功能、支持多種CPU,所以被廣泛應(yīng)用于移動應(yīng)用產(chǎn)品、消費類電子產(chǎn)品和嵌入式智能設(shè)備的開發(fā)[1]。為了使操作系統(tǒng)與硬件很好的連接在一起,編寫硬件的驅(qū)動程序就顯得至關(guān)重要了。

        1 IIC總線協(xié)議

        IIC串行總線一般有兩根信號線,一根是雙向的數(shù)據(jù)線SDA,另一根是時鐘線SCL。所有接到IIC總線設(shè)備上的串行數(shù)據(jù)SDA都接到總線的SDA上,各設(shè)備的時鐘線SCL接到總線的SCL上。IIC總線是遵從串行傳輸協(xié)議的。當總線開始工作的時候,即各位串行(一位接一位)發(fā)送,由時鐘(clock)線指示讀數(shù)據(jù)(data)線的時刻。IIC總線數(shù)據(jù)由8位構(gòu)成,傳輸數(shù)據(jù)前首先傳輸一個地址,地址由8位組成,前7位為設(shè)備地址,第8位為傳輸方向。S3C2440A的IIC總線接口有4種工作模式:主機發(fā)送模式、主機接收模式、從機發(fā)送模式、從機接收模式。在一般嵌入式系統(tǒng)中,IIC總線一般外接一片EEPROM。EEPROM(Electrically Erasable Programmable Read-Only Memory)有8針和14針兩種封裝,我們的系統(tǒng)采用的是8針封裝的芯片。芯片上SCL和SDA兩個引腳直接連到CPU上引腳;為了可以控制EEPROM的讀寫,把WP引腳連接到VD9/GPD1引腳上,當CPU把這個引腳置高電平或低電平時,就可以控制EEPROM是可讀可寫還是可讀不可寫。A2、A1和A0是設(shè)備地址,沒有連接外設(shè)或者兼容設(shè)備時,應(yīng)該全部置低電平,這樣可以讀出EEPROM的地址。為了保護芯片,SCL、SDA和WP信號線都接4.7K的上拉電阻。芯片采用的是AT24C64N-10SI-2.7。IIC硬件連接如圖1所示。

        圖1 IIC總線硬件電路

        處理對IIC總線操作通過操作IIC總線寄存器完成,S3C2440A總線寄存器如下:(1)多主機IIC總線控制IICCON寄存器(物理地址0X54000000);(2)多主機IIC總線控制狀態(tài)IICSTAT寄存器(物理地址0X54000004);(3)多主機IIC總線地址IICADD寄存器(物理地址0X54000008);(4)多主機IIC總線發(fā)送接收數(shù)據(jù)移位IICDS寄存器(物理地址0X5400000C);(5)多主機IIC總線線控制IICLC寄存器(物理地址0X54000010)。

        2 WINCE5.0的IIC總線驅(qū)動結(jié)構(gòu)

        基于WinCE5.0的IIC總線驅(qū)動程序是分層驅(qū)動。Device.exe(設(shè)備管理器)調(diào)用LoadLibrary函數(shù)而引用動態(tài)鏈接庫入口函數(shù)DllEntry把i2c.dll(IIC總線驅(qū)動的動態(tài)鏈接庫的名稱)加載到內(nèi)存當中或者通過Freelibrary引用DllEntry釋放資源,然后調(diào)用I2C_Init初始化設(shè)備或者調(diào)用I2C_Deinit卸載這個設(shè)備,這些函數(shù)都位于IIC總線驅(qū)動程序的MDD,MDD層中的函數(shù)通過調(diào)用PDD層中的函數(shù)操作底層硬件。分層驅(qū)動是將驅(qū)動程序代碼分為模型設(shè)備驅(qū)動(Model Device Driver,MDD)和稱為平臺相關(guān)驅(qū)動(Platform Dependent Driver,PDD)的下層。MDD層是微軟公司提供的給定類型所有驅(qū)動程序公用的代碼,在驅(qū)動程序修改或者編寫的時候,一般不建議修改MDD層代碼,以免系統(tǒng)無法使用提供的驅(qū)動程序;PDD層是由特定于給定硬件設(shè)備或平臺的代碼組成的,MDD層調(diào)用PDD層函數(shù)來訪問硬件或者特定硬件信息[2、3]。Device.exe通過流驅(qū)動接口函數(shù)管理IIC總線設(shè)備,IIC總線的流驅(qū)動借口函數(shù)位于程序的MDD層,這個文件在移植過程中是不需要修改的。主要工作是編寫或者修改(根據(jù)設(shè)備或者芯片不同)IIC總線的PPD層。

        3 WinCE5.0的IIC總線驅(qū)動實現(xiàn)

        IIC總線驅(qū)動程序代碼構(gòu)成,本文采用飛凌公司OK2440-III提供的SMDK2440A的BSP包。IIC總線的驅(qū)動程序位于%_W INCEROOT%PLATFORMSMDK2440ASrcDR IVERSIIC。里面包含了多個文件,其中drv.c和i2c.c是IIC總線的驅(qū)動程序代碼,drv.h是所需的頭文件。其中drv.c是IIC總線驅(qū)動的MDD層,而i2c.c是它的PDD層。利用PlatBuilder5.0移植驅(qū)動程序。

        IIC總線驅(qū)動程序?qū)崿F(xiàn)分析,因為PDD層需要與硬件打交道,而IIC的硬件操作主要是通過操作CPU的寄存器,在S3C2440A_IIC_BUS結(jié)構(gòu)體中定義了它所有的寄存器,S3C2440A所有寄存器地址在s2440addr.h中。由于需要與I/O口打交道,我們要對I/O口進行配置,在s3c2440a_ioport.h中定義一個包含所有GPIO口寄存器的S3C2440A_IOPORT_REG結(jié)構(gòu)體。IIC的操作需要用到時鐘PCLK,在S3C2440A_CLKPWR_REG結(jié)構(gòu)體中定義了所有的S3C2440A使用到的時鐘,包括FCLK、HCLK和PCLK等。在drv.h文件中定義了一個_I2C_CONTEXT結(jié)構(gòu)體,對于IIC所有操作都指向這個結(jié)構(gòu)體,包括對IIC總線的初始化、中斷、IIC總線的狀態(tài)等。I2C_STATE枚舉結(jié)構(gòu)中枚舉了IIC的所有狀態(tài),有閑置、讀、寫等。

        IIC TX/RX是通過中斷的方式完成的。在i2c.def列舉了所有的IIC總線需要實現(xiàn)的流接口函數(shù),在PPD層中有幾個一定需要實現(xiàn)的流接口函數(shù)。在Device.exe完成加載IIC總線驅(qū)動后,第一個調(diào)用的函數(shù)是I2C_Init,而這個MDD層函數(shù)這是通過調(diào)用PDD層的HW_Init函數(shù)完成,這個函數(shù)主要做以下幾方面的工作:初始化IIC主要的數(shù)據(jù)結(jié)構(gòu)體變量的結(jié)構(gòu)成員,主要是為控制流服務(wù)的;初始化IIC總線接口的寄存器,為后面IIC TX/RX做準備,這個是通過調(diào)用InitRegs函數(shù)完成的;創(chuàng)建I/O事件、創(chuàng)建IST事件、為IIC物理中斷申請相應(yīng)的邏輯中斷號、把IIC的邏輯中斷和創(chuàng)建的IST事件綁定在一起、創(chuàng)建IIC線程,這個線程用于控制IIC操作的控制流。HW_Deinit主要在完成中斷后關(guān)中斷。SyncIst主要是同步IIC中斷服務(wù)線程I2C_IST。參考AT24C64N-10SI-2.7的數(shù)據(jù)手冊,可以編寫HW_Read和HW_Write兩個函數(shù),

        可以發(fā)現(xiàn)在數(shù)據(jù)手冊中,對于IIC的讀寫都是先讀寫設(shè)備地址,再讀寫數(shù)據(jù)的。I2C_IST就是響應(yīng)中斷函數(shù),其中用switch語句選擇響應(yīng)怎么樣的操作。其整個驅(qū)動程序流程圖如圖2所示:

        IIC總線驅(qū)動的配置文件,在WINCE5.0中,所有的驅(qū)動,無論單層驅(qū)動還是流驅(qū)動,都是以動態(tài)鏈接庫(.dll)的形式存在的,當系統(tǒng)啟動時,這些驅(qū)動就動態(tài)的加載到系統(tǒng)當中。配置文件用來指導(dǎo)如何編譯驅(qū)動(MakeFile文件),還用來確定驅(qū)動程序最后生成的動態(tài)鏈接庫的文件名、存放目錄等(source、platform.bib、platform.reg),并把這些重要信息放在注冊表文件中提供給操作系統(tǒng),以便操作系統(tǒng)對驅(qū)動程序進行管理。Platform.bib文件中對IIC描述如下:

        圖2 IIC總線驅(qū)動程序流程圖

        IF BSP_NOI2C!

        i2c.dll$(_FLATRELEASEDIR)i2c.dllNKSH

        ENDIF BSP_NOI2C!

        由此可知,i2c.dll將被加載到NK(內(nèi)核)的存儲區(qū)域,且i2c.dll具有系統(tǒng)和隱藏屬性,NK區(qū)域在config.bib中定義為NK80400000。

        platform.reg是WINCE5.0的注冊表文件,系統(tǒng)根據(jù)注冊表對驅(qū)動程序的描述動態(tài)的加載驅(qū)動,它對IIC驅(qū)動程序的描述如下:

        "Prefix"="I2C"http://驅(qū)動函數(shù)的前綴鍵值

        "Dll"="I2C.DLL"http://動態(tài)鏈接庫的名稱

        "Order"=dword:8//驅(qū)動的加載順序,這表明IIC驅(qū)動不會過早被加載

        "Index"=dword:0//驅(qū)動索引

        "Mode"=dword:1//Mode:0=POLLING,1=INTERRUPT

        "SlaveAddress"=dword:0//Bus Driver's Slave Address

        "FriendlyName"="I2C Bus Driver"

        "IClass"="{A32942B7-920C-486b-B0E6-92A702A99B35}"http://電源管理

        Source文件包含一些宏定義,編譯軟件(platformbuider5.0)利用這些宏定義作為選項來決定如何編譯和鏈接源文件,IIC總線的source問價描述如下:

        RELEASETYPE=PLATFORM//編譯系統(tǒng)

        TARGETNAME=i2c//驅(qū)動名稱

        TARGETTYPE=DYNLINK//生成動態(tài)鏈接庫

        DLLENTRY=DllEntry//驅(qū)動入口函數(shù)

        IIC總線驅(qū)動移植,成功的移植IIC總線驅(qū)動必須認真研讀EEPROM的手冊,對于不同的芯片,讀地址、讀操作、寫操作的時序必須分析清楚。AT24C02和AT24C64的讀寫操作時序是不一樣,在讀寫完成等待時間(延遲)也是不一樣的,延遲對于硬件移植來說是非常重要的一環(huán)。

        IIC總線驅(qū)動移植結(jié)果,IIC總線驅(qū)動移植調(diào)試用一款基于WINC5.0的調(diào)試軟件,調(diào)試結(jié)果如圖3所示:

        圖3 IIC驅(qū)動調(diào)試結(jié)果

        4 結(jié)束語

        本文簡單介紹了基于WINCE5.0的驅(qū)動程序的分層驅(qū)動,在此基礎(chǔ)上講解了IIC總線的驅(qū)動程序,對于移植WINCE下的IIC總線驅(qū)動有一定的作用。

        [1]周毓林.Windows CE net內(nèi)核定植及應(yīng)用開發(fā)[M].北京:電子工業(yè)出版社,2005:25-23.

        [2]顧崢浩,王自強,聶文華.WinCE流驅(qū)動程序設(shè)計概述[J].微處理機,2007,(3):81-83.

        [3]張冬泉,譚南林,蘇樹強.Windows CE實用開發(fā)技術(shù)[M].北京:電子工業(yè)出版社,2008:272-273.

        [4]張毅,王海濤.基于S3C2410的WinCE5.0下觸摸屏驅(qū)動的實現(xiàn)[J].重慶郵電大學(xué)學(xué)報,2008,20(6):742-744.

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

        [6]陽開新.鐵氧體材料及應(yīng)用[J].磁性材料及器件,1996,27(3):19-23.

        猜你喜歡
        驅(qū)動程序調(diào)用寄存器
        Lite寄存器模型的設(shè)計與實現(xiàn)
        核電項目物項調(diào)用管理的應(yīng)用研究
        LabWindows/CVI下基于ActiveX技術(shù)的Excel調(diào)用
        分簇結(jié)構(gòu)向量寄存器分配策略研究*
        基于系統(tǒng)調(diào)用的惡意軟件檢測技術(shù)研究
        利用RFC技術(shù)實現(xiàn)SAP系統(tǒng)接口通信
        高速數(shù)模轉(zhuǎn)換器AD9779/AD9788的應(yīng)用
        一種可重構(gòu)線性反饋移位寄存器設(shè)計
        驅(qū)動程序更新與推薦
        驅(qū)動程序更新與推薦
        成人午夜视频在线观看高清| 无码任你躁久久久久久久| 精品一区二区久久久久久久网站| 高清国产美女一级a毛片在线| 国产白浆大屁股精品视频拍| 国产成人av无码精品| 亚洲欧美成人一区二区在线电影| 欧美色色视频| 国产黄色一级到三级视频| 亚洲大尺度无码无码专区| 中文成人无码精品久久久不卡| 久久精品无码专区东京热| 日本特殊按摩在线观看| 欧美颜射内射中出口爆在线 | 亚洲 自拍 另类 欧美 综合 | 人妻暴雨中被强制侵犯在线| 丰满少妇爆乳无码专区| 清纯唯美亚洲经典中文字幕| 极品尤物一区二区三区| 久久精品国产亚洲精品| 波多吉野一区二区三区av| 精品久久中文字幕系列| 亚洲熟妇无码一区二区三区导航| 国产又黄又爽视频| 国产精品亚洲av一区二区三区 | 高清午夜福利电影在线| 醉酒后少妇被疯狂内射视频| 天天摸天天做天天爽天天舒服| 亚洲国产精品区在线观看| 欧美黑人群一交| 狼友AV在线| 日本啪啪视频一区二区| 国产做国产爱免费视频| 成年视频国产免费观看| 精品国产乱码一区二区三区| 亚洲乱码一区二区三区在线观看 | 一本久道视频无线视频试看| 免费av一区二区三区| 拍摄av现场失控高潮数次| 97色人阁俺也去人人人人人| 在线观看免费日韩精品|