驱动程序的接口设计

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

驱动程序的接口设计

WinCE下的驱动皆以动态链接库的形式存在。驱动实现中可以调用所有的标准API。WinCE的两种驱动模型——本机驱动模型和流接口驱动模型——其中本机驱动模型用于低级、内置设备,实现一组特定的接口函数;而流接口驱动模型是基本的驱动类型,提供一组通用设备接口,适用于多种设备。本设计采用的ADC驱动为数据采集驱动,是整个数据采集系统的核心。首先介绍几个流接口驱动的接口函数:

(1)ADC_Init:

函数原型:DWORD ADC_Init(LPCTSTR Identifier)

功能描述:软件资源初始化,硬件地址空间映射,硬件初始化,中断注册。

参数描述:Identifier为字符串指针,指向本驱动在注册表标识符路径键值。

实现要点:本函数的关键部分在于对硬件地址空间的映射,通Virtualalloc,Viirtualcopy将I/O寄存器、中断寄存器、PWM寄存器和存储器地址空间映射到系统内存空中去;此外还要对硬件进行系统启动后的第一次初始化,包括中断硬件初始化和注册、fifo的清零和采集的禁止等。注意为保证系统的稳定和低功耗,在本函数运行后,数据采集器处于禁止中断和电源关闭状态。

具体使用:ADC_Init会把设备内容指针传递给ADC_Open。

(2)ADC_Deinit:

函数原型:BOOL ADC_Deinit(PADC_Info pContext)

功能描述:软件资源释放,硬件反初始化,中断屏蔽。

参数描述:pContext是驱动软件结构体指针。

实现要点:本函数为ADC_Init的逆向操作。

具体使用:释放了ADC_Init中分配的资源。

(3)ADC_Open:

函数原型:DWORD ADC_Open(DWORD pContext,DWORD AccessCode,DWORD ShareMode)

功能描述:打开设备,AD上电,禁止中断,禁止触发,清除FIFO,数据缓冲区初始化。

参数描述:pContext是驱动软件结构体指针;AccessCode为读写访问权限。

制模式码:ShareMode为共享访问权限控制模式码。

应用接口:CreateFile

实现要点:本函数主要功能是开启设备电源,并确保其初始化状态可靠,因此其中部分操作与系统初始化阶段类似。注意在本操作结束后,采集器仍处于禁

止采集状态,fifo清空,并且中断被屏蔽。

具体使用:打开A/D设备,为A/D转换做好准备,返回的设备内容指针将传递给ADC_Read、ADC_Write、ADC_IOControl。

(4)ADC_Close:

函数原型:BooL ADC_Close(DWORD pContext)

功能描述:禁止触发,禁止中断,清除FIFO,AD关闭,数据缓冲区初始化设备掉电。

参数描述:pContext是驱动软件结构体指针

应用接口:CloseHandle

实现要点:本函数为ADC_Open的逆向操作。

(5)ADC_Read:

函数原型:DWORD ADC_Read (DWORD hOpenContext,LPVOID pBuffer,DWORD Count)

功能描述:读取内部数据流缓冲,并传出至应用层。

参数描述:hOpenContext是驱动软件结构体指针;pBuffer为传出数据流指针;Count为传出数据流长度。

应用接口:ReadFile

实现要点:本函数用于复制驱动内部数据流缓冲,并将其传出至应用程序,注意此处数据流传送的有效性,由于从系统角度来看,驱动和应用程序同属于用户态的两个进程,彼此地址空间无法互相访问,所以本环节设计到进程间大数据量的通讯问题,此问题在嵌入式系统紧张的资源中尤其需要谨慎处理。

具体使用:A/D设备读操作函数,可以将读出的值存放在此函数的输出缓冲区中。

相关文档
最新文档