freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

一種基于嵌入式internet的遠(yuǎn)程醫(yī)療監(jiān)護(hù)系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)碩士學(xué)位論文doc-資料下載頁(yè)

2025-07-17 13:52本頁(yè)面
  

【正文】 包括EMAC接收中斷和發(fā)送中斷的處理。具體代碼如下:static void sam7xether_isr(void){ volatile rt_uint32_t isr, rsr。 /* 獲取中斷狀態(tài) */ isr = AT91C_BASE_EMACEMAC_ISR。 rsr = AT91C_BASE_EMACEMAC_RSR。 /* 接收完成或接收到幀 */ if( ( isr amp。 AT91C_EMAC_RCOMP ) || ( rsr amp。 AT91C_EMAC_REC ) ) { rt_err_t result。 /* 發(fā)送郵箱到接收線程 */ rt_mb_send(amp。eth_rx_thread_mb, (rt_uint32_t) amp。(sam7x_devparent))。 /* 清除中斷 */ AT91C_BASE_EMACEMAC_RSR = AT91C_EMAC_REC。 } /* 發(fā)送完成 */ if( isr amp。 AT91C_EMAC_TCOMP ) { sam7xether_reset_tx_desc()。 //復(fù)位發(fā)送緩沖區(qū)描述符 /* 清除中斷 */ AT91C_BASE_EMACEMAC_TSR = AT91C_EMAC_COMP。 }}該程序首先獲取EMAC中斷狀態(tài)寄存器和接收狀態(tài)寄存器值,從而獲取當(dāng)前的接收或發(fā)送狀態(tài)。當(dāng)接收完成或接收到幀時(shí),發(fā)送郵箱到接收線程,來(lái)搬運(yùn)數(shù)據(jù)幀到pbuf空間,如果是發(fā)送完成中斷,則復(fù)位發(fā)送緩沖區(qū)描述符,以啟動(dòng)下一次發(fā)送。以太網(wǎng)硬件接口中的sam7xtx和sam7xrx并沒(méi)有按照RT_Thread設(shè)備控制塊中的公用接口實(shí)現(xiàn),而是定義成私有接口。至此,嵌入式Internet的硬件基礎(chǔ)和軟件基礎(chǔ)都已完成,只需調(diào)用LwIP提供的應(yīng)用程序接口編寫(xiě)網(wǎng)絡(luò)通信程序,就可以實(shí)現(xiàn)監(jiān)測(cè)終端的Internet通信。 串口驅(qū)動(dòng)對(duì)于監(jiān)測(cè)終端,使用了處理器AT91SAM7X256的串口USART0作為生理參數(shù)的采集接口。在本設(shè)計(jì)中,串口采用中斷方式來(lái)接收數(shù)據(jù),而非輪詢方式,這樣既減少了MCU的壓力,又增加了數(shù)據(jù)采集的實(shí)時(shí)性[33]。首先串口的設(shè)備控制塊設(shè)定內(nèi)容如下所示:struct rt_serial{ struct rt_device parent。 //從設(shè)備基類繼承 /* 串口設(shè)備私有數(shù)據(jù) */ struct rt_serial_hw* hw_base。 //寄存器基地址 rt_uint16_t peripheral_id。 //外設(shè)ID rt_uint32_t baudrate。 //波特率 /* 用于接收的域 */ rt_uint16_t save_index, read_index。 //接收緩沖區(qū)索引 rt_uint8_t rx_buffer[UART_RX_BUFFER_SIZE]。 //接收緩沖區(qū)}。它除了繼承系統(tǒng)的設(shè)備基類外,還有一些私有數(shù)據(jù),如波特率、接收緩沖區(qū)等。上一節(jié)實(shí)現(xiàn)的以太網(wǎng)驅(qū)動(dòng)是面向TCP/IP協(xié)議棧,而串口驅(qū)動(dòng)面向的是應(yīng)用程序,所以其嚴(yán)格按照設(shè)備控制塊的公共接口實(shí)現(xiàn)了串口初始化serialinit、串口打開(kāi)serialopen、串口關(guān)閉serialclose、串口數(shù)據(jù)接收serialread、串口數(shù)據(jù)發(fā)送serialwrite以及中斷處理函數(shù)serial_isr()。下面描述這些接口的實(shí)現(xiàn):(1)serialinit① 使能設(shè)備時(shí)鐘和引腳;② 設(shè)置串口控制寄存器,以重啟并關(guān)閉串口接收器和發(fā)送器;③ 配置串口模式寄存器,以設(shè)置串口為普通模式、8數(shù)據(jù)位、無(wú)奇偶校驗(yàn)位、一停止位,同時(shí)設(shè)置串口的時(shí)鐘;④ 設(shè)置串口的波特率控制寄存器,最后使能串口接收器和發(fā)送器。(2)serialopen使能串口接收中斷,并初始化串口的中斷處理。(3)serialclose關(guān)閉接收中斷,關(guān)閉串口接收器和發(fā)送器。(4)serialread從串口的接收緩沖區(qū)讀取指定大小的數(shù)據(jù),在數(shù)據(jù)的讀取過(guò)程中,需要對(duì)接收緩沖區(qū)進(jìn)行臨界保護(hù),即關(guān)閉中斷,數(shù)據(jù)讀取完成或無(wú)數(shù)據(jù)時(shí),重新開(kāi)中斷。(5)serialwrite將指定長(zhǎng)度的數(shù)據(jù)寫(xiě)入串口發(fā)送保持寄存器進(jìn)行發(fā)送,直到全部發(fā)完為止。發(fā)送過(guò)程中,需要等待上一次傳輸完成,才能進(jìn)行下一次發(fā)送。(6)serial_isr()當(dāng)接收中斷發(fā)生時(shí),將接收保持寄存器內(nèi)的數(shù)據(jù)復(fù)制到串口接收緩沖區(qū),如果緩沖區(qū)滿,則從開(kāi)始處覆蓋,最后清除中斷。此處對(duì)接收緩沖區(qū)的訪問(wèn)同樣要進(jìn)行臨界處理。 44鍵盤驅(qū)動(dòng)4鍵盤的工作原理。讀取鍵值程序在初始化引腳的過(guò)程中,設(shè)置行引腳輸出低電平,列引腳中斷輸入。當(dāng)有鍵按下時(shí),列引腳產(chǎn)生PIO中斷,中斷處理程序發(fā)送信號(hào)量。讀取鍵值程序接收到信號(hào)量后,延時(shí)一段時(shí)間消除抖動(dòng),然后再判斷是否有鍵按下,如果有則讀取鍵值。讀取鍵值時(shí),先讀取列值,然后再將行引腳設(shè)為輸入,列引腳輸出低電平,再讀取行值,最后通過(guò)行值和列值索引出當(dāng)前的鍵值。讀取完成后,重新初始化引腳。 44鍵盤實(shí)現(xiàn)原理驅(qū)動(dòng)程序?qū)崿F(xiàn)了鍵盤初始化函數(shù)keyboardinit進(jìn)行引腳初始化,打開(kāi)鍵盤函數(shù)keyboardopen進(jìn)行PIO中斷初始化并使能,關(guān)閉鍵盤函數(shù)keyboardclose禁止PIO中斷,讀取鍵值函數(shù)keyboardread和PIO中斷處理函數(shù)keyboard_isr()。 LCD驅(qū)動(dòng)在本系統(tǒng)中,對(duì)LCD模塊的操作主要是讀忙碌標(biāo)志、寫(xiě)指令和寫(xiě)數(shù)據(jù),根據(jù)LCD模塊的讀寫(xiě)時(shí)序,實(shí)現(xiàn)了以下代碼:/* 讀忙碌標(biāo)志 */void check_busy(void) { unsigned char temp。 //狀態(tài)信息(判斷是否忙)rs_cmd()。 // RS = 0,指令操作w_read()。 // RW = 1,讀操作e_enable()。 //E = 1,使能LCDdo{ //循環(huán)讀取,直到LCD空閑temp = pio_get_input(DB_PIO)。 } while(tempamp。0x80)。e_disable()。 //E = 0,禁止LCD}/* 寫(xiě)命令 */void send_cmd(unsigned char cmd) { check_busy()。 //是否忙 rs_cmd()。 //RS = 0,指令操作 rw_write()。 //RW = 0,寫(xiě)操作 /* 對(duì)相應(yīng)的PIO口進(jìn)行置位操作,以寫(xiě)入指定命令 */ pio_set_output(cmd)。 e_enable()。 //E = 1,使能LCD e_disable()。 //E = 0,禁止LCD /* 清除數(shù)據(jù)位對(duì)應(yīng)的PIO口,完成本次寫(xiě)入操作 */ pio_clear_output(DB_PIO)。}/* 寫(xiě)數(shù)據(jù) */void send_data(unsigned char data) { check_busy()。 //是否忙 rs_data()。 //RS = 1,數(shù)據(jù)操作 rw_write()。 //RW = 0,寫(xiě)操作 /* 對(duì)相應(yīng)的PIO口進(jìn)行置位操作,以寫(xiě)入指定數(shù)據(jù) */ pio_set_output(data)。 e_enable()。 //E = 1,使能LCD e_disable()。 //E = 0,禁止LCD /* 清除數(shù)據(jù)位對(duì)應(yīng)的PIO口,完成本次寫(xiě)入操作 */ pio_clear_output(DB_PIO)。}在以上三個(gè)函數(shù)的基礎(chǔ)上,LCD驅(qū)動(dòng)實(shí)現(xiàn)了模塊初始化程序lcdinit和寫(xiě)顯示數(shù)據(jù)函數(shù)lcdwrite。lcdinit函數(shù)首先初始化LCD的控制引腳,然后對(duì)模塊進(jìn)行寫(xiě)命令操作,來(lái)進(jìn)行模塊的相關(guān)設(shè)置,包括功能設(shè)置、顯示設(shè)置、顯示數(shù)據(jù)寄存器(DDRAM)的初始化操作等。lcdwrite實(shí)現(xiàn)了對(duì)指定位置的寫(xiě)顯示數(shù)據(jù)操作。該函數(shù)首先判斷要寫(xiě)入的字符數(shù)目,如果為0,則進(jìn)行清屏操作,如果大于0,則根據(jù)指定的坐標(biāo)寫(xiě)指令寄存器進(jìn)行移位,最后寫(xiě)入要顯示的字符到數(shù)據(jù)寄存器。 DataFlash驅(qū)動(dòng)MCU與DataFlash之間通過(guò)SPI接口進(jìn)行通信,為了使通信更加有效,驅(qū)動(dòng)程序開(kāi)啟了SPI接口的外設(shè)DMA控制器(PDC),這樣MCU與DataFlash之間的數(shù)據(jù)傳輸不需要處理器進(jìn)行干預(yù)。SPI接口的PDC具有一個(gè)發(fā)送通道和一個(gè)接收通道,每個(gè)通道的用戶接口包括一個(gè)32位的數(shù)據(jù)指針寄存器、一個(gè)16位的數(shù)據(jù)長(zhǎng)度寄存器、一個(gè)32位的次幀數(shù)據(jù)指針寄存器和一個(gè)16位的次幀數(shù)據(jù)長(zhǎng)度寄存器。對(duì)SPI的讀寫(xiě)操作只需將數(shù)據(jù)指針和數(shù)據(jù)長(zhǎng)度寫(xiě)入這些寄存器,然后使能接收和發(fā)送即可。依據(jù)PDC通信的特點(diǎn),DataFlash驅(qū)動(dòng)定義了如下的設(shè)備描述符來(lái)對(duì)DataFlash進(jìn)行訪問(wèn):struct rt_dataflash_desc{ rt_uint8_t *tx_cmd_pt。 //發(fā)送指令地址 rt_uint32_t tx_cmd_size。 //發(fā)送指令長(zhǎng)度 rt_uint8_t *rx_cmd_pt。 //接收指令地址 rt_uint32_t rx_cmd_size。 //接收指令長(zhǎng)度 rt_uint8_t *tx_data_pt。 //發(fā)送數(shù)據(jù)指針 rt_uint32_t tx_data_size。 //發(fā)送數(shù)據(jù)長(zhǎng)度 rt_uint8_t *rx_data_pt。 //接收數(shù)據(jù)指針 rt_uint32_t rx_data_size。 //接收數(shù)據(jù)長(zhǎng)度 volatile rt_uint8_t spi_state。 //SPI狀態(tài) volatile rt_uint8_t dataflash_state。 //DataFlash狀態(tài) rt_uint8_t mand[8]。 //具體指令}。以下代碼實(shí)現(xiàn)了對(duì)PDC通道的讀寫(xiě)操作:static void spi_write (struct rt_dataflash_desc pDesc){ pDescspi_state = BUSY。 //正在執(zhí)行寫(xiě)操作,狀態(tài)為忙 /* 禁止PDC收發(fā) */AT91C_BASE_SPI0SPI_PTCR = AT91C_PDC_TXTDIS+ AT91C_PDC_RXTDIS。 /* 初始化接收、發(fā)送數(shù)據(jù)指針寄存器為設(shè)備的指令地址 */AT91C_BASE_SPI0SPI_RPR = (rt_uint32_t)pDescrx_cmd_pt 。AT91C_BASE_SPI0SPI_TPR = (rt_uint32_t)pDesctx_cmd_pt 。/* 初始化接收、發(fā)送數(shù)據(jù)長(zhǎng)度寄存器為設(shè)備的指令長(zhǎng)度 */AT91C_BASE_SPI0SPI_RCR = pDescrx_cmd_size 。AT91C_BASE_SPI0SPI_TCR = pDesctx_cmd_size 。 if ( pDesctx_data_size != 0 ) //如果有數(shù)據(jù)要發(fā)送{ /* 初始化次幀接收、發(fā)送數(shù)據(jù)指針寄存器為設(shè)備的數(shù)據(jù)地址 */ AT91C_BASE_SPI0SPI_RNPR = (rt_uint32_t)pDescrx_data_pt 。AT91C_BASE_SPI0SPI_TNPR = (rt_uint32_t)pDesctx_data_pt 。 /* 初始化次幀接收、發(fā)送數(shù)據(jù)長(zhǎng)度寄存器為設(shè)備的數(shù)據(jù)長(zhǎng)度 */ AT91C_BASE_SPI0SPI_RNCR = pDescrx_data_size 。 AT91C_BASE_SPI0SPI_TNCR = pDesctx_data_size 。}/* 使能接收中斷 */AT91C_BASE_SPI0SPI_IER = AT91C_SPI_RXBUFF。/* 使能PDC收發(fā) */AT91C_BASE_SPI0SPI_PTCR = AT91C_PDC_TXTEN + AT91C_PDC_RXTEN。}DataFlash的讀、寫(xiě)和擦除操作的實(shí)現(xiàn)思路如下:向DataFlash發(fā)送讀狀態(tài)寄存器指令,獲取當(dāng)前的設(shè)備狀態(tài),如果設(shè)備忙,則循環(huán)讀取,直到設(shè)備空閑再發(fā)送頁(yè)面讀、寫(xiě)或擦除指令。在發(fā)送指令前,需要對(duì)設(shè)備描述符進(jìn)行初始化:初始化指令指針和指令長(zhǎng)度,用以指示當(dāng)前的操作(讀、寫(xiě)或擦除)和訪問(wèn)的DataFlash空間;初始化數(shù)據(jù)指針和數(shù)據(jù)長(zhǎng)度,用以從DataFlash讀取相應(yīng)長(zhǎng)度的數(shù)據(jù)到指定地址,或者將指定地址和長(zhǎng)度的數(shù)據(jù)寫(xiě)入到DataFlash。驅(qū)動(dòng)具體實(shí)現(xiàn)了以下接口:dataflashinit初始化SPI接口,使能SPI和PDC,并配置和使能SPI中斷;dataflash–read實(shí)現(xiàn)頁(yè)面讀??;dataflashwrite實(shí)現(xiàn)頁(yè)面寫(xiě)入;dataflasherase實(shí)現(xiàn)頁(yè)面擦除;dataflash_isr()實(shí)現(xiàn)SPI接口的接收中斷處理,用以讀取當(dāng)前SPI和DataFlash的狀態(tài)。 應(yīng)用程序?qū)訉?shí)現(xiàn)監(jiān)測(cè)終端在本遠(yuǎn)程醫(yī)療監(jiān)護(hù)系統(tǒng)中完成的工作有:(1)通過(guò)輸入患者編號(hào)和密碼登錄到監(jiān)控中心服務(wù)器,從而開(kāi)始與監(jiān)控中心進(jìn)行數(shù)據(jù)交互。(2)通過(guò)串口與生理參數(shù)采集設(shè)備通信,實(shí)現(xiàn)生理參數(shù)的采集,同樣可以使用鍵盤輸入采集到的參數(shù),目前只對(duì)體溫和血壓實(shí)現(xiàn)了采集。(3)將患者的生理參數(shù)通過(guò)Internet上傳到監(jiān)控中心,如果收到監(jiān)控中心的異常應(yīng)答,則發(fā)出警報(bào)。(4)向監(jiān)控中心提交咨詢請(qǐng)求,以獲取診斷結(jié)果、治療
點(diǎn)擊復(fù)制文檔內(nèi)容
環(huán)評(píng)公示相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1