亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        LPC1768的全雙工UART的軟件模擬實現(xiàn)※

        2013-10-10 01:56:42鄭志雄胡愛蘭
        關(guān)鍵詞:數(shù)據(jù)位服務(wù)程序波特率

        鄭志雄,胡愛蘭

        (華北計算機系統(tǒng)工程研究所,北京100083)

        引 言

        在嵌入式系統(tǒng)開發(fā)過程中,用到UART串口的機率非常高,往往某些場合用到的個數(shù)還比較多,如筆者現(xiàn)在正在開發(fā)的項目,由于要具備多種上、下行通信方式,并且基本上都需要基于UART串口來實現(xiàn),統(tǒng)計后發(fā)現(xiàn)至少需要6個串口,而市面上具備6個以上串口的價位適中的MCU又比較少見,這時串口的擴展往往就不可避免。還有一種情況,在某些低成本應(yīng)用中,所選的MCU通常只有1~2個串口,此時如果MCU內(nèi)部串口已作他用,但還想用串口實現(xiàn)某些功能,比較好的方法也只有通過串口擴展實現(xiàn)。

        串口擴展有硬件擴展和軟件擴展兩種方式:硬件擴展主要是通過串口擴展芯片實現(xiàn),常見的有16C550、SC16IS752/SC16IS762等,但會增加成本和占用板面空間;軟件擴展就是利用MCU的GPIO引腳通過軟件編程來模擬UART的發(fā)送和接收功能,該方式不僅靈活可靠,而且節(jié)約成本。本文主要是介紹UART串口的軟件擴展方式。

        目前有很多軟件模擬串口的方案,其中大部分可以歸結(jié)為兩種實現(xiàn)方式:第一,采用軟件延時來逐位輸入、輸出數(shù)據(jù)幀bit位;第二,利用MCU內(nèi)部定時器定時輸入、輸出數(shù)據(jù)幀bit位。軟件延時方式在發(fā)送或接收過程中會一直占用MCU,效率較低,這對于一些波特率要求不高、但實時性要求較高的工控場合并不適用;定時器方式在中斷中接收,效率較高,但發(fā)送時往往還是采用阻塞式(持續(xù)判斷定時器溢出標(biāo)志位)的發(fā)送方式,總體上還是有些欠缺,而且兩者都只能進行半雙工通信。本文的實現(xiàn)方式也是采用定時器方式,但完全是在定時器中斷服務(wù)中實現(xiàn)數(shù)據(jù)的發(fā)送和接收,經(jīng)過測試發(fā)現(xiàn),MCU的實際占用率可以降低到10%以下[1],具有較高的效率,很適合筆者所要開發(fā)的項目,并且還可以同時進行發(fā)送和接收,實現(xiàn)了全雙工的異步串行通信方式。

        1 UART串口簡介

        串行通信接口簡稱串口,分為異步和同步兩種通信方式,這里用到的是異步串行通信接口,即UART。通常它的一幀數(shù)據(jù)幀是10位或11位,圖1是一個11位的幀,包括1位起始位(0)、8位數(shù)據(jù)位、1位奇偶校驗位和1位停止位(1)。通信雙方必須采用相同的波特率(波特率即每秒收發(fā)的bit位數(shù)),嚴(yán)格按照雙方約定的幀格式進行數(shù)據(jù)傳輸,且空閑狀態(tài)下串口輸入/輸出線上保持高電平。

        圖1 UART串口11位幀結(jié)構(gòu)

        2 UART的軟件模擬實現(xiàn)

        2.1 模擬實現(xiàn)的基本思路

        根據(jù)異步串行通信接口的工作方式,UART軟件模擬實現(xiàn)的基本思路如下:在輸入上,可以利用LPC1768定時器的捕獲輸入引腳(Capture Input)來捕捉起始位,在確定是起始位后,按照波特率設(shè)置好定時器匹配寄存器(Match Register),以一定的時間間隔來采樣輸入引腳上的電平,在確認校驗位與停止位無誤后,完成一幀數(shù)據(jù)的采樣;在輸出上,只要按照所需波特率設(shè)置好定時器,在每一個定時中斷到來后,按照從低到高的順序,逐位輸出待發(fā)送數(shù)據(jù)幀的位即可,需要注意的是,空閑狀態(tài)下輸出引腳必須保持高電平。

        基本思路是比較直接的、初步的實現(xiàn)方法,具體實現(xiàn)時,需要在基本思路的基礎(chǔ)上做些改變。另外需要說明的是,在輸入采樣時,對每一數(shù)據(jù)位一般需要多次采樣并確認一致后才完成輸入,但經(jīng)過實際測試與對其他方案[2-3]的研究發(fā)現(xiàn),每一數(shù)據(jù)位僅采樣一次也幾乎沒有錯誤發(fā)生,所以本文的程序僅在每一數(shù)據(jù)位傳輸?shù)闹虚g時刻采樣一次。

        2.2 具體的軟件實現(xiàn)

        選擇 LPC1768[4]內(nèi)部的定時器 Timer 0、相應(yīng)的捕獲輸入引腳P1.26和通用GPIO口P1.28作為軟件實現(xiàn)所需的硬件資源。讓Timer 0工作在定時器模式(Timer Mode)下;開啟P1.26引腳(CAP0.0)的下降沿捕獲功能,使能其中斷(在捕捉到起始位后,該引腳轉(zhuǎn)換為GPIO輸入模式);接收和發(fā)送共用匹配寄存器1(MR1),計數(shù)器(TC)值匹配(即溢出)后TC自動清零并中斷;P1.28引腳配置為GPIO輸出模式。

        為了能在定時器中斷服務(wù)程序中同時處理數(shù)據(jù)幀的接收和發(fā)送,作了以下設(shè)置:① 定義了兩個全局變量Tx-Enable和RxEnable用于使能和停止發(fā)送、接收功能;②定時器溢出常數(shù)(寫入MR1的值)設(shè)置為數(shù)據(jù)位寬度(波特率的倒數(shù))的一半,即每半個bit周期中斷一次;③ 定義兩個全局變量,一個發(fā)送計數(shù)器TxCount和一個接收計數(shù)器RxCount。

        在定時器中斷服務(wù)程序中,主要處理兩種類型的定時器中斷:定時器捕獲中斷和定時器溢出中斷。對前者的處理主要是開啟數(shù)據(jù)接收功能,對后者的處理主要是進行數(shù)據(jù)的發(fā)送和接收。定時器中斷服務(wù)程序的流程如圖2所示。

        圖2 中斷服務(wù)程序流程圖

        每次發(fā)送數(shù)據(jù)時使能發(fā)送功能(TxEnable=1)、啟動定時器、TxCount賦值0,定時周期到后,從定時器中斷服務(wù)程序中進入發(fā)送流程,判斷TxCount的值,進行數(shù)據(jù)的發(fā)送,并相應(yīng)地使發(fā)送計數(shù)器TxCount加1。發(fā)送程序流程如圖3所示。

        圖3 發(fā)送程序流程圖

        接收數(shù)據(jù)由捕獲中斷觸發(fā)開始,在定時器捕獲中斷服務(wù)程序中禁止捕獲功能、啟動定時器、使能接收、RxCount賦值0,定時周期到后,由定時器中斷服務(wù)程序中進入接收流程,判斷RxCount值,進行數(shù)據(jù)的采樣接收,并使接收計數(shù)器RxCount加1。接收程序流程如圖4所示。

        圖4 接收程序流程圖

        這里需要指出的是,在將方案用于實際系統(tǒng)時,一般需要將定時器中斷設(shè)為最高的優(yōu)先級,以保證發(fā)送、接收過程不會因為其他中斷的長時間延時而受到影響從而導(dǎo)致數(shù)據(jù)丟失。

        2.3 偶校驗的實現(xiàn)

        根據(jù)實際項目需要,在模擬串口中實現(xiàn)了偶校驗功能。發(fā)送時,直接將偶校驗輸出位填入數(shù)據(jù)幀中;接收時,當(dāng)接收到第10位時,將其與程序?qū)η?位數(shù)據(jù)的偶校驗輸出進行對比,若一致則繼續(xù)接收下一位,否則丟棄本次數(shù)據(jù),重新開始下一幀的接收。偶校驗程序如下:

        2.4 發(fā)送、接收緩沖區(qū)的設(shè)計

        為了給應(yīng)用程序提供一個友好方便的接口,設(shè)計了發(fā)送和接收緩沖區(qū),這樣軟件模擬串口就和硬件UART在使用上很接近了。緩沖區(qū)是兩個先入先出(FIFO)的循環(huán)隊列,其本質(zhì)是兩個無符號char型數(shù)組。為兩個緩沖區(qū)分別定義了3個全局變量,對發(fā)送有:發(fā)送位置索引TxRdIndex,用于指示模擬串口下一個要發(fā)送的數(shù)據(jù)的位置;發(fā)送緩沖區(qū)寫索引SWTxIndex,用于指示應(yīng)用程序下一個要寫入發(fā)送緩沖區(qū)的數(shù)據(jù)的寫入位置;發(fā)送緩沖區(qū)數(shù)據(jù)個數(shù)TxByteCnt,用于指示發(fā)送緩沖區(qū)中待發(fā)送的數(shù)據(jù)個數(shù),示例如圖5所示(方格左下角為數(shù)組下標(biāo))。接收緩沖區(qū)原理類似,不再贅述。

        圖5 發(fā)送緩沖區(qū)示例圖

        發(fā)送一個字節(jié)時,首先判斷發(fā)送緩沖區(qū)是否滿,若是則阻塞等待,直到有空的位置,否則寫入數(shù)據(jù)。接著判斷發(fā)送是否使能,否則開啟發(fā)送功能、啟動定時器、TxCount賦值0。然后即可退出發(fā)送字節(jié)函數(shù),去執(zhí)行其他程序,由定時器中斷服務(wù)程序去執(zhí)行數(shù)據(jù)的發(fā)送。

        接收是在定時中斷服務(wù)程序中完成的,接收完一字節(jié)就將它存入接收緩沖區(qū),并置位相應(yīng)的接收標(biāo)志位。應(yīng)用程序通過查詢接收標(biāo)志位和接收字節(jié)個數(shù)變量來讀取接收到的數(shù)據(jù)。若存儲數(shù)據(jù)時發(fā)現(xiàn)緩沖區(qū)已滿,則放棄該字節(jié)的存儲并置位接收緩沖區(qū)溢出標(biāo)志位。

        需要指出的是,實際測試發(fā)現(xiàn),緩沖區(qū)的長度對系統(tǒng)的整體運行效率影響很大[5],所以實際應(yīng)用時應(yīng)根據(jù)需要定義合適長度的緩沖區(qū)。

        源程序見本刊網(wǎng)站 www.mesnet.com.cn——編者注。

        3 測試結(jié)果

        編寫了以下程序來對軟件模擬串口代碼進行測試:

        軟件UART測試如圖6所示。測試時,上位機打開兩個串口調(diào)試助手,一個通過串口1與UART0連接,另一個通過USB轉(zhuǎn)的串口8與軟件UART連接,準(zhǔn)備一系列隨機的字節(jié)數(shù)據(jù)用于向軟件UART發(fā)送。下位機電路板運行時,可以通過連接串口8的調(diào)試助手看到不斷收到數(shù)據(jù)“88”,同時通過發(fā)送區(qū)將準(zhǔn)備的一系列數(shù)據(jù)發(fā)送出去,馬上就會看到連接串口1的調(diào)試助手收到剛發(fā)送出去的數(shù)據(jù)。仔細比對后,沒有發(fā)現(xiàn)錯誤。然后將發(fā)送區(qū)的數(shù)據(jù)連續(xù)多次發(fā)送出去,對比發(fā)送、接收的數(shù)據(jù)個數(shù),發(fā)現(xiàn)二者是一致的,再選取發(fā)送、接收的部分數(shù)據(jù)進行對比,也無錯誤發(fā)生。測試結(jié)果可以看出,該軟件串口在全雙工通信狀態(tài)下的運行是穩(wěn)定和可靠的。另外,經(jīng)測試,該軟件串口在“背靠背”傳輸模式(發(fā)送、接收引腳短接)下工作也是正常的。表1為在LPC1768幾個工作主頻下軟件UART正常穩(wěn)定工作的波特率范圍(定時器的PCLK=CCLK)。

        表1 LPC1768幾個工作主頻下的軟件UART正常穩(wěn)定工作的波特率范圍

        結(jié) 語

        對比本文,參考文獻[5]也實現(xiàn)了一種全雙工UART的軟件模擬方案,但該方案實現(xiàn)方式比較復(fù)雜,代碼量較大,移植也不方便,且不允許“背靠背”模式傳輸(無法在較嚴(yán)格的全雙工模式下運行)。與之相比,本文的實現(xiàn)方案具有較大的突破,具有較強的使用價值。另外值得一提的是,若不要求在全雙工方式下通信,可以對方案稍加修改,可最終使得軟件UART達到很高的波特率要求。

        圖6 軟件UART測試結(jié)果

        [1]廣州致遠電子有限公司.I/O模擬 UART實現(xiàn)[EB/OL].[2013-01-21].http:www.zlgmcu.com.

        [2]呂剛,李強.AVR單片機軟件模擬UART通信接口[J].單片機與嵌入式系統(tǒng)應(yīng)用,2003(2):73-76.

        [3]劉亞平,刑濟收,劉相權(quán).AVR單片機串行口的軟件擴展技術(shù)[J].北京信息科技大學(xué)學(xué)報:自然科學(xué)版,2010,25(4):53-56.

        [4]NXP Semiconductors.LPC17xx User manual[EB/OL].[2012-12-02].http:www.nxp.com.

        [5]NXP Semiconductors.Application Note:Full-duplex software UART for LPC111xand LPC13xx[EB/OL].[2012-12-02].http:www.nxp.com/documents/application_note/AN10955.pdf.

        猜你喜歡
        數(shù)據(jù)位服務(wù)程序波特率
        基于移動終端的人事信息員工自助服務(wù)系統(tǒng)設(shè)計
        A320飛機大氣數(shù)據(jù)的采集和計算在排故中的應(yīng)用
        CAN 總線波特率自適應(yīng)程序設(shè)計
        智能制造(2020年5期)2020-07-03 06:24:00
        基于C#的進程守護程序的設(shè)計
        視聽(2020年3期)2020-06-11 14:28:18
        基于FPGA的異步串行通信波特率容錯設(shè)計
        電子測試(2018年7期)2018-05-16 06:27:18
        一種適用于FPGA系統(tǒng)中的變速箱電路設(shè)計
        減少調(diào)度自動化設(shè)備通訊串口丟包率的措施
        電子測試(2016年3期)2016-03-12 04:46:52
        水利工程施工監(jiān)理服務(wù)程序及質(zhì)量控制
        C*Core芯片SCI串口波特率容限優(yōu)化
        計算機多設(shè)備接口波特率不匹配的研究
        色综合天天网| 久久久久亚洲av综合波多野结衣| 9 9久热re在线精品视频| 国产思思99re99在线观看| 91尤物在线看| 亚洲乱码中文字幕一线区| 午夜性色一区二区三区不卡视频| 爽爽午夜影视窝窝看片| 国产欧美亚洲另类第一页| 亚洲高清一区二区精品| 特黄aaaaaaaaa毛片免费视频 | 人妻在线日韩免费视频| 三级国产女主播在线观看| 一区二区三区日韩毛片| 精品午夜福利在线观看| 人妻系列无码专区久久五月天| 在线观看日本一区二区| 精品中文字幕精品中文字幕 | 人日本中文字幕免费精品| 国产成人a∨激情视频厨房| 少妇高潮惨叫喷水在线观看| 在线视频一区二区亚洲| 李白姓白白又白类似的套路| 人人妻人人狠人人爽天天综合网| 午夜国产在线| 亚洲二区三区在线播放| 人妻久久一区二区三区蜜桃| 少妇饥渴偷公乱a级无码| 国产资源精品一区二区免费| 亚洲国产综合精品一区| 朋友的丰满人妻中文字幕| 久久免费看少妇高潮v片特黄| 区一区一日本高清视频在线观看| 91色老久久偷偷精品蜜臀懂色 | 亚洲人成人网站在线观看| 激情久久无码天堂| 久久黄色精品内射胖女人| 无码人妻aⅴ一区二区三区| 少妇高潮喷水久久久影院| 男女男在线精品免费观看| 成人区人妻精品一区二区三区|