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

基于Windows CE的SPI驱动程序设计 2

基于Windows CE的SPI驱动程序设计 2

2.2流式驱动程序工作原理

      在Window CES中,流式驱动程序负责将设备抽象成一个文件,应用程序便能够使用系统提供的API(ReadFile、writeFile、IOControl等)对其进行读写。应用程序使用文件API访问设备时,请求经过文件系统(Filesys.exe)过滤被送到device.exe;device.exe根据请求调相关的流式驱动程序接口,从而完成与硬件的交互。
       2.3 设备驱动的中断处理

        在windows CE系统中,当中断发生时,OEM抽象层(OEM Abstraction Layer,OAL)把物理中断信号映射成OEM定义的逻辑中断供操作系统和驱动程序调用。为了满足实时性要求,系统将中断处理过程分为2个阶段,即处于内核模式的中断服务例程(Interrupt Service Routine,ISR)和处于用户模式的中断服务线程(Interrupt Service Thread,IST)。ISR主要负责将物理中断映射为逻辑中断,然后由操作系统根据逻辑中断激发所关联时间对象的内核,使等待该事件内核对象的线程IST开始执行中断处理程序。

       具体中断处理过程如图1所示。中断发生后,信号发往异常处理器,并且中断支持处理器调用OAL函数OEMInterruptDisable关闭来自该硬件的中断。ISR被内核调用并返回结果,且通过内核设置Event事件来触发IST。IST被唤醒后调用各种I/O函数完成中断处理并返回InterruptDone通知内核。内核调用OEMInterruptDone通知硬件重新开启中断。

       3 SPI总线驱动设计

       综上所述,SPI总线驱动分为2部分,即处于内核模式OAL层将物理中断映射成逻辑中断的ISR,以及处于用户模式流式驱动。其中包括执行中断处理线程IST。
        3.1 初始化中断以及ISR实现

       SPI通信是通过读写SPI寄存器来完成的,通过读写上述6个SPI寄存器中的状态字可以检测和控制SPI总线的行为。在OAL层中需要完成的工作如下:

       ①在中断头文件oalintr.h中添加SPI的中断宏定义,供ISR返回调用。

      #(define SYSINTR_SPIO (SYSINTR_FIRMWARE+22)
       注意:定义时要使中断号满足该文件中MapIrq2SysIntr中所要求的范围。
返回列表