在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            新聞中心

            EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 基于WinCE的I2C驅(qū)動程序設(shè)計

            基于WinCE的I2C驅(qū)動程序設(shè)計

            作者: 時間:2012-11-13 來源:網(wǎng)絡(luò) 收藏

              3.2 編寫流驅(qū)動程序

              I2C總線驅(qū)動程序采用的是Win CE流驅(qū)動的標(biāo)準(zhǔn)形式。在IIC_Init的函數(shù)中,首先通過函數(shù)VirtualAlloc()和VirtualCopy(),把芯片中針對I2C的物理地址和操作系統(tǒng)的虛存空間聯(lián)系起來,對虛擬地址空間的操作就相當(dāng)于對芯片的物理地址進行操作。地址映射的代碼如下:

            reg = (PVOID)VirtualAlloc(0, sz, MEM_RESERVE, PAGE_NOACCESS);
                if (reg) {
                  if (!VirtualCopy(reg, addr, sz, PAGE_READWRITE | PAGE_NOCACHE )) {
                    RETAILMSG( DEBUGMODE,( TEXT( "Initializing interrupt \" ) ) );
                    VirtualFree(reg, sz, MEM_RELEASE);
                    reg = NULL;
                  }
                }

              其中sz是申請的長度,addr是申請?zhí)摂M地址空間的實際物理地址在Win CE中的映射地址。
              
            然后對申請到的虛擬地址進行操作,安裝Windows中的流驅(qū)動的模型進行驅(qū)動的編寫,主要包括下面函數(shù)的編寫。

            IIC_Init()
              在函數(shù)中,主要是對I2C的初始化,主要語句如下:
              v_pIICregs = ( volatile IICreg *)IIC_RegAlloc((PVOID)IIC_BASE, sizeof(IICreg));
              v_pIOPregs = ( volatile IOPreg *)IOP_RegAlloc((PVOID)IOP_BASE, sizeof(IOPreg));
              v_pIOPregs->rGPEUP|= 0xc000;
              v_pIOPregs->rGPECON |= 0xa00000;
              v_pIICregs->rIICCON = (17) | (06) | (15) | (0xf);
              v_pIICregs->rIICADD= 0x10;
              v_pIICregs->rIICSTAT = 0x10;
              VirtualFree( ( PVOID )v_pIOPregs,sizeof( IOPreg ),MEM_RELEASE );
              v_pIOPregs = NULL;
              if ( !S

            tartDispatchThread( pIIcHead) )
              { IIC_Deinit( pIIcHead );return ( NULL );}在StartDispatchThread()函數(shù)中,主要是創(chuàng)建線程、關(guān)聯(lián)事件和中斷,主要語句如下:
              InterruptInitialize( 36,pIicHead->hIicEvent,NULL,0 );//關(guān)聯(lián)時間和中斷
              CreateThread( NULL,0,IicDispatchThread,pIicHead,0,NULL );//創(chuàng)建線程等待時間
              在IicDispatchThread()函數(shù)中,主要是等待中斷的產(chǎn)生,然后去執(zhí)行:WaitReturn =        WaitForSingleObject( pIicHead->hIicEvent,INFINITE );
              IicEventHandler( pIicHead );//事件處理函數(shù)
              InterruptDone( 36 );

              最后,在函數(shù)IIC_Open、IIC_Read、IIC_Write中,對各個寄存器進行操作,進行數(shù)據(jù)的賦值,得到I

            2C讀取的數(shù)據(jù)和發(fā)送數(shù)據(jù)。

              4 的封裝和添加到Windows CE中

              通過上面的工作,能編譯一個DLL函數(shù),但這還不能叫流接口驅(qū)動程序。因為它的接口函數(shù)還沒有導(dǎo)出,還需要告訴鏈接程序需要輸出什么樣的函數(shù),為此要建立一個自己的def文件,可以用記事本建一個,取名mydrive.Def:

            LIBRARY MyDriver
              EXPORTS
              IIC_Close
              IIC_Deinit
              IIC_Init
              IIC_IOControl
              IIC_Open
              IIC_PowerDown
              IIC_PowerUp
              IIC_Read
              IIC_Seek
              IIC_Write

              然后同樣用記事本編寫一個注冊表文件,取名為mydrive.reg:

            [HKEY_LOCAL_MACHINEDriversBuiltInSTRINGS]
              "Index"=dword:1
              "Prefix"="IIC"
              "Dll"="MyDriver.dll"
              "Order"=dword:0

              最后編寫自己的CEC文件。主要是添加一個Build Method,任務(wù)是復(fù)制注冊表到Win CE的系統(tǒng)目錄下面。加一個Bib File,其主要功能是把編譯的mydrive.dll文件添加到系統(tǒng)內(nèi)核中去。保存寫好的CEC文件。打開Platform Builder,打開“File”菜單,添加剛剛編寫的CEC特征到系統(tǒng)選項中去。生成系統(tǒng)的時候,添加自己的CEC特性,就可以包含剛剛編寫的了。

              以上介紹了Win CE的驅(qū)動結(jié)構(gòu),并給出了基于Win CE的 程序部分源代碼。實驗證明該設(shè)計是可行的。

              參考文獻(xiàn)

            [1].ARM920Tdatasheethttp://www.dzsc.com/datasheet/ARM920T_139814.html.

            [2].RISCdatasheethttp://www.dzsc.com/datasheet/RISC_1189725.html.

            [3].陳向群,等. Windows CE.NET系統(tǒng)分析及實驗教程. 北京:機械工業(yè)出版社,2003

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

            [5].Microsoft.Windows CE設(shè)備驅(qū)動程序開發(fā)指南. 北京:北京希望電子出版社,1999


            上一頁 1 2 下一頁

            關(guān)鍵詞: WinCE I2C驅(qū)動 S3C2410

            評論


            相關(guān)推薦

            技術(shù)專區(qū)

            關(guān)閉