基于A(yíng)RM嵌入式多參數監護儀設計與實(shí)現
多參數監護儀廣泛應用于ICU、CCU、病房、手術(shù)室等。目前我國也有自主知識產(chǎn)權的產(chǎn)品,如邁瑞、金科威、金腦人等,但與GE、飛利浦世界先進(jìn)產(chǎn)品比較,在監測和計算、可靠性、實(shí)時(shí)性、穩定性、信號變異的處理分析、遠程傳輸等方面都較落后[1]。嵌入式系統把計算機直接嵌入到應用系統之中,它融合了通信技術(shù)和半導體微電子技術(shù),是信息技術(shù)IT的最終產(chǎn)品[2]。因此將嵌入式系統,網(wǎng)絡(luò )等技術(shù)應用于醫用監護儀領(lǐng)域,能使多參數監護儀順應現代醫用監護儀市場(chǎng)縮小體積,提高數據處理能力,遠程醫療等方面的要求。
本文引用地址:http://dyxdggzs.com/article/201610/311524.htm本文介紹一種基于ARM的實(shí)時(shí)監護系統,它將32位RISC結構的ARM內核處理器與實(shí)時(shí)多任務(wù)嵌入式系統相結合,并通過(guò)嵌入式TCP/IP協(xié)議棧為平臺添加網(wǎng)絡(luò )傳輸功能,構建一個(gè)新型的多參數監護儀系統。
2 系統硬件設計
醫用監護儀具有以下幾個(gè)方面功能:測量功能、分析功能、報警功能、打印功能、網(wǎng)絡(luò )通信功能等。六參數模塊通過(guò)導聯(lián)端、光手指、袖帶獲得人體的心電、無(wú)創(chuàng )血壓、血氧、脈率、呼吸、體溫六參數信號,通過(guò)串口通信方式與以ARM7為內核的嵌入式處理器相連,數據從串口送到ARM7中 央處理器,通過(guò)多任務(wù)調度,進(jìn)行實(shí)時(shí)數據處理,并在LCD上實(shí)時(shí)顯示各種信號的圖形和數值,還可以由外部鍵盤(pán)控制,進(jìn)行存儲和網(wǎng)絡(luò )發(fā)送,并對各種檢測信號設置報警線(xiàn),對超出報警范圍的檢測情況進(jìn)行報警。硬件結構圖1所示。
多參數監護儀硬件結構
圖1 多參數監護儀硬件結構圖
3 開(kāi)發(fā)系統軟件設計
3.1 軟件開(kāi)發(fā)總體介紹
利用PC機運行的Hitool forARM開(kāi)發(fā)環(huán)境下調試程序:首先運行系統、Memory及I/O端口的初始化程序,隨后進(jìn)入主程序,采用外部中斷方式,判斷是否有鍵輸入,若有則調用鍵盤(pán)控制子程序進(jìn)行識別所按下的鍵,根據鍵盤(pán)的控制執行相應的任務(wù);若無(wú)就調用串口讀入程序,采集心電、血氧、血壓等數據,并判別所采集數據的類(lèi)型,存入不同地址的SDRAM中,并依次分類(lèi)進(jìn)行處理,處理完畢,判斷是否超越各自的報警限,若是則調用報警程序和顯示程序,若否則直接調用顯示程序;這樣,各種數據就實(shí)時(shí)地采集進(jìn)來(lái),并在LCD上顯示測試數值和心電、呼吸波形。其中測試數值按每分鐘存儲,心電、呼吸波形按鍵存儲,按翻頁(yè)鍵可以調出相應的存儲波形并進(jìn)行顯示;根據打印和網(wǎng)絡(luò )命令進(jìn)行打印和網(wǎng)絡(luò )命令處理等。程序主要用C語(yǔ)言編寫(xiě)。
3.2 串口的處理
硬件接口采用標準RS-232C異步串行接口,選用發(fā)送 (TXD)、接收(RXD)和地線(xiàn)的三線(xiàn)方式,其它的握手信號直接懸空。要實(shí)現六參數模塊與S3C44BO之間的串口通信,必須使兩者采用相同的數據傳輸方式,它們通信的數據格式如下;波特率為9600bps, 8位數據位, 1位停止位,無(wú)奇偶校驗位。
另外,在I/O端口初始化程序中,定義Uart_Init函數,對串行口各寄存器進(jìn)行初始化,配置參數時(shí)鐘和波特率等。在設計中主要進(jìn)行以下串行口寄存器設置:
UART線(xiàn)性控制寄存器ULCON1=0x3;
UART控制寄存器UCON1=0x245;
UART先進(jìn)先出控制寄存器UFCON1=0x1;
UART波特率寄存器UBRDTV,根據公式計算出。
在串口讀入程序中,采用了中斷方式,來(lái)實(shí)現雙向數據傳輸,達到實(shí)時(shí)控制的目的。串口程序數據接收過(guò)程為:調用Uart_Getch()函數讀入N個(gè)字符,以數組的方式放置在SDRAM中,然后進(jìn)行數據處理。在lib.C程序中部分源代碼如下:
charUart_Getch()
{…
while(! (rUTRSTAT1& 0x1)); //Receive data ready
return rURXH1;
…}
3. 3 LCD顯示
當有新數據需要顯示時(shí), LCD顯示模塊將新的采樣數據寫(xiě)入LCD顯示存儲器中, S3C44BO芯片所支持的LCD控制器在不需要CPU介入的情況下,通過(guò)專(zhuān)用DMA自動(dòng)地將需要顯示的數據從顯示存儲器傳送到LCD顯示器中。LCD顯示器不斷地接收數據,就在LCD上顯示監測內容。
3. 3. 1 LCD初始化
定義Lcd_MonoInit()函數,在LCD的三個(gè)控制寄存器中,設置LCD掃描寬度等與硬件時(shí)序有關(guān)的量:如:使用160×240的黑白單色顯示屏, 4-bit單掃描等。在LCD的三個(gè)緩沖初始地址寄存器中,主要配置了幀緩沖寄存器BUFFER的起始地址等。
以上各寄存器基本的配置的源程序如下:
void Lcd_MonoInit(void) //初始化LCD屏幕
{ //160×240 1bit/1pixelLCD
#defineMVAL_USED 0
rLCDCON1=(0) (1《《5) (MVAL_USED《《7) (0x3《《
8) (0x3《《10) (CLKVAL_MONO《《12);
//disable, 4B_SNGL_SCAN,WDLY=8clk,WLH=8clk
rLCDCON2=(LINEVAL) (HOZVAL《《10) (10《《21);
//LINEBLANK=10(without any calculation)
rLCDSADDR1= (0x0《《27) (((U32) frameBuffer1》》22)《《
21 ) M5D((U32)frameBuffer1》》1);
//monochrome,LCDBANK,LCDBASEU
rLCDSADDR2=M5D( (((U32)frameBuffer1+(SCR_XSIZE*LCD_
YSIZE/8))》》1)) (MVAL《《21) (1《《29)
;
rLCDSADDR3=(LCD_XSIZE/16) ((SCR_XSIZE-LCD_XSIZE) /
16)《《9);
}
3. 3. 2 打開(kāi)LCD
1)在內核中開(kāi)辟內存空間用于顯示內存
可在顯示模塊中加入:#define frameBuffer1 0xC400000
2)定義幀緩沖器長(cháng)度,并對其賦初值設置一個(gè)行列與LCD
高寬相對應的數組pbuffer, pbuffer用于存放發(fā)送至顯示屏的每幀像點(diǎn)數據,像點(diǎn)數據的多少取決于顯示屏的大小; pbuffer=“BitsPerPixe”*l Lines* /8=160* 240/8=4800(字節)。
由于pbuffer被定義為U32,即32位(八個(gè)四位)指針,每一個(gè)元素對應LCD顯示屏上的一個(gè)像素點(diǎn),顯示方式采用4-bit單掃描,所以應當循環(huán)4800(字節) /4=1200次,實(shí)際上對應的單元數為整個(gè)160×240的屏幕范圍。
for( i=“0”, i《1200; i++)
#(pBuffer[ i])=0x0;
3)數據處理
LCD的數據處理主要對要顯示的數據進(jìn)行處理(4bit到32bit的轉換)。
temp_data=(Buf[ i* 4+3]《《24)+(Buf[ i* 4+2]《《 16)+(Buf[*i 4+1]《《8)+(Buf[*i 4]);
3. 3. 3 清屏
清屏對顯存的每個(gè)單元置零,使屏幕顯示清除。以下為清屏的部分源程序:
Void clrscreen(void)
{ int ;i
unsigned int* pbuffer;
pbuffer=(U32* )frameBuffer1;
for( i=“0”; i《1200; i++)
{
pbuffer[ i]=0;
}
}
3. 3. 4 編制LCD顯示函數并向LCD設備寫(xiě)入數據
定義displayLcd()函數為L(cháng)CD顯示函數,用于往顯存中寫(xiě)數據,經(jīng)過(guò)pbuffer送至LCD顯示器,并讓它循環(huán)顯示在LCD顯示屏上。要在 LCD上顯示ASCII字符,首先把每個(gè)字符轉成一個(gè)16* 16bit的數組,組成字庫(本次實(shí)現中使用),然后,選擇要顯示的字符,從字庫中提取字符,經(jīng)函數調用后,將要顯示的字符送至LCD顯示器,這樣,就在 LCD上顯示出ASCII字符。
部分源程序如下:
void displayLCD(void) //LCD顯示函數
{
unsigned int* pbuffer, temp_data;
int ;i
pbuffer=(U32* )frameBuffer1;
for( i=“0”; i《1200; i++)
{
temp_data=(Buf[ i* 4+3]《《24)+(Buf[ i* 4+2]《《
16)+(Buf[*i 4+1]《《8)+(Buf[*i 4];
//進(jìn)行4bit到32bit的數據轉換處理
pbuffer[ i]=~temp_data;
Delay(10);
}
}
在添加所用的頭文件的同時(shí),增加對LCD_Init()函數、dis-playLCD()等函數的調用。
4 網(wǎng)絡(luò )命令處理
在硬件設計上采用以太網(wǎng)口,軟件上通過(guò)實(shí)現瘦TCP/IP網(wǎng)絡(luò )通 信協(xié)議,針對嵌入式系統特點(diǎn)對傳統的TCP/IP協(xié)議棧進(jìn)行裁減[4],讓嵌入式多參數監護儀支持輕量級TCP/IP協(xié)議棧而 直接連入 Internet。在設計將無(wú)實(shí)時(shí)要求和費時(shí)的TCP/IP協(xié)議簇的處理放在主程序順序循環(huán)中。網(wǎng)絡(luò )程序結構采取順序執行和硬件中斷相配合的方式,這種硬件中斷是外部時(shí)鐘中斷,中斷級別要比非向量模式的FIQ中斷級別低,在系統空閑時(shí)進(jìn)行網(wǎng)絡(luò )數據交互;對網(wǎng)絡(luò )接口控制芯片采用查詢(xún)方式,即在其他中斷任務(wù)的執行間隙處理瘦TCP/IP協(xié)議簇,以犧牲響應速度來(lái)?yè)Q取系統可靠性。
考慮到嵌入式醫用監護儀在窄寬帶不可靠環(huán)境下實(shí)現實(shí)時(shí)監測的要求,決定在網(wǎng)絡(luò )通信協(xié)議的傳輸層中,選用UDP(用戶(hù)數據報協(xié)議)。
5 結束語(yǔ)
介紹一種基于A(yíng)RM的嵌入式多參數監護儀的設計與實(shí)現,并應用于實(shí)際測量,為嵌入式系統在醫用監護中的應用提供了一個(gè)很有意義的新思路和切實(shí)可行的方案。由于該網(wǎng)絡(luò )監護儀主要面向醫院、社區和家庭,具有成本低、功耗小、數據存儲量大、數據處理速度快、便于遠程醫療、能同時(shí)實(shí)現實(shí)時(shí)多任務(wù)的操作等各項優(yōu)勢, 是現代醫療監護進(jìn)一步智能化、專(zhuān)業(yè)化、小型化、低功耗的發(fā)展新方向,困此具有很廣闊的市場(chǎng)前景。
評論