文獻標(biāo)識碼: A
為了提高小型全自動生化分析儀的工作效率,其控制系統(tǒng)需采取并行處理的策略,以單個單片機為核心的單處理器因其功能的局限性,已不能完成多任務(wù)的并行處理。采用雙單片機的控制方案可以提高系統(tǒng)的性能,但必須為雙機通信提供穩(wěn)定可靠的方案。
在傳統(tǒng)的8位、16位及32位處理器中,一般都帶有UART串行口。傳統(tǒng)基于UART的數(shù)據(jù)通信有2種方式:查詢方式和中斷方式。查詢方式下CPU的負擔(dān)較重,浪費了處理器資源,不能夠及時處理其他事件[1];另外,因發(fā)送端與接收端不能同步,當(dāng)數(shù)據(jù)需要接收而接收端未及時響應(yīng)時,就導(dǎo)致數(shù)據(jù)的丟失,造成通信不可靠。中斷方式可以在接收到或者發(fā)送完數(shù)據(jù)時產(chǎn)生中斷,在中斷服務(wù)進程中完成數(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ù)是以字符為單位組成字符幀進行傳送的。發(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)譯碼器進行分配。“交叉開關(guān)”按優(yōu)先權(quán)順序?qū)⒍丝?~3的引腳分配給器件上的數(shù)字外設(shè)。C8051F060的UART串口與端口的連接有多種形式,靈活可靠。
2 傳輸層
傳輸層實現(xiàn)數(shù)據(jù)流的傳輸,并負責(zé)傳輸控制,具備流量控制的功能。其目的是為應(yīng)用層提供可靠無誤的數(shù)據(jù)傳輸。傳輸層的服務(wù)要經(jīng)歷傳輸連接建立階段和數(shù)據(jù)傳送階段[2]。該層由軟硬件結(jié)合實現(xiàn)。硬件實現(xià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)上電后,首先要進行的就是初始化,初始化包括系統(tǒng)時鐘初始化、EMIF初始化、定時器初始化、端口初始化以及交叉開關(guān)的配置等??梢酝ㄟ^設(shè)置相應(yīng)的特殊功能寄存器(SFR)來進行。由于篇幅所限,這里主要介紹關(guān)鍵初始化模塊:端口初始化與UART初始化。系統(tǒng)的初始化分為主機的初始化與從機的初始化部分。
2.3.1 端口初始化
端口初始化的關(guān)鍵是合理地分配C8051F060的數(shù)字外設(shè),使其依據(jù)硬件電路的設(shè)計,對交叉開關(guā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ù)和控制指令。為進一步保障數(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通信方案并進行了對比,其結(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í)行的問題,取得了令人滿意的效果。
參考文獻
[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),王宏遠,林靜宜,等.基于最佳接收的UART的設(shè)計與實現(xiàn)[J].電子技術(shù)應(yīng)用,2006,34(8).