李 靜 ,李 琪,張修太,張 可
(1.安陽工學院電子信息與電氣工程學院,河南 安陽455000;2.電子科技大學電子科學技術研究院,成都611731)
傳統的心音監控系統一般是運行在PC 機上的分析儀器,隨著人們對于嵌入式系統工作穩定性好、環境適應能力強和設備獨立性好這些優點的認識,人們迫切希望能夠將心音監控功能在嵌入式系統下實現簡單、易用和便攜式設計。
HKY-06B 是一種由新型高分子聚合材料制成的微音傳感元件,適合于各類心臟搏動和其他體表動脈搏動信號的采集[1]。本文給出了基于ARM9硬件平臺、WinCE5.0 軟件平臺、LCD 液晶顯示技術和HKY-06B 心音傳感器相結合的便攜式心音監護系統的設計方案,特別提出了針對HKY-06B 心音傳感器在此類嵌入式系統下的高效驅動模型,為開發適用于個人、中小醫院和社區醫療單位的便攜式心音監護系統提供了良好的幫助和支持。
便攜式心音監控系統采用三星公司ARM9 的S3C2440A 芯片作為CPU,主頻設置為400 MHz,以WinCE5.0 操作系統為軟件平臺,其結構如圖1所示。
由圖1 可見CPU 外設模塊有電源模塊、復位和時鐘模塊、帶觸摸屏的 LCD、小鍵盤模塊、NANDFlash 和SDRAM 構成的存儲模塊等,心音監控功能則主要由LCD,聲光報警電路,HKY-06B、體溫測量電路,A/D 轉換電路,串口通信電路,音頻接口,數據庫管理和USB 接口電路等實現。

圖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 接口
本文驅動采用流接口驅動。接口驅動程序是為連接到Windows CE 上的外圍設備而設計,由設備管理器動態加載的,如一些ADC 設備。此類驅動以DLL 形式出現在系統中,它把設備作為一個特殊的文件,通過文件處理函數來對設備進行操作[1]。
圖2 為A/D 和I/O 接口流接口驅動和其他模塊之間的一種關系。由圖1 可以知,用戶應用程序通過文件API 向文件系統提交操作A/D 和I/O 接口的命令,流接口驅動將命令在內部解釋這些調用和命令完成對A/D 和I/O 接口的操作。

圖2 流接口驅動和其他模塊之間的關系
在嵌入式設備中,需要直接對內存進行讀寫,以此來提高處理速度,在訪問之前,必須把物理內存映射到地址中[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);/* 將物理內存映射到虛擬地址* /。
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 應用層讀取數據流程圖
當驅動中所有函數都編寫完成,根據表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:”。
將編譯好的驅動程序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 整機運行的實物圖
本文給出了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.