首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

基于WinCE的II2C驱动程序设计 02

基于WinCE的II2C驱动程序设计 02

  IIC_Init()
      在函数中,主要是对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 = (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 ( !StartDispatchThread( pIIcHead) )
      { IIC_Deinit( pIIcHead );return ( NULL );}在StartDispatchThread()函数中,主要是创建线程、关联事件和中断,主要语句如下:
      InterruptInitialize( 36,pIicHead->hIicEvent,NULL,0 );//关联时间和中断
      CreateThread( NULL,0,IicDispatchThread,pIicHead,0,NULL );//创建线程等待时间
      在IicDispatchThread()函数中,主要是等待中断的产生,然后去执行:WaitReturn =        WaitForSingleObject( pIicHead->hIicEvent,INFINITE );
      IicEventHandler( pIicHead );//事件处理函数
      InterruptDone( 36 );
      最后,在函数IIC_Open、IIC_Read、IIC_Write中,对各个寄存器进行操作,进行数据的赋值,得到I2C读取的数据和发送数据。
    4  I2C驱动的封装和添加到Windows CE中
      通过上面的工作,能编译一个DLL函数,但这还不能叫流接口驱动程序。因为它的接口函数还没有导出,还需要告诉链接程序需要输出什么样的函数,为此要建立一个自己的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_MACHINE\Drivers\BuiltIn\STRINGS]
      "Index"=dword:1
      "Prefix"="IIC"
      "Dll"="MyDriver.dll"
      "Order"=dword:0
      最后编写自己的CEC文件。主要是添加一个Build Method,任务是复制注册表到Win CE的系统目录下面。加一个Bib File,其主要功能是把编译的mydrive.dll文件添加到系统内核中去。保存写好的CEC文件。打开Platform Builder,打开“File”菜单,添加刚刚编写的CEC特征到系统选项中去。生成系统的时候,添加自己的CEC特性,就可以包含刚刚编写的I2C驱动了。
    以上介绍了Win CE的驱动结构,并给出了基于Win CE的 I2C驱动程序部分源代码。实验证明该设计是可行的。
返回列表