浅谈Windows C E的中断处理及中断流驱动的应用
处理程序。当同级中断同时到时,则按位响应。
③异常处理器调用ISR来响应中断。
④内核接收ISR返回值,依据该返回值决定如何处理中断。
⑤内核触发中断支持管理器来唤醒中断服务线程(IST)并激活该线程。
⑥当中断服务线程(IST)被唤醒后,它开始处理相应的中断。
⑦如果需要,中断服务线程调用各种I/0例程访问硬件来完成工作。
⑧中断处理结束后调用InterruptDone函数通知内核。
⑨内核调用OEMInterruptDone完成整个中断处理过程,0AL通知底层硬件使能所有中断。
2 中断流驱动程序设计
2.1 驱动的概念
驱动程序是一个软件模块,其功能就是对设备、协议甚至某些服务进行管理。驱动程序是直接和设备进行通信的部分,设备可以是物理设备或逻辑设备。
流接口的驱动是基本的设备驱动类型,它实现一组固定的流接口函数。所有流接口驱动程序使用相同的接口并调用同一个函数集--流接口函数,大部分WindowsCE设备驱动都可用此模型来实现。流接口驱动程序由设备管理程序(Device.exe)自动加载、管理和卸载,也可以通过API函数手动加载、管理和卸载。
2.2 设计方法
Windows CE提供了几种基于等待队列的进程间通信手段,其中事件在驱动设计中经常被用来引发某一个中断处理。中断是Windows CE驱动设计的关键之一,驱动程序需要实现特定设备的中断响应、中断引发的数据传送和处理。可以把外设中断时所需处理的任务封装到流接口函数中,应用程序使用Windows CE操作系统的文件API函数与流接口进行通信,从而达到应用程序访问驱动程序和操作硬件的目的。
本文以KEYl按键连接到S3C2440外部中断EINTl(GPFl)引脚的按键电路为例,给出中断流接口驱动程序的一般设计方法,电路原理图如图3所示。
流接口驱动程序的入口点函数、调用方式以及每个函数实现的功能如表1所列Ⅲ。其中电源管理函数,即EIT-PowerDown和EIT_PowerUp是可选的,这里没有调用。
2.3 编写代码
在三星公司BSP包驱动程序的存放位置下新建一个目录EINT,用文本编辑器建立5个文本文件,文件名分别为EINTl.c、EINTl.h、EINTl.def、sources、makefile.
从表1可以看出,驱动程序大部分功能都是在EIT_Init()函数中完成的,在EINTl.c文件中编写EIT_Init()函数,如下所示。
EIT_Init()函数中创建了外部中断EINTl中断服务线程gEINTIntrThread具体代码如下所示。该函数首先创建外部中断事件gWaitEvent(用于ISR通知IST外部中断EINTl中断触发),然后调用内核函数InterruptInitialize()与gWaitEvent关联起来,并使能该中断。
其他几个流接口函数编程简单,这里不作详细叙述。参考驱动目录下其他驱动完成sources、makefile和EINT.def文件的编写,当EINT目录下的5个文件都编写好后,在Platform Build 5.O编译后,用Windows CE附带的dumpbin工具(在Build菜单下)输入命令:dlampbin/exports EINTl.dll,输出结果如图4所示,导出了表1所列的流接口函数。
结 语
Windows CE采用中断方式处理外部设备的随机输入,提高了CPU的运行效率。本文用一个实例对中断流驱动程序的开发进行了介绍,只需在此驱动程序的基础上稍作修改就可完成其他中断的驱动程序开发。驱动程序编译成功后,通过进一步修改BSP的FILES目录下的platform.bib和platform.reg文件,可将驱动加入到操作系统中。
- LPC2292的伪中断与伪中断处理(03-25)
- Linux 2.4.x内核软中断机制(04-06)
- 嵌入式系统开发之中断控制的实现(04-18)
- uC/OS-II的任务切换机理及中断调度优化(05-11)
- μC/OSII的时钟中断技术研究(06-30)
- 微内核RTOS的核外中断管理(07-27)