<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > 基于嵌入式WinCE的I2C驅動(dòng)程序設計

基于嵌入式WinCE的I2C驅動(dòng)程序設計

作者: 時(shí)間:2014-08-01 來(lái)源:網(wǎng)絡(luò ) 收藏

  reg = (PVOID)VirtualAlloc(0, sz, MEM_RESERVE, PAGE_NOACCESS);

本文引用地址:http://dyxdggzs.com/article/256368.htm

  if (reg) {

  if (!VirtualCopy(reg, addr, sz, PAGE_READWRITE | PAGE_NOCACHE )) {

  RETAILMSG( DEBUGMODE,( TEXT( "Initializing interrupt \n\r" ) ) );

  VirtualFree(reg, sz, MEM_RELEASE);

  reg = NULL;

  }

  }

  其中sz是申請的長(cháng)度,addr是申請虛擬地址空間的實(shí)際物理地址在Win CE中的映射地址。

  然后對申請到的虛擬地址進(jìn)行操作,安裝Windows中的流驅動(dòng)的模型進(jìn)行驅動(dòng)的編寫(xiě),主要包括下面函數的編寫(xiě)。

  IIC_Init()

  在函數中,主要是對的初始化,主要語(yǔ)句如下:

  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 = (1<<7) | (0<<6) | (1<<5) | (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()函數中,主要是創(chuàng )建線(xiàn)程、關(guān)聯(lián)事件和中斷,主要語(yǔ)句如下:

  InterruptInitialize( 36,pIicHead->hIicEvent,NULL,0 );//關(guān)聯(lián)時(shí)間和中斷

  CreateThread( NULL,0,IicDispatchThread,pIicHead,0,NULL );//創(chuàng )建線(xiàn)程等待時(shí)間

  在IicDispatchThread()函數中,主要是等待中斷的產(chǎn)生,然后去執行:WaitReturn = WaitForSingleObject( pIicHead->hIicEvent,INFINITE );

  IicEventHandler( pIicHead );//事件處理函數

  InterruptDone( 36 );

  最后,在函數IIC_Open、IIC_Read、IIC_Write中,對各個(gè)寄存器進(jìn)行操作,進(jìn)行數據的賦值,得到讀取的數據和發(fā)送數據。

  4 驅動(dòng)的封裝和添加到Windows CE中

  通過(guò)上面的工作,能編譯一個(gè)DLL函數,但這還不能叫流接口驅動(dòng)程序。因為它的接口函數還沒(méi)有導出,還需要告訴鏈接程序需要輸出什么樣的函數,為此要建立一個(gè)自己的def文件,可以用記事本建一個(gè),取名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

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

  [HKEY_LOCAL_MACHINEDriversBuiltInSTRINGS]

  "Index"=dword:1

  "Prefix"="IIC"

  "Dll"="MyDriver.dll"

  "Order"=dword:0

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

  以上介紹了Win CE的驅動(dòng)結構,并給出了基于Win CE的 I2C驅動(dòng)程序部分源代碼。實(shí)驗證明該設計是可行的。

linux操作系統文章專(zhuān)題:linux操作系統詳解(linux不再難懂)
上拉電阻相關(guān)文章:上拉電阻原理

上一頁(yè) 1 2 下一頁(yè)

關(guān)鍵詞: 嵌入式 WinCE I2C

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>