993397216基于Windows CE的SPI驱动程序设计_第1页
993397216基于Windows CE的SPI驱动程序设计_第2页
993397216基于Windows CE的SPI驱动程序设计_第3页
993397216基于Windows CE的SPI驱动程序设计_第4页
993397216基于Windows CE的SPI驱动程序设计_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、基于windows ce的spi驱动程序设计 引 言 windows ce为支持多线程、多任务、抢占式的嵌入式操作系统。随着windows ce 60的发布,其内核性能的明显提升和源代码开放,将促使其在消费电子、工业控制、移动通信等领域得到广泛的应用。 通常platform builder中给出了支持多种cpu常用设备驱动程序,如lcd驱动、鼠标驱动、usb驱动、串口驱动等;但有时由于平台采用了其他特定的硬件设备,其驱动程序在platform builder并没有给出,这时就需要用户针对实际的硬件自行开发,以满足个性化的需求。本文所涉及的spi接口驱动就属于此类。 1 spi总线及s3c244

2、0芯片介绍 串行外围设备接口spi(serial peripheral interface)总线是freescale公司推出的一种三线同步接口。接口采用同步串行34线方式进行通信,即1条时钟线sck、1条数据输入线mosi、1条数据输出线miso,另外还有1条从选线nss(可选),用于cpu与各种外围器件进行全双工、同步串行通信。spi接口在众多的移动存储和高速通信芯片上得到广泛应用。 根据时钟极性和时钟相位的不同,mosi和miso上的数据支持4种数据传输格式。spi的主要特点为:可以同时发出和接收串行数据,可以当作主机或从机工作,提供频率可编程时钟,发送结束中断标志,写冲突保护和总线竞争保

3、护等。 s3c2440是一款基于arm920t的1632位risc微处理器,主频可达400 mhz。该芯片性价比高,功耗低,含有丰富的片内外设,主要用于手持设备和移动终端。s3c2440中与spi相关的寄存器有: 2 windows ce的驱动程序 21 windows ce下驱动程序的基本概念和分类 驱动程序是一个抽象物理设备或者虚拟设备的功能软件,驱动程序管理这些设备的操作并将设备的功能导出给操作系统和应用程序。根据驱动程序导出接口的不同,windows ce中驱动可以分为本机设备驱动程序(native device driver)和流式驱动程序(streams device driver

4、)。本机设备驱动适于集成到基于windows ce平台的设备。这些设备驱动程序是一些硬件所必需的,是由原始设备制造商创建的,用来驱动如键盘、led、触摸屏等。本机驱动在编译时被静态链接到gwes,系统运行时由gwes加载。流式驱动程序也称可安装驱动程序,是由设备管理器(deviceexe)动态加载用户模式的dll。对流式驱动程序来说,不管需要控制的设备是什么类型,所有流式驱动都使用相同的接口并导出一组相同的函数-流接口函数。流式驱动适用任何在逻辑上可以被认为是一个数据源或者数据存储的io设备。 22流式驱动程序工作原理 在window ces中,流式驱动程序负责将设备抽象成一个文件,应用程序便

5、能够使用系统提供的api(readfile、writefile、iocontrol等)对其进行读写。应用程序使用文件api访问设备时,请求经过文件系统(filesysexe)过滤被送到deviceexe;deviceexe根据请求调相关的流式驱动程序接口,从而完成与硬件的交互。 23 设备驱动的中断处理 在windows ce系统中,当中断发生时,oem抽象层(oem abstraction layer,oal)把物理中断信号映射成oem定义的逻辑中断供操作系统和驱动程序调用。为了满足实时性要求,系统将中断处理过程分为2个阶段,即处于内核模式的中断服务例程(interrupt service

6、routine,isr)和处于用户模式的中断服务线程(interrupt service thread,ist)。isr主要负责将物理中断映射为逻辑中断,然后由操作系统根据逻辑中断激发所关联时间对象的内核,使等待该事件内核对象的线程ist开始执行中断处理程序。 具体中断处理过程如图1所示。中断发生后,信号发往异常处理器,并且中断支持处理器调用oal函数oeminterruptdisable关闭来自该硬件的中断。isr被内核调用并返回结果,且通过内核设置event事件来触发ist。ist被唤醒后调用各种io函数完成中断处理并返回interruptdone通知内核。内核调用oeminterrupt

7、done通知硬件重新开启中断。 3 spi总线驱动设计 综上所述,spi总线驱动分为2部分,即处于内核模式oal层将物理中断映射成逻辑中断的isr,以及处于用户模式流式驱动。其中包括执行中断处理线程ist。 31 初始化中断以及isr实现 spi通信是通过读写spi寄存器来完成的,通过读写上述6个spi寄存器中的状态字可以检测和控制spi总线的行为。在oal层中需要完成的工作如下: 在中断头文件oalintrh中添加spi的中断宏定义,供isr返回调用。 #(define sysintr_spio (sysintr_firmware+22) 注意:定义时要使中断号满足该文件中mapirq2sy

8、sintr中所要求的范围.wince4.2版本支持最大中断数为32,wince5.0版支持最大中断数为64。 在oal实现文件cfw.c中,添加中断初始化和禁止中断实现代码。 在中断处理实现文件armint.c的oeminterrupthandler函数中添加isr程序代码,返回逻辑中断号。代码如下: 3.2 流式驱动的实现 驱动被加载后需要完成设备的初始化工作,包括地址空间申请和映射、全局变量的初始化、ist的加载等。初始化的代码简化如下: 需要说明的是,在本程序中使用了ceddk中mmmapiospace库函数,故另需在头文件中添加#include和#pragma comment(lib,

9、ceddklib)。至此,g_spireg在其他的驱动实现函数中就可以调用,直接读写其指向的寄存器的代码即可完成相关的操作。还需要实现的函数有:spi_deinit、spi_read、spi_write、spi_seek、spi_open、spi_close、spi_iocntrol。限于篇幅,本文仅给出驱动初始化的代码。 (编者注:源代码见本刊网站wwwmesnetcomcn。) 33 驱动与应用程序的通信设计 在windows ce中,用户模式下每个进程与其他进程所占有的内存空间被虚拟内存机制隔离,进程间无法实现直接互访。在驱动程序和应用程序通信过程中,驱动程序位于deviceexe的进程空间中,由于上述原因,驱动程序向应用程序发起的单向通信存在困难。通常的解决方法是在内核空间中共享同步对象,建立消息队列或者通过指针映射来完成。上述方法都无法回避进程间的数据复制过程,因而只适用于少量的数据传输。对于大量的数据或者实时性要求较高的情况,可以在虚拟地址为ox4200 00000x7fff ffff的空间中建立命名的内存映射来实现内存共享,从而能够避免数据在进程空间中的复制。相关的api为createfilemapping和mapview()ffile。 34 驱动程序的封装和安装 驱动接口函数编写完后将其接口以dll的形式导出,再编写一个简单的注册

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论