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