新聞中心

        EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 嵌入式多參數(shù)監(jiān)護(hù)儀設(shè)計(jì)

        嵌入式多參數(shù)監(jiān)護(hù)儀設(shè)計(jì)

        作者: 時(shí)間:2011-07-27 來(lái)源:網(wǎng)絡(luò) 收藏

        1 引 言

        本文引用地址:http://www.104case.com/article/150426.htm

          本文介紹一種基于ARM的實(shí)時(shí)監(jiān)護(hù)系統(tǒng),它將32位RISC結(jié)構(gòu)的ARM內(nèi)核處理器與實(shí)時(shí)多任務(wù)系統(tǒng)相結(jié)合,并通過(guò)TCP/IP協(xié)議棧為平臺(tái)添加網(wǎng)絡(luò)傳輸功能,構(gòu)建一個(gè)新型的多系統(tǒng)。將系統(tǒng),網(wǎng)絡(luò)等技術(shù)應(yīng)用于醫(yī)用領(lǐng)域,能使多順應(yīng)現(xiàn)代醫(yī)用監(jiān)護(hù)儀市場(chǎng)縮小體積,提高數(shù)據(jù)處理能力,遠(yuǎn)程醫(yī)療等方面的要求。

          2 系統(tǒng)硬件

          醫(yī)用監(jiān)護(hù)儀具有以下幾個(gè)方面功能:測(cè)量功能、分析功能、報(bào)警功能、打印功能、網(wǎng)絡(luò)通信功能等。六模塊通過(guò)導(dǎo)聯(lián)端、光手指、袖帶獲得人體的心電、無(wú)創(chuàng)血壓、血氧、脈率、呼吸、體溫六參數(shù)信號(hào),通過(guò)串口通信方式與以ARM7為內(nèi)核的嵌入式處理器相連,數(shù)據(jù)從串口送到ARM7中 央處理器,通過(guò)多任務(wù)調(diào)度,進(jìn)行實(shí)時(shí)數(shù)據(jù)處理,并在LCD上實(shí)時(shí)顯示各種信號(hào)的圖形和數(shù)值,還可以由外部鍵盤控制,進(jìn)行存儲(chǔ)和網(wǎng)絡(luò)發(fā)送,并對(duì)各種檢測(cè)信號(hào)設(shè)置報(bào)警線,對(duì)超出報(bào)警范圍的檢測(cè)情況進(jìn)行報(bào)警。硬件結(jié)構(gòu)圖1所示。

          圖1 多參數(shù)監(jiān)護(hù)儀硬件結(jié)構(gòu)圖

          3 開發(fā)系統(tǒng)軟件

          3.1 軟件開發(fā)總體介紹

          利用PC機(jī)運(yùn)行的Hitool forARM開發(fā)環(huán)境下調(diào)試程序:首先運(yùn)行系統(tǒng)、Memory及I/O端口的初始化程序,隨后進(jìn)入主程序,采用外部中斷方式,判斷是否有鍵輸入,若有則調(diào)用鍵盤控制子程序進(jìn)行識(shí)別所按下的鍵,根據(jù)鍵盤的控制執(zhí)行相應(yīng)的任務(wù);若無(wú)就調(diào)用串口讀入程序,采集心電、血氧、血壓等數(shù)據(jù),并判別所采集數(shù)據(jù)的類型,存入不同地址的SDRAM中,并依次分類進(jìn)行處理,處理完畢,判斷是否超越各自的報(bào)警限,若是則調(diào)用報(bào)警程序和顯示程序,若否則直接調(diào)用顯示程序;這樣,各種數(shù)據(jù)就實(shí)時(shí)地采集進(jìn)來(lái),并在LCD上顯示測(cè)試數(shù)值和心電、呼吸波形。其中測(cè)試數(shù)值按每分鐘存儲(chǔ),心電、呼吸波形按鍵存儲(chǔ),按翻頁(yè)鍵可以調(diào)出相應(yīng)的存儲(chǔ)波形并進(jìn)行顯示;根據(jù)打印和網(wǎng)絡(luò)命令進(jìn)行打印和網(wǎng)絡(luò)命令處理等。程序主要用C語(yǔ)言編寫。

          3.2 串口的處理

          硬件接口采用標(biāo)準(zhǔn)RS-232C異步串行接口,選用發(fā)送 (TXD)、接收(RXD)和地線的三線方式,其它的握手信號(hào)直接懸空。要實(shí)現(xiàn)六參數(shù)模塊與S3C44BO之間的串口通信,必須使兩者采用相同的數(shù)據(jù)傳輸方式,它們通信的數(shù)據(jù)格式如下;波特率為9600bps, 8位數(shù)據(jù)位, 1位停止位,無(wú)奇偶校驗(yàn)位。

          另外,在I/O端口初始化程序中,定義Uart_Init函數(shù),對(duì)串行口各寄存器進(jìn)行初始化,配置參數(shù)時(shí)鐘和波特率等。在中主要進(jìn)行以下串行口寄存器設(shè)置:

          UART線性控制寄存器ULCON1=0x3;

          UART控制寄存器UCON1=0x245;

          UART先進(jìn)先出控制寄存器UFCON1=0x1;

          UART波特率寄存器UBRDTV,根據(jù)公式計(jì)算出。

          在串口讀入程序中,采用了中斷方式,來(lái)實(shí)現(xiàn)雙向數(shù)據(jù)傳輸,達(dá)到實(shí)時(shí)控制的目的。串口程序數(shù)據(jù)接收過(guò)程為:調(diào)用Uart_Getch()函數(shù)讀入N個(gè)字符,以數(shù)組的方式放置在SDRAM中,然后進(jìn)行數(shù)據(jù)處理。在lib.C程序中部分源代碼如下:

          charUart_Getch()

          {…

          while(! (rUTRSTAT1 0x1)); //Receive data ready

          return rURXH1;

          …}

          3. 3 LCD顯示

          當(dāng)有新數(shù)據(jù)需要顯示時(shí), LCD顯示模塊將新的采樣數(shù)據(jù)寫入LCD顯示存儲(chǔ)器中, S3C44BO芯片所支持的LCD控制器在不需要CPU介入的情況下,通過(guò)專用DMA自動(dòng)地將需要顯示的數(shù)據(jù)從顯示存儲(chǔ)器傳送到LCD顯示器中。LCD顯示器不斷地接收數(shù)據(jù),就在LCD上顯示監(jiān)測(cè)內(nèi)容。

          3. 3. 1 LCD初始化

          定義Lcd_MonoInit()函數(shù),在LCD的三個(gè)控制寄存器中,設(shè)置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) (15) (MVAL_USED7) (0x3

          8) (0x310) (CLKVAL_MONO12);

          //disable, 4B_SNGL_SCAN,WDLY=8clk,WLH=8clk

          rLCDCON2=(LINEVAL) (HOZVAL10) (1021);

          //LINEBLANK=10(without any calculation)

          rLCDSADDR1= (0x027) (((U32) frameBuffer1>>22)

          21 ) M5D((U32)frameBuffer1>>1);

          //monochrome,LCDBANK,LCDBASEU

          rLCDSADDR2=M5D( (((U32)frameBuffer1+(SCR_XSIZE*LCD_

          YSIZE/8))>>1)) (MVAL21) (129)

          ;

          rLCDSADDR3=(LCD_XSIZE/16) ((SCR_XSIZE-LCD_XSIZE) /

          16)9);

          }

          3. 3. 2 打開LCD

          1)在內(nèi)核中開辟內(nèi)存空間用于顯示內(nèi)存

          可在顯示模塊中加入:#define frameBuffer1 0xC400000

          2)定義幀緩沖器長(zhǎng)度,并對(duì)其賦初值設(shè)置一個(gè)行列與LCD

          高寬相對(duì)應(yīng)的數(shù)組pbuffer, pbuffer用于存放發(fā)送至顯示屏的每幀像點(diǎn)數(shù)據(jù),像點(diǎn)數(shù)據(jù)的多少取決于顯示屏的大小; pbuffer=BitsPerPixe*l Lines* /8=160* 240/8=4800(字節(jié))。

          由于pbuffer被定義為U32,即32位(八個(gè)四位)指針,每一個(gè)元素對(duì)應(yīng)LCD顯示屏上的一個(gè)像素點(diǎn),顯示方式采用4-bit單掃描,所以應(yīng)當(dāng)循環(huán)4800(字節(jié)) /4=1200次,實(shí)際上對(duì)應(yīng)的單元數(shù)為整個(gè)160×240的屏幕范圍。

          for( i=0, i1200; i++)

          #(pBuffer[ i])=0x0;

          3)數(shù)據(jù)處理

          LCD的數(shù)據(jù)處理主要對(duì)要顯示的數(shù)據(jù)進(jìn)行處理(4bit到32bit的轉(zhuǎn)換)。

          temp_data=(Buf[ i* 4+3]24)+(Buf[ i* 4+2] 16)+(Buf[*i 4+1]8)+(Buf[*i 4]);

        linux操作系統(tǒng)文章專題:linux操作系統(tǒng)詳解(linux不再難懂)

        上一頁(yè) 1 2 下一頁(yè)

        評(píng)論


        相關(guān)推薦

        技術(shù)專區(qū)

        關(guān)閉
        主站蜘蛛池模板: 邵武市| 瑞金市| 和龙市| 绵竹市| 和平县| 松桃| 宁化县| 武功县| 循化| 策勒县| 南汇区| 通许县| 永州市| 罗山县| 郧西县| 嘉荫县| 怀安县| 嘉黎县| 和田市| 怀集县| 遂宁市| 梁山县| 运城市| 平遥县| 隆安县| 闽清县| 正宁县| 阳谷县| 昂仁县| 柘城县| 类乌齐县| 永州市| 察隅县| 禹城市| 夹江县| 河北省| 鄂尔多斯市| 乌恰县| 嘉峪关市| 育儿| 新宾|