文獻標識碼: A
文章編號: 0258-7998(2012)09-0096-04
在嵌入式系統(tǒng)中,串行接口設備憑借其控制靈活、接口簡單、占用系統(tǒng)資源少等優(yōu)點而得到廣泛應用。以單片機為核心的嵌入式系統(tǒng),單片機常需要連接多個串行外設,如上位計算機、串口LCD、外部傳感器等。通常單片機只提供一到兩個異步串行通信接口(UART)。因此,為了實現(xiàn)多串口通信,必須對其串行口進行擴展。
常見的串口擴展方法有軟件模擬法和硬件擴展法。軟件模擬法通過兩個通用I/O引腳、兩個定時器和一個外部中斷用軟件模擬UART的發(fā)送/接收功能,成本低,易于實現(xiàn),但占用資源多, 誤碼率高, 不適用于高速傳輸[1]。硬件擴展法主要有三種方式: (1)基于普通I/O口的串口擴展,如采用16C554芯片,其占用資源多,價格較貴; (2)基于USB的多串口擴展,如專用USB/串口轉換器,可擴展最多16路串口,性能可靠,但體積大,且價格隨串口數(shù)增加顯著提高;(3)基于SPI口的串口擴展。
本文采用GM814X串口擴展接口芯片通過單片機的增強型串行外設接口(SPI)實現(xiàn)多串口擴展。GM814X控制芯片在有限的資源下,可以增加擴展串口的數(shù)量并且性價比較高,運行可靠穩(wěn)定,便于嵌入式系統(tǒng)使用。該方法成功應用于某RS-485通信終端開發(fā)。此通信終端與實際設備對接,工作穩(wěn)定,設置靈活,滿足RS-485總線高速通信要求。
1 基于GM814X的串口擴展
GM814X是專用低功耗串行口擴展芯片,該芯片主要是為了解決單片機等MCU自身的UART串口有限、不能與多個基于UART通信的外圍智能模塊及器件通信等問題而推出的。它可將現(xiàn)有單片機的單串口或雙串口擴展成2個(GM8141)或4個(GM8142)標準的UART,并具備兩種工作模式:串口擴展模式和廣播模式。串口擴展模式下,各子串口可獨立設置波特率、幀長和校驗方式,并同時與SPI接口進行數(shù)據(jù)收發(fā)[2]。
1.1 SPI接口及時序
增強型串行外設接口(SPI)提供訪問一個全雙工同步串行總線的能力,可以使用3線或4線方式,并可在同一總線上支持多個主器件和從器件[3]。GM814X芯片是基于SPI接口實現(xiàn)的,因此SPI的時序對串口功能的使用尤為重要,時序圖如圖1所示。由于SPI時序較為簡單,利用GM8141擴展串口時MCU選擇比較靈活,可選用帶SPI口的MCU(如C8051F340)實現(xiàn),也可用通用I/O口通過軟件模擬SPI實現(xiàn)。
SPI 上的數(shù)據(jù)為16位,其中高8位為子串口地址及附加命令和狀態(tài)信息,低8位為實際收發(fā)數(shù)據(jù)。數(shù)據(jù)接收以時鐘上升沿為采樣標志,數(shù)據(jù)發(fā)送以時鐘下降沿為移位標志。16 bit的數(shù)據(jù)收發(fā)從CS為低時有效,當CS拉高后,結束數(shù)據(jù)的收發(fā),并對數(shù)據(jù)進行判斷和有效性分析。
1.2 GM814X芯片
GM814X是一款兼容SPI總線的UART擴展芯片,其工作模式、各子串口的波特率、數(shù)據(jù)幀長等參數(shù)可通過向功能設置寄存器寫入控制字進行靈活設置,I/O口占用率低。通過寫功能設置寄存器的波特率分頻標志位,各子串口可在母串口波特率基礎上分頻同時工作。其主要指標為:晶振頻率為3.686 4 MHz 時, 波特率范圍為600 b/s~230.4 kb/s,輸出波特率誤差小于0.1%,輸入波特率誤差允許小于3.4%。以GM8141芯片為例,其引腳功能如圖2所示。
SHDN為軟件shutdown控制標志位,0為正常工作模式,1為低功耗掉電模式。掉電模式下,GM814X自動清除中斷寄存器的內容,但保留功能寄存器內的數(shù)據(jù)。當多個GM814X芯片掛在SPI總線上時,外部MCU可通過CS引腳選擇與其中某個GM814X通信時的控制,以此實現(xiàn)芯片的并聯(lián)工作。
2 應用設計
2.1 RS-485通信終端
RS-485串行接口采用差分傳輸方式,半雙工方式通信,抗共模干擾能力強,并可聯(lián)網構成分布式系統(tǒng),在要求精度高的實際工業(yè)儀器中應用廣泛[4]。
本文設計的RS-485通信終端作為一個獨立的多路RS-485總線接口設備,具有多路RS-485信號的數(shù)據(jù)采集、發(fā)送及數(shù)據(jù)處理功能。通過外接LCD顯示屏及矩陣鍵盤提供獨立的人際交互手段。此外,該終端還可與PC機構成上、下位機系統(tǒng),實現(xiàn)更為復雜的功能。其硬件組成如圖3所示。
根據(jù)設備配置,該通信終端需要4個串口:C8051F340自帶的UART0用于與串口LCD屏通信,與矩陣鍵盤配合,實現(xiàn)參數(shù)顯示和人機交互;自帶的UART1用于上位機進行RS-232通信,用于接收其指令或數(shù)據(jù)信息;擴展的兩個串口用于與RS-485外設進行RS-485總線通信。
2.2 電路設計
選用C8051F340作為主控MCU,C8051F340具有豐富的數(shù)字外設如UART、SPI、SMBus/I2C、USB等資源,在工程中得到廣泛應用。通過GM8141實現(xiàn)串口擴展,一片MAX232實現(xiàn)兩路單片機TTL電平與RS-232C電平的雙向轉換,兩片MAX485實現(xiàn)GM8141的TTL電平與RS-485電平的雙向轉換。電路圖見圖4。
GM8141與單片機采用SPI口的3線單主方式和3線單從方式連接,SPI時鐘為250 kHz。IRQ引腳外接30 k?贅上拉電阻。當FIFO 接收到數(shù)據(jù)后置位R,并產生IRQ 中斷,該IRQ 中斷連接C8051340的P0.3管腳,當單片機響應,且對GM814X 進行了收(發(fā))數(shù)據(jù)操作后,該中斷即被清除;若接收FIFO 內還有數(shù)據(jù),則繼續(xù)重復產生新的IRQ中斷和置位R,直到FIFO 內的數(shù)據(jù)被讀取完;片選信號CS連接單片機的P1.6管腳,控制SPI時鐘的有效性。
MAX485的發(fā)送/接收轉換器由使能端RE和DE控制。當RE和DE都為0時, MAX485處于接收狀態(tài);RE和DE都為1時,MAX485處于發(fā)送狀態(tài)。用于遠距離傳輸時,應在A+和B-輸出端并接匹配電阻。
2.3 軟件設計
單片機采用C51語言編程,在Keil uVision3集成開發(fā)環(huán)境下調試。
使用GM8141進行擴展串口通信之前,首先進行初始化。SPI的初始化需設置工作方式和時鐘頻率。GM8141的初始化需要設置工作模式,字串口的波特率和數(shù)據(jù)幀長等,通過向配置寄存器中寫入相應的控制字實現(xiàn)。
終端對于RS-485外設的通信主要是接收和發(fā)送數(shù)據(jù)程序,應嚴格按照圖3中的SPI接口時序圖進行設計。
以下為部分程序代碼,串口擴展通信時僅給出RS-485通道1的發(fā)送接收程序,通道2類似,多串口通信初始化程序流程如圖5所示。
(1)初始化:
void SPI0_Init()
功能:對SPI進行初始化
{
SPI0CFG=0x40; //設置工作方式、3線模式
SPI0CN=0x01; //使能SPI
SPI0CKR=23; //SPI0時鐘為250 kHz
}
void Init_System()
功能:對GM8141進行初始化
{
uint temp=0;
while(cnt0<240); //等待LCD初始化
W_8141Config(1,1,11);
//串口1、發(fā)送中斷屏蔽、波特率57 600
temp=Read8141Config(1); //讀取配置返回結果
EX0=1;
//開外部中斷(允許接收485信號)
}
調用函數(shù)說明:
①void W_8141Config(uchar n, uchar high, uchar low)
功能:配置GM8141指定串口、波特率,屏蔽設置等
參數(shù):n為串口號;high為配置寄存器的高位字節(jié)(低三位有效),low為低位字節(jié)。
②uint Read8141Config(uchar n)
功能:讀GM8141配置后的狀態(tài)
(2) GM8141發(fā)送函數(shù):
uint WR_8141(uchar W_com, uchar W_dat)
參數(shù):W_com是對要發(fā)送的數(shù)據(jù)配置、W_dat是發(fā)送數(shù)據(jù),W_dat與W_com的發(fā)送程序一樣
{
uint R_state,R_dat; uint Receive;
CS=0; //GM8141有效
Delay(20);
//SPI時序要求時間:CS低電平到第一次
SCLK的延遲時間Tcss SPI0DAT=W_com;
//向SPI0數(shù)據(jù)寄存器中寫入配置信息
while(!SPIF); //等待SPI發(fā)送數(shù)據(jù)結束
SPIF=0; //清SPI數(shù)據(jù)結束中斷標志位
Delay(80); //SPI時序要求延遲時間
R_state=SPI0DAT; //讀取GM8141接收值
……
}
(3) GM8141接收函數(shù):
uint ReadFIFOData(void)
{
uint Receive;
Receive=WR_8141(0x00,0x00);
//GM8141單獨數(shù)據(jù)接收模式
return Receive; //讀出接收FIFO數(shù)據(jù)
}
C8051F340需要處理多種外設信息,應合理安排單片機的中斷優(yōu)先級。本電路中,優(yōu)先考慮RS-485外設的高速通信,設置為高優(yōu)先級,并采用外部中斷0方式接收RS-485數(shù)據(jù)。當GM8141接收數(shù)據(jù)時,接收中斷中應首先接收完整數(shù)據(jù),然后判斷子串口的數(shù)據(jù)地址信息;發(fā)送數(shù)據(jù)時所發(fā)送的數(shù)據(jù)幀應該包含其到達的子串口地址,這樣才能實現(xiàn)正確接收。
在實驗室條件下進行前期調試開發(fā)時,通過RS-232與RS-485轉換器實現(xiàn)PC機模擬實際裝備的RS-485信號進行通信,各串口測試運行良好;后期實裝對接時,與RS-485外設通信穩(wěn)定可靠,可實現(xiàn)多路RS-485信號的通信,實時性和可靠性均能達到要求。實踐表明,通過GM814X擴展串口可以很好地解決串行通信系統(tǒng)的串口局限問題。隨著單片機的廣泛應用,此類擴展串口方法在解決同類問題中具有一定的使用參考價值。
參考文獻
[1] 張毅坤.單片微型計算機原理及應用[M].西安:西安電子科技大學出版社,2006.
[2] 成都國騰微電子. GM8141/2數(shù)據(jù)手冊[M]. 2006.
[3] 潘琢金.C8051Fxxx高速SOC單片機原理及[M]. 北京:北京航空航天大學出版社,2002.
[4] 劉小芳.單片機的多串口擴展技術的設計[J]. 計算機測量與控制,2004,12(11):1088-1090.