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(參考版)

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

【正文】 (4)向監(jiān)控中心提交咨詢請(qǐng)求,以獲取診斷結(jié)果、治療。(2)通過(guò)串口與生理參數(shù)采集設(shè)備通信,實(shí)現(xiàn)生理參數(shù)的采集,同樣可以使用鍵盤(pán)輸入采集到的參數(shù),目前只對(duì)體溫和血壓實(shí)現(xiàn)了采集。驅(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)。}DataFlash的讀、寫(xiě)和擦除操作的實(shí)現(xiàn)思路如下:向DataFlash發(fā)送讀狀態(tài)寄存器指令,獲取當(dāng)前的設(shè)備狀態(tài),如果設(shè)備忙,則循環(huán)讀取,直到設(shè)備空閑再發(fā)送頁(yè)面讀、寫(xiě)或擦除指令。}/* 使能接收中斷 */AT91C_BASE_SPI0SPI_IER = AT91C_SPI_RXBUFF。 /* 初始化次幀接收、發(fā)送數(shù)據(jù)長(zhǎng)度寄存器為設(shè)備的數(shù)據(jù)長(zhǎng)度 */ AT91C_BASE_SPI0SPI_RNCR = pDescrx_data_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 。/* 初始化接收、發(fā)送數(shù)據(jù)長(zhǎng)度寄存器為設(shè)備的指令長(zhǎng)度 */AT91C_BASE_SPI0SPI_RCR = pDescrx_cmd_size 。 /* 初始化接收、發(fā)送數(shù)據(jù)指針寄存器為設(shè)備的指令地址 */AT91C_BASE_SPI0SPI_RPR = (rt_uint32_t)pDescrx_cmd_pt 。以下代碼實(shí)現(xiàn)了對(duì)PDC通道的讀寫(xiě)操作:static void spi_write (struct rt_dataflash_desc pDesc){ pDescspi_state = BUSY。 //DataFlash狀態(tài) rt_uint8_t mand[8]。 //接收數(shù)據(jù)長(zhǎng)度 volatile rt_uint8_t spi_state。 //發(fā)送數(shù)據(jù)長(zhǎng)度 rt_uint8_t *rx_data_pt。 //接收指令長(zhǎng)度 rt_uint8_t *tx_data_pt。 //發(fā)送指令長(zhǎng)度 rt_uint8_t *rx_cmd_pt。依據(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。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)度寄存器。該函數(shù)首先判斷要寫(xiě)入的字符數(shù)目,如果為0,則進(jìn)行清屏操作,如果大于0,則根據(jù)指定的坐標(biāo)寫(xiě)指令寄存器進(jìn)行移位,最后寫(xiě)入要顯示的字符到數(shù)據(jù)寄存器。lcdinit函數(shù)首先初始化LCD的控制引腳,然后對(duì)模塊進(jìn)行寫(xiě)命令操作,來(lái)進(jìn)行模塊的相關(guān)設(shè)置,包括功能設(shè)置、顯示設(shè)置、顯示數(shù)據(jù)寄存器(DDRAM)的初始化操作等。 //E = 0,禁止LCD /* 清除數(shù)據(jù)位對(duì)應(yīng)的PIO口,完成本次寫(xiě)入操作 */ pio_clear_output(DB_PIO)。 e_enable()。 //RS = 1,數(shù)據(jù)操作 rw_write()。}/* 寫(xiě)數(shù)據(jù) */void send_data(unsigned char data) { check_busy()。 //E = 1,使能LCD e_disable()。 //RW = 0,寫(xiě)操作 /* 對(duì)相應(yīng)的PIO口進(jìn)行置位操作,以寫(xiě)入指定命令 */ pio_set_output(cmd)。 //是否忙 rs_cmd()。e_disable()。 } while(tempamp。 // RW = 1,讀操作e_enable()。 //狀態(tài)信息(判斷是否忙)rs_cmd()。 44鍵盤(pán)實(shí)現(xiàn)原理驅(qū)動(dòng)程序?qū)崿F(xiàn)了鍵盤(pán)初始化函數(shù)keyboardinit進(jìn)行引腳初始化,打開(kāi)鍵盤(pán)函數(shù)keyboardopen進(jìn)行PIO中斷初始化并使能,關(guān)閉鍵盤(pán)函數(shù)keyboardclose禁止PIO中斷,讀取鍵值函數(shù)keyboardread和PIO中斷處理函數(shù)keyboard_isr()。讀取鍵值時(shí),先讀取列值,然后再將行引腳設(shè)為輸入,列引腳輸出低電平,再讀取行值,最后通過(guò)行值和列值索引出當(dāng)前的鍵值。當(dāng)有鍵按下時(shí),列引腳產(chǎn)生PIO中斷,中斷處理程序發(fā)送信號(hào)量。 44鍵盤(pán)驅(qū)動(dòng)4鍵盤(pán)的工作原理。(6)serial_isr()當(dāng)接收中斷發(fā)生時(shí),將接收保持寄存器內(nèi)的數(shù)據(jù)復(fù)制到串口接收緩沖區(qū),如果緩沖區(qū)滿,則從開(kāi)始處覆蓋,最后清除中斷。(5)serialwrite將指定長(zhǎng)度的數(shù)據(jù)寫(xiě)入串口發(fā)送保持寄存器進(jìn)行發(fā)送,直到全部發(fā)完為止。(3)serialclose關(guān)閉接收中斷,關(guān)閉串口接收器和發(fā)送器。下面描述這些接口的實(shí)現(xiàn):(1)serialinit① 使能設(shè)備時(shí)鐘和引腳;② 設(shè)置串口控制寄存器,以重啟并關(guān)閉串口接收器和發(fā)送器;③ 配置串口模式寄存器,以設(shè)置串口為普通模式、8數(shù)據(jù)位、無(wú)奇偶校驗(yàn)位、一停止位,同時(shí)設(shè)置串口的時(shí)鐘;④ 設(shè)置串口的波特率控制寄存器,最后使能串口接收器和發(fā)送器。它除了繼承系統(tǒng)的設(shè)備基類(lèi)外,還有一些私有數(shù)據(jù),如波特率、接收緩沖區(qū)等。 //接收緩沖區(qū)索引 rt_uint8_t rx_buffer[UART_RX_BUFFER_SIZE]。 //外設(shè)ID rt_uint32_t baudrate。 //從設(shè)備基類(lèi)繼承 /* 串口設(shè)備私有數(shù)據(jù) */ struct rt_serial_hw* hw_base。在本設(shè)計(jì)中,串口采用中斷方式來(lái)接收數(shù)據(jù),而非輪詢方式,這樣既減少了MCU的壓力,又增加了數(shù)據(jù)采集的實(shí)時(shí)性[33]。至此,嵌入式Internet的硬件基礎(chǔ)和軟件基礎(chǔ)都已完成,只需調(diào)用LwIP提供的應(yīng)用程序接口編寫(xiě)網(wǎng)絡(luò)通信程序,就可以實(shí)現(xiàn)監(jiān)測(cè)終端的Internet通信。當(dāng)接收完成或接收到幀時(shí),發(fā)送郵箱到接收線程,來(lái)搬運(yùn)數(shù)據(jù)幀到pbuf空間,如果是發(fā)送完成中斷,則復(fù)位發(fā)送緩沖區(qū)描述符,以啟動(dòng)下一次發(fā)送。 //復(fù)位發(fā)送緩沖區(qū)描述符 /* 清除中斷 */ AT91C_BASE_EMACEMAC_TSR = AT91C_EMAC_COMP。 } /* 發(fā)送完成 */ if( isr amp。(sam7x_devparent))。 /* 發(fā)送郵箱到接收線程 */ rt_mb_send(amp。 AT91C_EMAC_RCOMP ) || ( rsr amp。 rsr = AT91C_BASE_EMACEMAC_RSR。具體代碼如下:static void sam7xether_isr(void){ volatile rt_uint32_t isr, rsr。首先跳過(guò)接收緩沖區(qū)內(nèi)的幀碎片,如果有可用的數(shù)據(jù)幀,則獲取幀長(zhǎng),然后調(diào)用LwIP的pbuf_alloc()函數(shù)申請(qǐng)pbuf空間,如果有足夠的pbuf空間,則將數(shù)據(jù)幀從接收緩沖區(qū)復(fù)制到pbuf中,最后使能以太網(wǎng)接收完成中斷。最后根據(jù)frame_last標(biāo)志啟動(dòng)數(shù)據(jù)幀發(fā)送或繼續(xù)搬運(yùn)數(shù)據(jù)幀。 sam7xethtx實(shí)現(xiàn)流程首先從描述符中獲得可用的緩沖區(qū)地址,如果沒(méi)有則延遲一段時(shí)間,然后把pbuf內(nèi)數(shù)據(jù)幀復(fù)制到該緩沖區(qū),如果復(fù)制完指定長(zhǎng)度的數(shù)據(jù)幀或到達(dá)數(shù)據(jù)幀尾,那么frame_last標(biāo)志置位。下面描述硬件接口四個(gè)函數(shù)的具體實(shí)現(xiàn):(1)sam7xethinit此函數(shù)用來(lái)初始化以太網(wǎng)硬件,它需要完成以下工作:① 配置EMAC時(shí)鐘和引腳,并使能EMAC與PHY之間的通信;② 復(fù)位PHY芯片,使其進(jìn)入U(xiǎn)TP模式(也就是非屏蔽雙絞線模式),并建立實(shí)際的物理鏈路,在這個(gè)過(guò)程中PHY會(huì)與物理鏈路進(jìn)行自動(dòng)協(xié)商,協(xié)商的結(jié)果用來(lái)設(shè)置EMAC自身的鏈路速度和單雙工方式;③ 初始化緩沖區(qū)描述符,使每個(gè)描述符指向正確的緩沖區(qū)地址,然后將描述符首地址寫(xiě)入到隊(duì)列指針寄存器,同時(shí)初始化描述符的狀態(tài)位;④ 設(shè)置EMAC為MII模式,清除接收和發(fā)送狀態(tài)寄存器,最后配置中斷。發(fā)送機(jī)制與接收基本相似,這里不再贅述。描述符隊(duì)列成員由兩個(gè)字組成,第一個(gè)字保存緩沖區(qū)地址,第二個(gè)字保存接收狀態(tài),整個(gè)描述符隊(duì)列的首地址保存到接收隊(duì)列指針寄存器中。 硬件接口硬件接口的主要任務(wù)是實(shí)現(xiàn)數(shù)據(jù)幀在EMAC緩沖區(qū)與LwIP pbuf之間的傳遞。接收線程收到郵箱后,脫離堵塞狀態(tài),調(diào)用sam7xethrx函數(shù),讀取數(shù)據(jù)幀到LwIP的包緩沖區(qū)(pbuf),最后由eth_input()傳遞到上層協(xié)議。該線程同樣會(huì)堵塞接收數(shù)據(jù)幀,不過(guò)此時(shí)的數(shù)據(jù)幀來(lái)自底層硬件。數(shù)據(jù)幀的地址由鏈路層發(fā)送函數(shù)netiflinkoutput以郵箱形式傳遞給發(fā)送線程。(2)eth_tx_thread(),以太網(wǎng)數(shù)據(jù)幀發(fā)送線程。此函數(shù)向LwIP注冊(cè)鏈路層發(fā)送函數(shù),對(duì)網(wǎng)卡進(jìn)行初始化,建立穩(wěn)定的物理連接鏈路并建立接收和發(fā)送線程。但是為了成功的實(shí)現(xiàn)硬件接口,有必要了解底層網(wǎng)絡(luò)接口的實(shí)現(xiàn)過(guò)程。數(shù)據(jù)鏈路層分兩部分進(jìn)行實(shí)現(xiàn),第一部分是底層網(wǎng)絡(luò)接口,它的目的在于脫離硬件,為上層協(xié)議提供各種以太網(wǎng)操作接口,實(shí)現(xiàn)以太網(wǎng)初始化、以太網(wǎng)數(shù)據(jù)幀的接收和發(fā)送;第二部分是硬件接口,直接與底層硬件打交道,包括對(duì)底層硬件的初始化和讀寫(xiě)操作,以及中斷處理程序。當(dāng)需要使用當(dāng)前設(shè)備時(shí),調(diào)用rt_device_register()函數(shù)注冊(cè)設(shè)備到系統(tǒng)中,然后調(diào)用相應(yīng)接口函數(shù)即可實(shí)現(xiàn)對(duì)設(shè)備的訪問(wèn)。 }。rt_err_t (*control)(rt_device_t dev, rt_uint8_t cmd, //控制設(shè)備void *args)。 //關(guān)閉設(shè)備rt_size_t (*read) (rt_device_t dev, rt_off_t pos, //讀設(shè)備void* buffer, rt_size_t size)。 //設(shè)備初始化rt_err_t (*open) (rt_device_t dev, rt_uint16_t oflag)。 //接收回調(diào)rt_err_t (*tx_plete)(rt_device_t dev, void* buffer)。 //設(shè)備類(lèi)型rt_uint16_t flag, open_flag。下面是RT_Thread的設(shè)備管理控制塊:struct rt_device{struct rt_object parent。 設(shè)備驅(qū)動(dòng)層實(shí)現(xiàn)嵌入式操作系統(tǒng)RT_Thread的設(shè)備管理模塊為應(yīng)用提供了一個(gè)對(duì)設(shè)備進(jìn)行訪問(wèn)的通用接口,并通過(guò)定義的數(shù)據(jù)結(jié)構(gòu)對(duì)設(shè)備管理程序和設(shè)備信息進(jìn)行管理。(4)在本文件中,還實(shí)現(xiàn)了IRQ和FIQ的中斷入口函數(shù)IRQ_Handler和FIQ_Handler,它們的實(shí)現(xiàn)過(guò)程類(lèi)似。具體代碼如下所示:rt_hw_context_switch PROC/* from所指線程入棧 */ STMFD sp!, {lr} STMFD sp!, {r0r12, lr} //r0~r12, lr入棧/ MRS r4, cpsr //cpsr入棧 STMFD sp!, {r4} MRS r4, spsr //spsr入棧 STMFD sp!, {r4} STR sp, [r0] //線程棧地址入棧 /* to所指線程出棧 */ LDR sp, [r1] //載入線程棧地址 LDMFD sp!, {r4} MSR spsr_cxsf, r4 //spsr出棧 LDMFD sp!, {r4} MSR cpsr_cxsf, r4 //cpsr出棧 LDMFD sp!, {r0r12, lr, pc} //r0~r12, lr, pc出棧 ENDP(3)實(shí)現(xiàn)中斷級(jí)的線程切換函數(shù)rt_hw_context_switch_interrupt_do(rt_base_t flag)。具體代碼如下:rt_hw_interrupt_disable PROC MRS r0, cpsr //level變量保存當(dāng)前狀態(tài) ORR r1, r0, 0xc0 //設(shè)置cpsr寄存器,禁止FIQ和IRQ中斷 MSR cpsr_c, r1 BX lr ENDPrt_hw_interrupt_enable PROC MSR cpsr_c, r0 //恢復(fù)以前的狀態(tài) BX lr ENDP(2)實(shí)現(xiàn)線程級(jí)的線程切換函數(shù)void rt_hw_context_switch(rt_uint32 from, rt_uint32 to),輸入?yún)?shù)為要切換的兩個(gè)線程的線程棧首地址。 (1)實(shí)現(xiàn)臨界區(qū)處理函數(shù),即處理器中斷禁止和使能函數(shù),分別是rt_base_t rt_hw_interrupt_disable()和rt_hw_interrupt_enable(rt_base_t level)。由于此時(shí)線程尚未運(yùn)行,所以將線程入口地址壓入棧,然后采用降序棧的方式為各寄存器分配棧空間并設(shè)置初始值,此時(shí)寄存器r1~r12對(duì)應(yīng)的棧空間可以初始化為任何值。 //spsr return (rt_uint8_t *)stk。 //r0:
點(diǎn)擊復(fù)制文檔內(nèi)容
環(huán)評(píng)公示相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1