文獻(xiàn)標(biāo)識碼: A
為了提高小型全自動生化分析儀的工作效率,其控制系統(tǒng)需采取并行處理的策略,,以單個單片機為核心的單處理器因其功能的局限性,,已不能完成多任務(wù)的并行處理。采用雙單片機的控制方案可以提高系統(tǒng)的性能,,但必須為雙機通信提供穩(wěn)定可靠的方案,。
在傳統(tǒng)的8位、16位及32位處理器中,,一般都帶有UART串行口,。傳統(tǒng)基于UART的數(shù)據(jù)通信有2種方式:查詢方式和中斷方式。查詢方式下CPU的負(fù)擔(dān)較重,,浪費了處理器資源,,不能夠及時處理其他事件[1];另外,因發(fā)送端與接收端不能同步,,當(dāng)數(shù)據(jù)需要接收而接收端未及時響應(yīng)時,,就導(dǎo)致數(shù)據(jù)的丟失,造成通信不可靠,。中斷方式可以在接收到或者發(fā)送完數(shù)據(jù)時產(chǎn)生中斷,,在中斷服務(wù)進(jìn)程中完成數(shù)據(jù)存儲與處理。由于中斷方式下CPU利用率較高,,也能夠?qū)崿F(xiàn)發(fā)送與接收的同步[1],,因此在CPU任務(wù)簡單的系統(tǒng)中,一般采用中斷方式實現(xiàn)UART數(shù)據(jù)通信,。但是小型全自動化生化分析儀控制系統(tǒng)需要實現(xiàn)多電機位置的閉環(huán)控制,、多傳感器的數(shù)據(jù)采集及處理,、病人資料的傳輸處理等任務(wù),采用中斷方式的UART通信時,,一方面帶來中斷的優(yōu)先級分配問題,,當(dāng)系統(tǒng)處于更高優(yōu)先級的中斷處理子程序中時,導(dǎo)致串行通信的中斷不能及時被響應(yīng),,造成數(shù)據(jù)丟失;另一方面為協(xié)調(diào)雙處理器間各部件的協(xié)同工作,,有時不允許程序的正常執(zhí)行流程被打斷,禁止中斷響應(yīng),。為了保證串口通信的可靠性與穩(wěn)定性,,在設(shè)計小型全自動生化分析儀的控制系統(tǒng)時,采用了基于3次等待握手協(xié)議的同步、可靠的UART通信,。本文將分別從物理層,、傳輸層與應(yīng)用層介紹等待握手協(xié)議在同步可靠的UART通信中的實現(xiàn)。
1 物理層
物理層實現(xiàn)通信底層的物理連接,,為數(shù)據(jù)端設(shè)備提供傳送數(shù)據(jù)的通路,其作用是確保比特流能在物理信道上傳輸[2],。物理層的連接由單片機的異步通信端口(UART串口)實現(xiàn),。
1.1 異步通信簡介[3-4]
在異步通信中,數(shù)據(jù)是以字符為單位組成字符幀進(jìn)行傳送的,。發(fā)送端與接收端分別按字符幀規(guī)定的格式和波特率來協(xié)調(diào)數(shù)據(jù)的發(fā)送和接收,。字符幀和波特率可以由用戶根據(jù)實際情況選擇。
字符幀由起始位,、數(shù)據(jù)位,、停止位和空閑位4部分組成,如圖1所示,。
1.2 C8051F060的UART
C8051F060 是SiLab公司推出的混合信號系統(tǒng)芯片,,是高度集成的片上系統(tǒng),具有高速指令處理能力[3],。C8051F060有2個UART口,,并沒有分配在固定的I/O端口上,而是需要通過優(yōu)先權(quán)交叉開關(guān)譯碼器進(jìn)行分配,。“交叉開關(guān)”按優(yōu)先權(quán)順序?qū)⒍丝?~3的引腳分配給器件上的數(shù)字外設(shè),。C8051F060的UART串口與端口的連接有多種形式,靈活可靠,。
2 傳輸層
傳輸層實現(xiàn)數(shù)據(jù)流的傳輸,,并負(fù)責(zé)傳輸控制,具備流量控制的功能,。其目的是為應(yīng)用層提供可靠無誤的數(shù)據(jù)傳輸,。傳輸層的服務(wù)要經(jīng)歷傳輸連接建立階段和數(shù)據(jù)傳送階段[2]。該層由軟硬件結(jié)合實現(xiàn)。硬件實現(xiàn)傳輸線路與控制線路的連接,,軟件對其進(jìn)行設(shè)置和控制,。
2.1 傳輸層的硬件電路設(shè)置
傳輸層的數(shù)據(jù)傳輸線路為物理層的UART串口,其傳輸連接的建立,、傳輸流量的控制則通過單片機的另外2個獨立I/O口,,用于實現(xiàn)3次等待握手協(xié)議。電路設(shè)計的原理為:發(fā)送端單片機UART口的TX0和RX0分別連接到接收端單片機的UART口的RX0和TX0,。在每1個單片機上分別使用2個I/O端口用于握手信號的發(fā)送和接收,。其電氣連接如圖2所示。
2.2 傳輸層的軟件設(shè)計原理
為實現(xiàn)數(shù)據(jù)通信的同步和提高通信的可靠性,,傳輸層采用3次等待握手協(xié)議實現(xiàn)數(shù)據(jù)的實時同步通信,。協(xié)議的原理如圖3所示。
協(xié)議的原理如下:
(1)當(dāng)發(fā)送端要發(fā)送數(shù)據(jù)時,,發(fā)出第1次握手信號,,通知接收端,第1次握手信號始終有效,,直到收到接收端對第1次握手信號的應(yīng)答信號,,即第2次握手信號。當(dāng)發(fā)送端接收到第2次握手信號后,,使第1次握手信號無效,,發(fā)出對第2次握手信號的應(yīng)答信號,即第3次握手信號,,并隨即發(fā)送數(shù)據(jù),。至此,3次握手協(xié)議完成,,發(fā)送端與接收端實現(xiàn)了數(shù)據(jù)的同步傳輸,。
(2)當(dāng)接收端要接收數(shù)據(jù)時,首先等待發(fā)送端發(fā)出的第1次握手信號,,當(dāng)發(fā)送端發(fā)送第1次握手信號后,,表明發(fā)送端已經(jīng)準(zhǔn)備好要發(fā)送數(shù)據(jù),接收端將第2次握手信號持續(xù)一段時間后清除,,等待第3次握手信號,。檢測到第3次握手信號后,隨即開始接收數(shù)據(jù),。至此,,3次握手協(xié)議完成,發(fā)送端與接收端實現(xiàn)了數(shù)據(jù)的同步傳輸,。
2.3 傳輸層的軟件實現(xiàn)
傳輸層的軟件與硬件電路密切相關(guān),,傳輸層的軟件質(zhì)量的好壞決定了最終應(yīng)用層軟件的質(zhì)量,。在傳輸層的軟件實現(xiàn)中,與硬件相關(guān)的系統(tǒng)初始化尤為重要。系統(tǒng)上電后,,首先要進(jìn)行的就是初始化,,初始化包括系統(tǒng)時鐘初始化、EMIF初始化,、定時器初始化,、端口初始化以及交叉開關(guān)的配置等??梢酝ㄟ^設(shè)置相應(yīng)的特殊功能寄存器(SFR)來進(jìn)行,。由于篇幅所限,這里主要介紹關(guān)鍵初始化模塊:端口初始化與UART初始化,。系統(tǒng)的初始化分為主機的初始化與從機的初始化部分,。
2.3.1 端口初始化
端口初始化的關(guān)鍵是合理地分配C8051F060的數(shù)字外設(shè),使其依據(jù)硬件電路的設(shè)計,,對交叉開關(guān)進(jìn)行配置,,并設(shè)置相應(yīng)的端口輸入輸出類型。主機端口初始化中交叉開關(guān)配置部分的程序如下:
void MasterPORTInit (void)
{
OldSFRPAGE = SFRPAGE;
SFRPAGE = CONFIG_PAGE; //切換頁面地址
XBR0 = 0x02; //SPI0連接到端口
//腳P0.0~P0.3
XBR1 = 0x00;
XBR2 = 0x44; //弱上拉全局禁止,,交叉
//開關(guān)使能,, UART連接到P0.4~P0.5
SFRPAGE = OldSFRPAGE; //恢復(fù)頁面地址 }
從機的端口初始化與主機的端口初始化原理相同,這里不再累述,。
2.3.2 UART初始化
UART初始化主要包括時鐘源的選擇、工作方式的選擇,,邏輯電平的選擇及處理中斷的方式等,,其中主機的UART初始化程序如下:
void MasterUARTInit(void)
{
OldSFRPAGE = SFRPAGE;
SFRPAGE = UART_PAGE; //切換頁面地址
SCON1 = 0x40; //波特率可編程的8位UART,
//停止位的邏輯電平被忽略,
//禁止接收,,清空發(fā)送及接收中斷標(biāo)志
SFRPAGE = OldSFRPAGE; //恢復(fù)頁面地址
}
傳輸層數(shù)據(jù)傳輸軟件實現(xiàn)元數(shù)據(jù)傳輸?shù)墓δ?,在這里實現(xiàn)傳輸層的3次握手協(xié)議。依據(jù)3次握手協(xié)議的設(shè)計原理,,主機發(fā)送軟件的實現(xiàn)如下:
{
while(P0_6==1) //等待第2次握手信號
P0_7=0; //發(fā)出第1次握手信號
Delay1us(1); //延時1 ?滋s
P0_7=1; //發(fā)送第3次握手信號
}
工作時序為:當(dāng)主機需要發(fā)送數(shù)據(jù)時,,首先將P0_7設(shè)置為低,即為第1次握手信號,,從機檢測到該信號后,,知道主機將發(fā)送數(shù)據(jù),于是發(fā)出第2次握手信號,,將與主機P0_6相連的引腳置低,。主機檢測到P0_6為低電平,即第2次握手信號后,,將發(fā)出第3次握手信號,,即把P0_7設(shè)置為高電平,,并隨即發(fā)送數(shù)據(jù)。
從機接收數(shù)據(jù)時的軟件實現(xiàn)如下:
{
while(P5_5==1) //等待的第1次握手信號
P5_4=1;
P5_4=0; //發(fā)出第2次握手信號
Delay1us(1);
P5_4=1;
}
從機的P5_4,、P5_5分別連接主機的P0_6,、P0_7。當(dāng)從機接收數(shù)據(jù)時,,首先等待主機發(fā)送的第1次握手信號,,即主機的P0_7端口(從機的P5_5端口)為低電平。若檢測到第1次握手信號,,則發(fā)送第2次握手信號(即將P5_4置低),,隨即將P5_4拉高,檢測到第3次握手信號后開始接收數(shù)據(jù),。為實現(xiàn)軟件的簡便性,,減少編程出錯的概率,本文定義了2個宏來完成上述握手的過程,。宏定義如下:
#define Send while(P0_6==1)P0_7=0;
\Delay1us(1); P0_7=1; //主機發(fā)送的宏定義
#define Receive OldSFRPAGE=SFRPAGE;
\SFRPAGE=CONFIG_PAGE;while(P5_5==1)P5_4=1;
\P5_4=0;Delay1us(1);P5_4=1;
\SFRPAGE=OldSFRPAGE; //從機接收的宏定義
主機發(fā)送與從機接收元數(shù)據(jù)的函數(shù)分別如下:
void MasterSendUART (Uchar sdata)
{
Send; //完成握手協(xié)議
OldSFRPAGE = SFRPAGE; //寄存器頁面切換
SFRPAGE = UART_PAGE;
TI1 = 0; //清除發(fā)送完成中斷標(biāo)志
SBUF1 = sdata; //發(fā)送數(shù)據(jù)
while(TI1==0); //等待發(fā)送完成
TI1 = 0; //清空發(fā)送完成標(biāo)志
SFRPAGE = OldSFRPAGE; }
Uchar SlaverReceiveUART(void)
{
Receive; //完成握手協(xié)議
OldSFRPAGE = SFRPAGE;
SFRPAGE = UART_PAGE; //寄存器頁面切換
SCON1 = 0x50; //允許接收,,清空接收完標(biāo)志
while((SCON1&0x01)==0); //等待接收完成
ReData = SBUF1; //接收數(shù)據(jù)
SCON1 = 0x40; //清空接收及發(fā)送完成標(biāo)志位
SFRPAGE = OldSFRPAGE;
return ReData; //返回接收到的數(shù)據(jù)
}
3 應(yīng)用層
應(yīng)用層軟件主要為實際應(yīng)用服務(wù),實現(xiàn)系統(tǒng)的應(yīng)用需求,。本文所設(shè)計的通信方案是為小型全自動化的生化分析儀控制系統(tǒng)的數(shù)據(jù)通信服務(wù)的,,應(yīng)用程序包括生化檢測結(jié)束后病人檢測結(jié)果的交互,以及雙機對各功能器件的控制指令等,,下面簡要介紹應(yīng)用層軟件的流程,。
應(yīng)用層軟件完成數(shù)據(jù)的發(fā)送和接收,應(yīng)用層數(shù)據(jù)接收軟件將實現(xiàn)數(shù)據(jù)的完整接收與存儲,發(fā)送軟件完成完整的數(shù)據(jù)發(fā)送,。小型全自動生化分析儀控制系統(tǒng)的通信內(nèi)容有結(jié)果數(shù)據(jù)和控制指令,。為進(jìn)一步保障數(shù)據(jù)傳輸?shù)目煽啃耘c同步性,在應(yīng)用層的數(shù)據(jù)傳輸中加入了同步數(shù)據(jù),。應(yīng)用層函數(shù)完成有關(guān)數(shù)據(jù)接收的處理,,首先判斷接收到的數(shù)據(jù)類型,并依次調(diào)用相應(yīng)的軟件處理模塊來對接收后數(shù)據(jù)的存儲,。圖4為應(yīng)用層的接收端軟件的執(zhí)行流程,。
4 結(jié)果
本文在小型全自動生化分析儀控制系統(tǒng)的通信中分別使用基于3次等待握手協(xié)議的UART通信與基于查詢式的UART通信方案并進(jìn)行了對比,其結(jié)果如表1所示,。當(dāng)系統(tǒng)使用基于查詢式的UART通信時,,因雙處理器未能同步工作,導(dǎo)致了接收端未能及時查詢及存儲數(shù)據(jù),,造成了數(shù)據(jù)的丟失,。而通信建立時的等待握手協(xié)議則提高了通信的穩(wěn)定性與可靠性。
本文提出的基于3次等待握手協(xié)議的UART傳輸通信同步可靠,,應(yīng)用于小型全自動生化分析儀的控制系統(tǒng)通信時,,解決了查詢方式下UART因接收與發(fā)送端未同步造成數(shù)據(jù)幀丟失及中斷方式打斷正常程序流程執(zhí)行的問題,,取得了令人滿意的效果。
參考文獻(xiàn)
[1] 楊福廣,,李貽斌,,尹占芳,等.ARM中基于DMA的高效UART通信及其應(yīng)用[J]. 微計算機信息,2008(1-2).
[2] TANENBAUM A S. AMSTERDAM U V. The netherlands computer networks,forth editI/On[M].北京:清華大學(xué)出版社,,2004.
[3] 新華龍電子有限公司.C8051F060混合信號ISP FLASH微控制器數(shù)據(jù)手冊.潘琢金,譯. 2004.
[4] 王曉劍,,潘順良,沈為群,,等. TMS320DM642中利用McBSP與EDMA實現(xiàn)UART[J]. 電子測量技術(shù) 2008(2).
[5] Cygnal Integrated Products. Inc. C8051F單片機應(yīng)用解析[M].潘琢金,譯.北京:北京航空航天大學(xué)出版社,, 2002.
[6] 何建標(biāo),王宏遠(yuǎn),,林靜宜,,等.基于最佳接收的UART的設(shè)計與實現(xiàn)[J].電子技術(shù)應(yīng)用,2006,34(8).