基于WinCE的SPI接口驱动程序设计
禁止中断实现代码。
③在中断处理实现文件armint.c的OEMInterruptHandler函数中添加ISR程序代码,返回逻辑中断号。代码如下:
3.2 流式驱动的实现
驱动被加载后需要完成设备的初始化工作,包括地址空间申请和映射、全局变量的初始化、IST的加载等。初始化的代码简化如下:
需要说明的是,在本程序中使用了CEDDK中MmMapIoSpace库函数,故另需在头文件中添加#include和#pragma comment(lib,"ceddk.lib")。至此,g_SPIReg在其他的驱动实现函数中就可以调用,直接读写其指向的寄存器的代码即可完成相关的操作。还需要实现的函数有:SPI_Deinit、SPI_Read、SPI_write、SPI_Seek、SPI_Open、SPI_Close、SPI_IOCntrol。限于篇幅,本文仅给出驱动初始化的代码。
3.3 驱动与应用程序的通信设计
在Windows CE中,用户模式下每个进程与其他进程所占有的内存空间被虚拟内存机制隔离,进程间无法实现直接互访。在驱动程序和应用程序通信过程中,驱动程序位于device.exe的进程空间中,由于上述原因,驱动程序向应用程序发起的单向通信存在困难。通常的解决方法是在内核空间中共享同步对象,建立消息队列或者通过指针映射来完成。上述方法都无法回避进程间的数据复制过程,因而只适用于少量的数据传输。对于大量的数据或者实时性要求较高的情况,可以在虚拟地址为Ox4200 0000~0x7fff ffff的空间中建立命名的内存映射来实现内存共享,从而能够避免数据在进程空间中的复制。相关的API为CreateFileMapping和MapView()fFile。
3.4 驱动程序的封装和安装
驱动接口函数编写完后将其接口以dll的形式导出,再编写一个简单的注册表文件,指明驱动安装的路径、前缀以及索引。至此驱动程序设计工作就完成了,将驱动及注册表添加到当前的平台中即可。
结 语
本文详细介绍了Platform Builder下SPI接口驱动程序设计以及驱动程序同应用程序交互的实现。驱动例程已经成功地应用于基于nRF2401的嵌入式系统无线通信当中,具有很高的参考价值。
- 小尺寸单片机在便携式设备中的应用(11-19)
- 基于SPI总线的电能计量芯片ATT7022及其在配电监测终端的应用(01-18)
- SPI协议简介(01-18)
- DSP与单片机通信的多种方案设计(03-08)
- 嵌入式家庭网关中SPI接口的软件模拟(05-10)
- 基于SPI的USB控制器接口设计(11-18)