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