對(duì)uart數(shù)據(jù)進(jìn)行接收和解析的方法以及裝置的制造方法
【技術(shù)領(lǐng)域】
[0001] 本發(fā)明涉及數(shù)據(jù)傳輸領(lǐng)域,特別是指一種對(duì)UART數(shù)據(jù)進(jìn)行接收和解析的方法以及 裝置。
【背景技術(shù)】
[0002] 通用異步收發(fā)器(Universal Asynchronous Receiver and Transmitter;UART) 是用硬件實(shí)現(xiàn)異步串行通信的通信接口電路,UART異步串行通信接口是電子電路設(shè)計(jì)中最 常見的接口,可用來與上位機(jī)或其他外部設(shè)備進(jìn)行數(shù)據(jù)通信。由于UART應(yīng)用的普通性,所以 大部分微控制器內(nèi)部都集成有UART模塊。
[0003] UART模塊以字節(jié)為單位接收數(shù)據(jù),UART模塊的緩存每接收一個(gè)字節(jié)(我們將UART 緩存中的數(shù)據(jù)稱為UART數(shù)據(jù)),UART模塊就會(huì)設(shè)置一個(gè)中斷標(biāo)記,當(dāng)微控制器使能了 UART模 塊的中斷使能后,就會(huì)觸發(fā)一個(gè)中斷操作,微控制器會(huì)中斷當(dāng)前的操作,跳到UART中斷處理 函數(shù)中執(zhí)行相應(yīng)的操作。
[0004] 微控制器處理UART的中斷操作如圖1所示,而現(xiàn)有技術(shù)的UART中斷處理函數(shù)對(duì) UART數(shù)據(jù)進(jìn)行接收和解析的方法如圖2所示。
[0005] 現(xiàn)有技術(shù)中,若UART模塊的緩存接收到了一個(gè)字節(jié)的數(shù)據(jù),微控制器會(huì)進(jìn)入U(xiǎn)ART 中斷處理函數(shù),并接收該數(shù)據(jù)至內(nèi)存,然后對(duì)該數(shù)據(jù)進(jìn)行解析,解析完畢后退出UART中斷處 理函數(shù),如此循環(huán)。
[0006] 現(xiàn)有技術(shù)的UART中斷處理函數(shù)對(duì)UART數(shù)據(jù)進(jìn)行接收和解析的方法存在的問題是:
[0007] -、微控制器的工作負(fù)荷大;由于微控制器要不斷的進(jìn)出中斷來完成UART數(shù)據(jù)的 接收和解析工作,這就使的微控制器要不斷的中斷當(dāng)前操作、保持中斷現(xiàn)場(chǎng)、執(zhí)行中斷處 理函數(shù)、然后退出中斷、恢復(fù)中斷現(xiàn)場(chǎng),這就使得微控制器的工作負(fù)荷非常的大。
[0008] 二、對(duì)微控制器當(dāng)前進(jìn)行的操作造成不利影響;微控制器在處理中斷的時(shí)候需要 中斷當(dāng)前的操作,頻繁的進(jìn)出中斷將影響到其它的操作,甚至造成某些操作的失敗。例如當(dāng) 某器件對(duì)操作時(shí)序要求非常嚴(yán)格的時(shí)候,如果在對(duì)此器件操作的過程,頻繁的進(jìn)出UART中 斷處理,將會(huì)使對(duì)此器件的操作失敗,嚴(yán)重情況下可能會(huì)造成整個(gè)程序的崩潰。
[0009] 三、降低了軟件的運(yùn)行速度和運(yùn)行效率;微控制器頻繁的進(jìn)出UART中斷,整體上降 低了軟件的運(yùn)行速度和運(yùn)行效率,因?yàn)槲⒖刂破鞯囊徊糠值墓ぷ飨牡搅吮4嬷袛喱F(xiàn)場(chǎng)、 恢復(fù)中斷現(xiàn)場(chǎng)上。
[0010] 四、可能使數(shù)據(jù)的丟失,降低了數(shù)據(jù)接收的正確性;由于數(shù)據(jù)接收后還要在UART中 斷處理函數(shù)中進(jìn)行解析,這就很可能導(dǎo)致不能及時(shí)的退出該函數(shù),進(jìn)入U(xiǎn)ART中斷處理函數(shù) 后,如果不能及時(shí)的退出該函數(shù),將會(huì)造成UART模塊新接收的數(shù)據(jù)還沒來得及被讀取,就被 后面的數(shù)據(jù)所覆蓋,UART的數(shù)據(jù)接收緩存的大小是一定的(一般為一個(gè)字節(jié)),當(dāng)已經(jīng)有數(shù) 據(jù)存儲(chǔ)到了緩存中,下次有數(shù)據(jù)到來的時(shí)候,UART模塊不管當(dāng)前緩存中有沒有數(shù)據(jù),會(huì)直接 將新數(shù)據(jù)放到UART緩存中,覆蓋當(dāng)前數(shù)據(jù),從而造成數(shù)據(jù)的丟失。
【發(fā)明內(nèi)容】
[0011] 本發(fā)明提供一種對(duì)UART數(shù)據(jù)進(jìn)行接收和解析的方法以及裝置,該方法降低了微控 制器的工作負(fù)荷,不會(huì)對(duì)微控制器當(dāng)前進(jìn)行的操作造成不利影響,提高了軟件的運(yùn)行速度 和運(yùn)行效率,提高了數(shù)據(jù)接收和解析的正確性,降低了系統(tǒng)的功耗。
[0012] 為解決上述技術(shù)問題,本發(fā)明提供技術(shù)方案如下:
[0013] -種對(duì)UART數(shù)據(jù)進(jìn)行接收和解析的方法,包括:
[0014] 當(dāng)檢測(cè)到UART中斷標(biāo)記時(shí),進(jìn)入U(xiǎn)ART中斷處理函數(shù);
[0015] 將UART緩存中的數(shù)據(jù)保存到內(nèi)存中;
[0016] 清除UART中斷標(biāo)記;
[0017]判斷是否檢測(cè)到UART中斷標(biāo)記,若是,轉(zhuǎn)至所述將UART緩存中的數(shù)據(jù)保存到內(nèi)存 中,否則,執(zhí)行下一步驟;
[0018] 退出UART中斷處理函數(shù);
[0019] 當(dāng)內(nèi)存中的數(shù)據(jù)有更新時(shí),對(duì)內(nèi)存中的數(shù)據(jù)進(jìn)行解析。
[0020] -種對(duì)UART數(shù)據(jù)進(jìn)行接收和解析的裝置,包括:
[0021 ] 開始模塊,用于當(dāng)檢測(cè)到UART中斷標(biāo)記時(shí),進(jìn)入U(xiǎn)ART中斷處理函數(shù);
[0022]接收模塊,用于將UART緩存中的數(shù)據(jù)保存到內(nèi)存中;
[0023]清除模塊,用于清除UART中斷標(biāo)記;
[0024]第一判斷模塊,用于判斷是否檢測(cè)到UART中斷標(biāo)記,若是,轉(zhuǎn)至所述接收模塊,否 貝1J,執(zhí)行下一模塊;
[0025] 退出模塊,用于退出UART中斷處理函數(shù);
[0026] 解析模塊,用于當(dāng)內(nèi)存中的數(shù)據(jù)有更新時(shí),對(duì)內(nèi)存中的數(shù)據(jù)進(jìn)行解析。
[0027]本發(fā)明具有以下有益效果:
[0028]與現(xiàn)有技術(shù)相比,本發(fā)明的對(duì)UART數(shù)據(jù)進(jìn)行接收和解析的方法中,在進(jìn)入U(xiǎn)ART中 斷處理函數(shù)后,開始讀取UART緩存中的數(shù)據(jù)到內(nèi)存中,接收完成后,并不立刻退出,而是重 新檢測(cè)UART端口是否接收到了新的數(shù)據(jù),如果接收到的話,繼續(xù)讀取UART緩存中的數(shù)據(jù)到 內(nèi)存中,直至數(shù)據(jù)接收完成。
[0029]本發(fā)明的對(duì)UART數(shù)據(jù)進(jìn)行接收和解析的方法降低了微控制器的工作負(fù)荷。本發(fā)明 只需進(jìn)入U(xiǎn)ART中斷一次,就能完成UART數(shù)據(jù)的接收,微控制器不需要不斷的中斷當(dāng)前操作、 保持中斷現(xiàn)場(chǎng)、執(zhí)行中斷處理函數(shù)、然后退出中斷、恢復(fù)中斷現(xiàn)場(chǎng)的過程,這就降低了微控 制器的工作負(fù)荷。
[0030] 本發(fā)明的對(duì)UART數(shù)據(jù)進(jìn)行接收和解析的方法不會(huì)對(duì)微控制器當(dāng)前進(jìn)行的操作造 成不利影響。由于本發(fā)明的方法在接收UART數(shù)據(jù)的時(shí)候,一次中斷即可完成,不用頻繁的進(jìn) 出中斷從而影響到其它的操作,不會(huì)對(duì)整體程序的正常執(zhí)行造成影響。
[0031] 本發(fā)明的對(duì)UART數(shù)據(jù)進(jìn)行接收和解析的方法提高了軟件的運(yùn)行速度和運(yùn)行效率。 微控制器不用頻繁的進(jìn)出UART中斷,不用將資源消耗到了保存中斷現(xiàn)場(chǎng)、恢復(fù)中斷現(xiàn)場(chǎng)上, 減少了微控制器的一些無謂的工作開銷,大大提高了微控制器的使用效率,從而大大提高 了整體代碼的執(zhí)行速度和執(zhí)行效率,提高了軟件的運(yùn)行速度和運(yùn)行效率。
[0032]本發(fā)明的對(duì)UART數(shù)據(jù)進(jìn)行接收和解析的方法提高了數(shù)據(jù)接收的正確性。本發(fā)明在 進(jìn)入U(xiǎn)ART中斷后,在中斷函數(shù)內(nèi)循環(huán)接收UART數(shù)據(jù),直至UART數(shù)據(jù)接收完成,從而提高了 UART數(shù)據(jù)接收的準(zhǔn)確性。不會(huì)出現(xiàn)現(xiàn)有技術(shù)中的如下現(xiàn)象:如果一次中斷發(fā)生后,UART緩存 中的數(shù)據(jù)被讀取后,而此時(shí)微控制器還沒有來的及退出UART中斷處理函數(shù)時(shí)候,又有新數(shù) 據(jù)被UART接口接收的話,此時(shí)將會(huì)造成這部分?jǐn)?shù)據(jù)的丟失。
[0033] 而且本發(fā)明中數(shù)據(jù)的接收是在UART中斷處理函數(shù)中完成,把現(xiàn)有技術(shù)中在UART中 斷處理函數(shù)中完成的解析工作放到主程序中完成,兩者互不影響,提高了接收和解析的正 確性;并且使得UART中斷處理函數(shù)在接收數(shù)據(jù)后不用完成其他的工作,進(jìn)一步減少了來不 及退出UART中斷處理函數(shù)而造成數(shù)據(jù)丟失的情況,進(jìn)一步提高了數(shù)據(jù)接收的正確性。
[0034]另外,發(fā)明人還發(fā)現(xiàn),本發(fā)明的對(duì)UART數(shù)據(jù)進(jìn)行接收和解析的方法降低了系統(tǒng)的 功耗。頻繁的進(jìn)出UART中斷,將會(huì)使微控制器的工作負(fù)荷非常的大,從而使系統(tǒng)的功耗也非 常的高。而通過本發(fā)明中的方法,降低了微控制器的工作負(fù)荷,從而在一定程度上降低了系 統(tǒng)的功耗。
[0035]故本發(fā)明的對(duì)UART數(shù)據(jù)進(jìn)行接收和解析的方法降低了微控制器的工作負(fù)荷,不會(huì) 對(duì)微控制器當(dāng)前進(jìn)行的操作造成不利影響,提高了軟件的運(yùn)行速度和運(yùn)行效率,提高了數(shù) 據(jù)接收和解析的正確性,降低了系統(tǒng)的功耗。
【附圖說明】
[0036]圖1為現(xiàn)有技術(shù)中微控制器處理UART時(shí)的中斷操作流程圖;
[0037]圖2為現(xiàn)有技術(shù)的UART中斷處理函數(shù)流程圖;
[0038]圖3為UART的數(shù)據(jù)傳輸格式示意圖;
[0039] 圖4為本發(fā)明的對(duì)UART數(shù)據(jù)進(jìn)行接收和解析的方法的一個(gè)實(shí)施例的流程圖;
[0040] 圖5為本發(fā)明的對(duì)UART數(shù)據(jù)進(jìn)行接收和解析的裝置的一個(gè)實(shí)施例的流程圖。
【具體實(shí)施方式】
[0041] 為使本發(fā)明要解決的技術(shù)問題、技術(shù)方案和優(yōu)點(diǎn)更加清楚,下面將結(jié)合附圖及具 體實(shí)施例進(jìn)行詳細(xì)描述。
[0042] UART(Universal Asynchronous Receiver and Transmitter)通用異步收發(fā)器 (異步串行通信口),是一種通用的數(shù)據(jù)通信協(xié)議。UART使用的是異步,串行通信。
[0043] 串行通信是指利用一條傳輸線將資料一位一位地順序傳送。特點(diǎn)是通信線路簡 單,利用簡單的線纜就可實(shí)現(xiàn)通信,降低成本。適用于遠(yuǎn)距離通信,但傳輸速度慢的應(yīng)用場(chǎng) 合。
[0044] 一方面,本發(fā)明提供一種對(duì)UART數(shù)據(jù)進(jìn)行接收和解析的方法,其一個(gè)實(shí)施例如圖4 所示,包括:
[0045] 步驟101:當(dāng)檢測(cè)到UART中斷標(biāo)記時(shí),進(jìn)入U(xiǎn)ART中斷處理函數(shù);在主程序運(yùn)行后,若 檢測(cè)到UART中斷標(biāo)記時(shí),微控制器會(huì)執(zhí)行UART中斷處理函數(shù);具體流程如圖1所示。
[0046]步驟102:將UART緩存中的數(shù)據(jù)保存到內(nèi)存中;
[0047]此處的UART緩存指UART的輸入緩沖寄存器,UART在接收數(shù)據(jù)時(shí),會(huì)用到輸入移位 寄存器以及輸入緩沖寄存器,其中輸入移位寄存器以接收時(shí)鐘的速率把出現(xiàn)在串行數(shù)據(jù)輸 入線上的數(shù)據(jù)逐位移入,當(dāng)數(shù)據(jù)裝滿后,并行送往輸入緩沖寄存器,輸入緩沖寄存器從輸入 移位寄存器中接收并行數(shù)據(jù),然后由微控制器取走。
[0048]