基于WinCE 的便携式心音监护系统设计*
2013-12-22张修太
李 静 ,李 琪,张修太,张 可
(1.安阳工学院电子信息与电气工程学院,河南 安阳455000;2.电子科技大学电子科学技术研究院,成都611731)
传统的心音监控系统一般是运行在PC 机上的分析仪器,随着人们对于嵌入式系统工作稳定性好、环境适应能力强和设备独立性好这些优点的认识,人们迫切希望能够将心音监控功能在嵌入式系统下实现简单、易用和便携式设计。
HKY-06B 是一种由新型高分子聚合材料制成的微音传感元件,适合于各类心脏搏动和其他体表动脉搏动信号的采集[1]。本文给出了基于ARM9硬件平台、WinCE5.0 软件平台、LCD 液晶显示技术和HKY-06B 心音传感器相结合的便携式心音监护系统的设计方案,特别提出了针对HKY-06B 心音传感器在此类嵌入式系统下的高效驱动模型,为开发适用于个人、中小医院和社区医疗单位的便携式心音监护系统提供了良好的帮助和支持。
1 便携式心音监护系统设计方案[2-3]
便携式心音监控系统采用三星公司ARM9 的S3C2440A 芯片作为CPU,主频设置为400 MHz,以WinCE5.0 操作系统为软件平台,其结构如图1所示。
由图1 可见CPU 外设模块有电源模块、复位和时钟模块、带触摸屏的 LCD、小键盘模块、NANDFlash 和SDRAM 构成的存储模块等,心音监控功能则主要由LCD,声光报警电路,HKY-06B、体温测量电路,A/D 转换电路,串口通信电路,音频接口,数据库管理和USB 接口电路等实现。
图1 嵌入式心音监护系统结构组成
2 驱动模型设计
2.1 设备驱动的类型
Windows CE 是一款32 bit 的多线程嵌入式操作系统,因其灵活、方便的特性,易于集成到嵌入式系统中,但是由于嵌入式系统硬件环境的多样性以及WinCE 对一些外设驱动开发只提供了一些底层支持的原因,芯片驱动必需由设计人员自己开发。
Windows CE 设备驱动程序根据结构类型可以分为单体结构和分层结构。单体结构的设备驱动程序基于单个码片,该码片直接访问设备,把跟硬件设备相关的函数,也就是DDI 函数直接提供给操作系统。分层结构的设备驱动程序在结构上分为MMD层和PDD 层,MMD 层是提供给操作系统调用的,MMD 层通过DDSI 函数来调用PDD 层,而PDD 层是跟硬件设备相关的[4-5]。
驱动程序根据驱动加载方式可分为本机设备驱动程序、流接口驱动程序和混合型驱动程序。本机设备驱动程序专门用于Windows CE 操作系统,是平台建立时必须提供的设备驱动程序。与之相比,流接口驱动程序是一般类型的设备驱动程序,是由设备管理程序加载、管理和卸载的,使用同一个接口并调用同一个函数集流接口函数[6]。对于每个流式口驱动程序来说,其所要求的入口点用来实现标准文件I/O 函数和电源管理函数,这些函数由Windows CE 操作系统的内核使用,完整流式接口驱动程序导出函数的功能如表1[6]。
表1 函数中的XXX 3 个字母根据实际设计用设备文件名前缀代替。比如文中所涉及的HKY-06B的ADC 驱动程序的设备名前缀设计为HYA,即相应的接口就变成了HYA_Close 等。XXX 可以是任意的3 个字母,如果用户的驱动程序和Windows CE 上已经存在的驱动程序是一类的,就应该使用相同的前缀,但可以使用不同的索引值来区分。
表1 流接口驱动程序要实现的DLL 接口
2.2 流接口驱动模型
本文驱动采用流接口驱动。接口驱动程序是为连接到Windows CE 上的外围设备而设计,由设备管理器动态加载的,如一些ADC 设备。此类驱动以DLL 形式出现在系统中,它把设备作为一个特殊的文件,通过文件处理函数来对设备进行操作[1]。
图2 为A/D 和I/O 接口流接口驱动和其他模块之间的一种关系。由图1 可以知,用户应用程序通过文件API 向文件系统提交操作A/D 和I/O 接口的命令,流接口驱动将命令在内部解释这些调用和命令完成对A/D 和I/O 接口的操作。
图2 流接口驱动和其他模块之间的关系
2.3 流式接口驱动设计
在嵌入式设备中,需要直接对内存进行读写,以此来提高处理速度,在访问之前,必须把物理内存映射到地址中[3]。因此在HYA_Init 函数中通过VirtualAlloc 函数让Wince 分配连续的虚拟地址,再通过VirtualCopy 函数将一段物理内存映射到虚拟地址,以下是实现代码:
pHYAreg=(HYAreg* )VirtualAlloc(0,sizeof(HYAreg),MEM_RESERV,PAGE_NOACCESS);/* 让wince 分配连续的虚拟地址* /。
VirtualCopy ((PVOID)pHYAreg,(PVOID)(HYA _BASE),sizeof(HYAreg),PAGE_READWRITE | PAGE_NOCACHE);/* 将物理内存映射到虚拟地址* /。
3 高效HKY-06B 设备驱动设计
3.1 高效驱动模型设计
HKY-06B 心音传感器输出信号形式为低阻抗音频信号,接口为音频接口,需要外部供电,供电电压范围3 V ~6 V,输出电压范围为基准电压的上下0.5V,AD 采样电压范围为0 ~3.3 V,为了使输出信号能够更好的被采样,基准电压设为1.7 V,测试平台为基于HKY-06B 的心音信号采集模块和前面设计的嵌入式心音监护系统平台。
其中命令的参数有通道的选择、通道的数据采样频率的设置、通道当前数据采样频率获取和频率极值。根据上节描述,驱动程序主要实现HYA_Open,HYA_Read,HYA_IOControl 几个函数[7-8]。函数参数设置如图3 所示。
图3 驱动函数参数设置示意图
完成参数的设置,启动采集函数,用户层应用程序就可以通过HYA_Read 函数来读取心音传感器采集的数据,
DWORD HYA_Read(DWORD Handle,LPVOID pBuffer,DWORD dwNumBytes)
{
……
v_pHYAregs->ADCCON|=ADCCON_EN_READSTART;
v_pHYAregs->ADCDAT0; /* 读启动转换* /
* pReadBuffer=v_pHYAregs->ADCDAT0 & 0x3ff;
读取数据流程图如图4 所示。
图4 应用层读取数据流程图
3.2 驱动生成
当驱动中所有函数都编写完成,根据表1 所示的流式接口驱动程序导出函数为其建立一个接口文件,告诉链接程序需要什么样的函数,建立一个自己的def 文件[9]。
最后在Wince 的注册表项中添加如下代码:
[HKEY_LOCAL_MACHINEDriversBuiltInHYA]
"Prefix"="HYA"
"Dll"="HYA.DLL"
"Order"=dword:0
"Index"=dword:1
Prefix 的值代表设备的前缀名,用于标识与特定名称设备相关联的文件流访问接口,必须由3 个大写字母组成。在这里它的值为HYA,那么设备的打开、关闭程序就为HYA_Open 和HYA_Close。
“Dll”的值代表该设备驱动程序所在的动态库的名称,这里系统将在“HYA. DLL”中查找对HYA设备的操作例程。
“Order”的值为该设备在引导期间的加载次序,为可选项。
“Index”的值为索引值,用于区分流接口管理的设备。同一个流接口可能会有超过一个的设备,这时就需要索引值来加以区分。索引值跟在前缀后面,其值可以从1 到9,第10 个设备则用0 代表。这里,当调用CreateFile 函数打开此设备时,需要的文件名为“HYA1:”。
3.3 驱动加载
将编译好的驱动程序DLL 文件拷贝到Windows目录下。第1 次插入设备,因为注册表中没有设备信息,则弹出对话框要求输入设备名,系统根据名称在Windows 目录下找到该驱动,然后调用HYAInstallDrive安装驱动,并根据VID/PID 设置注册表项,下次设备插入时可以根据此注册表项找到该驱动;驱动安装成功之后,调用HYADeviceAttach 函数完初始化一些基本信息,比如激活一个流接口、注册一个回调函数和保存设备上下文等;完成这一系列工作后已经将驱动程序加载到DeviceManager 的进程空间,这时DeviceManager将发送一个新设备插入的消息,调用该流接口驱动的HYA_Init 函数;HYA_Init 函数获取到前面注册的设备上下文信息,这样应用程序就可以调用HYA_open 创建设备,调用HYA_IOControl 设置AD 采样的一些参数并开辟一个新的线程调用HYA_Read 函数来读取采集的数据并作相应的处理,当数据读取处理结束,调用HYA_Close 完成驱动的关闭,其操作流程图如图5所示。
图5 驱动加载流程图
整个硬件系统组成及加载驱动程序采集心音信号后,结果如图6 所示。
图6 整机运行的实物图
4 结论
本文给出了HKY-06B 型心音传感器在ARM9平台下的便携式心音监护系统设计方案,并重点研究了WnCE 下的HKY-06B 设备的高效驱动设计,方案硬件结构可靠,驱动模型设计思路清晰、层次分明,提高了设备的运行效率和稳定性,经实验验证,系统运行准确、稳定,可以满足便携式心音监控的要求,具有很好的推广价值。
[1] 郭军涛,林森财,侯开江,等. 基于HKY-06A 心音传感器的心音信号提取[J].中国医疗设备,2008(3):15-19.
[2] 陈浩,周连全,余结全,等.一种便携式心脏远程监护终端的设计开发及应用[J].生物医学工程学杂志,2010(3):15-19.
[3] 刘圹彬,黄华,王志巧,等. 基于MSP430F247 嵌入式单片机无线心电监护系统的网络传输[J].中国组织工程研究与临床康复,2009,13(35):6891-6894.
[4] 张东泉.Windows CE 实用开发技术[M]. 北京:电子工业出版社,2006.
[5] 微软公司(美).Microsoft Windows CE Device Driver Kit.设备驱动程序开发指南[M].希望图书创作室,译.北京:北京希望电子出版社,1999.
[6] 张超,张哲,胡晨.WinCE 系统上大容量NAND Flash 驱动设计与优化[J].电子器件,2007,30(2):638-642.
[7] 姜波. WindowsCE. Net 程序设计[M]. 北京:机械工业出版社,2007.
[8] 邱小平. Windows CE 6 开发经典[M]. 北京:电子工业出版社,2009.
[9] 微软公司(美).Microsoft Windows CE Device Driver Kit.设备驱动程序开发指南[M].希望图书创作室,译.北京:北京希望电子出版社,1999.