新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > 基于嵌入式WinCE的I2C驱动程序设计

基于嵌入式WinCE的I2C驱动程序设计

作者: 时间:2014-08-01 来源:网络 收藏

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

本文引用地址:https://www.eepw.com.cn/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是申请的长度,addr是申请虚拟地址空间的实际物理地址在Win CE中的映射地址。

  然后对申请到的虚拟地址进行操作,安装Windows中的流驱动的模型进行驱动的编写,主要包括下面函数的编写。

  IIC_Init()

  在函数中,主要是对的初始化,主要语句如下:

  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()函数中,主要是创建线程、关联事件和中断,主要语句如下:

  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中,对各个寄存器进行操作,进行数据的赋值,得到读取的数据和发送数据。

  4 驱动的封装和添加到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_MACHINEDriversBuiltInSTRINGS]

  "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驱动程序部分源代码。实验证明该设计是可行的。

linux操作系统文章专题:linux操作系统详解(linux不再难懂)
上拉电阻相关文章:上拉电阻原理

上一页 1 2 下一页

关键词: 嵌入式 WinCE I2C

评论


相关推荐

技术专区

关闭