RSS

光电编码器的驱动程序设计02

来源:网络 作者:佚名 时间:2008-07-03 Tag:光电编码器   驱动程序   设计   点击:

工作状态下,将EINT0、EINT1配置成上升沿和下降沿均触发的外部中断,将EINT2配置成上升沿触发的中断,旋钮按下时EINT2引脚产生上升沿触发中断。

  3.2 外部中断初始化及中断服务程序的编写

  首先必须完成CPU的I/O口和中断的初始化工作,然后再编写中断处理程序。具体分为4个步骤:

  ① 初始化I/O口。在Port_Init()函数中,将EINT0和EI

NT1初始化为上升沿和下降沿均触发的中断,将EINT2初始化为上升沿触发的中断。

  ② 添加中断号。在oalintr.h下添加光电编码器中断向量的宏定义。代码为

  #define SYSINTR_OED(SYSINTR_FIRMWARE+20)

  ③ 添加中断的初始化、禁止、复位等函数,分别在OEMInterruptEnable()、OEMInterruptDisable()、OEMInterruptDone()等函数中加入相关代码。

  ④ 返回中断标识,由OEMInterruptHandler()函数返回中断标识(SYSINTR_OED)。

  3.3 编写流接口驱动程序

  Windows CE.net把中断处理分成两个部分:中断服务程序(ISR)和中断服务线程(IST)。ISR通常要求越短、越快越好,它的唯一任务就是返回中断标识。正由于ISR很小,只能做少量的处理,因此中断处理器就调用IST执行大多数的中断处理。中断服务线程(IST)在从 WaitForSingleObject()函数得到中断已经发生的信号前一直保持空闲;当接收到中断信号后,它就在本机设备驱动程序的PDD层调用子程序,这些程序反过来访问硬件以获得硬件的状态。IST使用InterruptInitialize()函数来注册自己,然后使用 WaitForSingleObject()函数等待中断信号。如果这时中断信号到来,则应将光电编码器的状态记录下来,保存在变量OED_Status 中。OED_Status=1表示旋钮按下,OED_Status=2表示旋钮逆时针旋转,OED_Status=3表示旋钮顺时针旋转。

  这里还有一种比较简单的鉴相规则,具体步骤是,当创建线程时读出EINT1的电平状态并保存在变量PreEINT1中,每次中断到来时首先判断 EINT2是否为高电平。如果为高电平,则说明按钮按下;如果EINT2为低电平,则判断EINT0电平是否与PreEINT1相同。如果相同,则说明旋钮逆时针旋转;反之,旋钮顺时针旋转,判断的流程如图5所示。

光电编码器鉴相流程框图

图5 光电编码器鉴相流程框图

  Windows CE流接口驱动程序模型要求驱动程序开发者编写10个接口函数,针对光电编码器的驱动主要应完成设备初始化和数据读取2个函数的编写。Windows CE设备文件名前缀由3个大写字母组成,操作系统使用这3个字母来识别与流接口驱动程序相对应的设备。这里定义设备文件名前缀为“OED” (Optical Encoder),其中设备初始化函数OED_Init()在Windows CE装载驱动程序时用于创建中断事件和中断服务线程。在函数OED_Read()中将光电编码器的状态(OED_Status)返回。

  3.4 封装驱动程序并加入到WinCE中

  根据上述方法编译出动态链接库(DLL)还不够,因为它的接口函数还没有导出,还需要告诉链接程序输出什么样的函数,因此必须建立一个后缀名为def的文件。在本设计中为OpticalEncoder.def。下面是此文件的内容:

LIBRARY OpticalEncoder
  EXPORTS
  OED_Close
  OED_Deinit
  OED_Init
  OED_IOControl
  OED_Open
  OED_PowerDown
  OED_PowerUp
  OED_Read
  OED_Seek
  OED_Write

一个具体的流接口驱动程序和注册表是密不可分的。向WinCE内核添加注册表项的方法有两种:一种是直接修改Platform Builder下的reg文件;另一种是自己编写一个注册表文件,通过添加组件的方法将动态链接库文件添加到内核中。这里用第2种方法,将 OpticalEncoder.dll添加到内核中。编写的注册表文件内容如下:

[HKEY_LOCAL_MACHINE\Drivers\Built In\STRINGS]
  Index=dword :1
  Prefix=OED
  Dll=OpticalEncoder.dll
  Order=dword :0

  最后编写一个CEC文件,完成对定制内核注册表部分的修改并将OpticalEncoder.dll添加到系统内核中去,然后在Platform Builder中就可以直接添加已经编写好的驱动程序了。

  结语

  本文主要介绍了光电旋转编码器的原理及应用方法,并详细介绍了WinCE驱动程序的结构,成功地开发出了光电编码器在嵌入式操作系统WinCE下的驱动程序。实验证明,该方法正确可行,程序运行稳定可靠。


1.部分资源来自网络,经ET电子归类整理,旨在服务电子爱好者并无商业目的,不保证正确性与完整性.
2.如果您觉得本站资源对您有用,请告知您的好友,用搜索引擎搜"ET电子"即可.


最新评论共有 0 位网友发表了评论
发表评论
评论内容:不能超过250字,需审核,请自觉遵守互联网相关政策法规。
用户名: 密码:
匿名?
注册
教程下载