孫 靜
(中國(guó)電子科技集團(tuán)公司第四十七研究所,沈陽110032)
C8051F系列微控制器UART電路設(shè)計(jì)
孫 靜
(中國(guó)電子科技集團(tuán)公司第四十七研究所,沈陽110032)
介紹C8051F系列UART的功能結(jié)構(gòu)和傳輸數(shù)據(jù)幀的格式,通過其操作模式和兩種典型的通信方式,詳細(xì)分析UART內(nèi)部特殊功能寄存器的功能和使用方法,闡述發(fā)送部分和接收部分電路設(shè)計(jì)過程,通過特定程序?qū)?nèi)部特殊功能寄存器的標(biāo)志位,發(fā)送、接收端口時(shí)序以及多機(jī)通信過程進(jìn)行仿真,并給出仿真波形圖。
C8051F系列;異步串行接口;特殊功能寄存器;多機(jī)通信;仿真波形;仿真程序
UART由于操作簡(jiǎn)單,信號(hào)線少,抗干擾強(qiáng),傳輸距離較遠(yuǎn)等優(yōu)點(diǎn)被廣泛地應(yīng)用在工業(yè)、通信和家電控制等嵌入式領(lǐng)域。目前人們對(duì)UART的認(rèn)識(shí)僅僅是各種手冊(cè)的文字描述,通過在線調(diào)試和示波器監(jiān)測(cè)等手段亦不能顯示傳輸過程中每個(gè)時(shí)刻內(nèi)部寄存器的變化情況。如果在數(shù)據(jù)傳輸?shù)耐瑫r(shí)能觀察到內(nèi)部寄存器的變化就能解決上述問題,這樣有利于編程人員更深入的了解UART的工作原理,因此從集成電路設(shè)計(jì)出發(fā),重點(diǎn)從UART的內(nèi)部介紹其電路工作原理及時(shí)序的產(chǎn)生。
UART包括六個(gè)特殊功能寄存器。串行口波特率控制寄存器SBCON0、波特率分頻系數(shù)寄存器SBRLH0、SBRLL0,三個(gè)寄存器用于設(shè)定系統(tǒng)通訊波特率。串行口控制寄存器SCON0和串行口模式選擇寄存器SMOD0用于設(shè)置通訊數(shù)據(jù)位數(shù),如校驗(yàn)位、停止位等。SBUF0是用一個(gè)地址訪問兩個(gè)不同的寄存器,一個(gè)用于只讀,另外一個(gè)用于只寫。如C程序中,x=SBUF0,則讀取接收緩沖寄存器;SBUF0=0x55,則是寫發(fā)送寄存器[1-3]。
串行口控制寄存器(SCON0)的每一位定義如下:
SCON0.7接收FIFO溢出標(biāo)志,符號(hào)為OVR0。0:沒有溢出,1:有溢出。
SCON0.6奇偶錯(cuò)誤標(biāo)志,符號(hào)為PERR0。0:沒有錯(cuò)誤,1:有錯(cuò)誤。
SCON0.5發(fā)送保持寄存器空標(biāo)志,符號(hào)為THRE0。0:標(biāo)志非空,1:標(biāo)志空。
SCON0.4接收使能,符號(hào)為REN0。0:禁止接收,1:允許接收。
SCON0.3發(fā)送附加位,符號(hào)為TBX0。
SCON0.2接收附加位,符號(hào)為RBX0。
SCON0.1發(fā)送中斷標(biāo)志,符號(hào)為TI0。0:沒有發(fā)送中斷,1:有發(fā)送中斷。
SCON0.0接收中斷標(biāo)志,符號(hào)為RI0。0:沒有接收中斷,1:有接收中斷。
串行口模式寄存器(SMOD0)的每一位定義如下:
SMOD0.7多機(jī)通信使能,符號(hào)為MEC0。0:stop位為1時(shí)接收,1:stop和extra位都為1時(shí)接收。
SMOD0.6,SMOD0.5校驗(yàn)類型選擇,符號(hào)為S0PT[1:0]。00:奇校驗(yàn),01:偶校驗(yàn),10:標(biāo)記校驗(yàn),11:空格校驗(yàn)。
SMOD0.4校驗(yàn)使能,符號(hào)為PE0。0:不使能,1:使能。
SMOD0.3,SMOD0.2數(shù)據(jù)長(zhǎng)度選擇,符號(hào)為S0DL[1:0]。00:5 位,01:6 位,10:7 位,11:8 位。
SMOD0.1附加位使能,符號(hào)為XBE0。0:不使能,1:使能。
SMOD0.0停止位長(zhǎng)度選擇,符號(hào)為SBL0。0:1位停止位,1:2位停止位(數(shù)據(jù)長(zhǎng)度 6,7,8),1.5 位停止位(數(shù)據(jù)長(zhǎng)度5)。
接收、發(fā)送緩沖寄存器(SBUF0)
SBUF0寄存器是一個(gè)地址訪問兩個(gè)寄存器,一個(gè)為只寫寄存器(發(fā)送移位寄存器)和一個(gè)只讀寄存器(接收鎖存寄存器),其結(jié)構(gòu)圖如圖1所示。
波特率控制寄存器(SBCON0)的每一位定義如下:

圖1 SBUF0結(jié)構(gòu)圖
SBCON0.6波特率發(fā)生使能,符號(hào)為SB0RUN。0:不使能,1:使能。
SBCON0.1,SBCON0.0波特率預(yù)分頻選擇,符號(hào)為 SB0PS[1:0]。00:12 分頻,01:4 分頻,10:48 分頻,11:1 分頻。
其它位是預(yù)留位,必須寫0。
波特率高字節(jié)重裝載寄存器(SBRLH0)
當(dāng)波特率計(jì)數(shù)器溢出時(shí),重新裝載計(jì)數(shù)器的高字節(jié)。
波特率低字節(jié)重裝載寄存器(SBRLL0)
當(dāng)波特率計(jì)數(shù)器溢出時(shí),重新裝載計(jì)數(shù)器的低字節(jié)。
UART是異步全雙工串行接口,結(jié)構(gòu)框圖如圖2所示:

圖2 UART結(jié)構(gòu)框圖
設(shè)備通訊過程中,設(shè)定同一波特率才可以進(jìn)行正確的數(shù)據(jù)傳輸,C8051F系列單片機(jī)UART工作的波特率按照以下公式計(jì)算:

SYSCLK為系統(tǒng)時(shí)鐘工作頻率;(SBRLH0:SBRLL0)為分頻系數(shù)寄存器0000-FFFF的設(shè)定范圍;prescaler為預(yù)分頻系數(shù),有以下四個(gè)固定分頻系數(shù):1,4,12 和 48。
每一幀數(shù)據(jù)包括起始位、數(shù)據(jù)位 (低位D0在前)、校驗(yàn)或附加位(可選)、1或2位停止位,數(shù)據(jù)長(zhǎng)度可以在5位到8位之間調(diào)節(jié)。校驗(yàn)位在數(shù)據(jù)位之后,按照S0PT[1:0]位選擇由硬件自動(dòng)生成,停止位長(zhǎng)度由SBL0位選擇。要注意的是當(dāng)校驗(yàn)位使能時(shí)附加位失效[4]。其時(shí)序圖如圖3所示。

圖3 串行口時(shí)序圖
CPU內(nèi)核寫SBUF0寄存器立即啟動(dòng)數(shù)據(jù)發(fā)送操作,數(shù)據(jù)通過發(fā)送移位寄存器從TX0端口串行輸出,發(fā)送完畢后TI0置1。REN0置1后,UART模塊允許接收,數(shù)據(jù)從RX0端口串行輸入,如果接收到停止位是1的數(shù)據(jù)存入接收FIFO中,F(xiàn)IFO的深度是3,F(xiàn)IFO滿后下一個(gè)接收數(shù)據(jù)丟失。接收完成后RI0置1,如果MCE0為1,RI0只有在附加位等于1時(shí)置1。SBUF0寄存器中存儲(chǔ)的是最先接收的數(shù)據(jù),讀SBUF0存儲(chǔ)在FIFO中的下一個(gè)字節(jié)被裝載到SBUF0中,F(xiàn)IFO中釋放的空間用于接收新的字節(jié)。只有在FIFO空時(shí),RI0才可被軟件清零。
UART通信模式可分為點(diǎn)對(duì)點(diǎn)和多機(jī)通信兩種模式。點(diǎn)對(duì)點(diǎn)通信只需要串行總線上有兩個(gè)設(shè)備,MCE0位需要清0。設(shè)備A的TX0與設(shè)備B的RX0連接,設(shè)備A的RX0與設(shè)備B的TX0連接。UART支持一個(gè)主機(jī)和多個(gè)從機(jī)之間的通信。多機(jī)通信時(shí)主機(jī)的TX0與從機(jī)的RX0連接,從機(jī)的TX0與主機(jī)的RX0連接。
當(dāng)REN0使能后,接收電路開始采樣,電路主時(shí)鐘采樣到RXD管腳出現(xiàn)下降沿后,即按照所設(shè)定的波特率在數(shù)據(jù)位的中間位置進(jìn)行采樣,并保存到移位寄存器。數(shù)據(jù)移位過程中,根據(jù)寄存器設(shè)置判斷數(shù)據(jù)是否接受完畢,正確接收到停止位后,數(shù)據(jù)被轉(zhuǎn)移到接收FIFO,如RI0寄存器位被置成1,表示數(shù)據(jù)接收完畢,如果FIFO滿則OVR0被置位。如果軟件設(shè)定接收校驗(yàn)位,則硬件電路自動(dòng)檢查校驗(yàn)位是否正確,校驗(yàn)有誤后PERR0會(huì)被置位[5-6]。接收電路示意圖如圖4所示。

圖4 接收電路示意圖
發(fā)送數(shù)據(jù)有一級(jí)緩存,如果當(dāng)前的數(shù)據(jù)沒有發(fā)送完成又寫入下一個(gè)數(shù)據(jù),這個(gè)數(shù)據(jù)先存放在緩存中,等當(dāng)前數(shù)據(jù)發(fā)送完畢再進(jìn)入SBUF0,然后串行輸出。發(fā)送部分電路通過四個(gè)狀態(tài)的相互轉(zhuǎn)換實(shí)現(xiàn)發(fā)送功能,這四個(gè)狀態(tài)分別是:空閑狀態(tài)、緩存裝載狀態(tài)、總線裝載狀態(tài)和移位狀態(tài)。發(fā)送狀態(tài)機(jī)如圖5所示:

圖5 發(fā)送狀態(tài)機(jī)
狀態(tài)機(jī)在空閑狀態(tài)時(shí)給出緩存空標(biāo)志,THRE0位置1,TI0清0。當(dāng)數(shù)據(jù)寫入SBUF后,狀態(tài)機(jī)進(jìn)入總線裝載狀態(tài),THRE0位清0。總線裝載狀態(tài)如果有數(shù)據(jù)寫SBUF信號(hào)并且緩存為空,數(shù)據(jù)寫入緩存中,同時(shí)給出緩存滿標(biāo)志,數(shù)據(jù)裝載完畢后自動(dòng)進(jìn)入移位狀態(tài)。在移位狀態(tài),移位完成后如果緩存空,狀態(tài)機(jī)進(jìn)入空閑狀態(tài),THRE0位置1;如果緩存滿,狀態(tài)機(jī)進(jìn)入緩存裝載狀態(tài)。移位完成標(biāo)志由邏輯根據(jù)SMOD0寄存器設(shè)置計(jì)算生成,移位完成后TI0置1。移位過程中如果有寫SBUF信號(hào)并且緩存為空,數(shù)據(jù)寫入緩存中,同時(shí)給出緩存滿標(biāo)志。在緩存裝載狀態(tài),緩存中的數(shù)據(jù)裝載進(jìn)移位寄存器后自動(dòng)進(jìn)入移位狀態(tài),同時(shí)給出緩存空標(biāo)志。移位完成后TI0置1,標(biāo)志發(fā)送完成。
根據(jù)UART的功能特點(diǎn),選取5位帶奇校驗(yàn)、6位帶偶校驗(yàn)、7位帶附加位、8位不帶校驗(yàn)和8位帶有錯(cuò)誤校驗(yàn)的發(fā)送和接收模式進(jìn)行仿真。將UART的TX0端口通過一個(gè)2選1的選擇器與自身的RX0端口連接。用testbench制造一個(gè)錯(cuò)誤的校驗(yàn)碼,通過2選1的選擇器的另一端與RX0端口連接。從TX0發(fā)送出的錯(cuò)誤數(shù)據(jù)再被RX0接收,錯(cuò)誤的校驗(yàn)碼通過選擇器接到RX0端口[7-8]。仿真程序如下:



UART發(fā)送和接收的時(shí)序以及內(nèi)部寄存器狀態(tài)的仿真波形圖如圖6所示。

圖6 UART發(fā)送和接收仿真波形圖
發(fā)送數(shù)據(jù)寫入SBUF0后THER0清0(發(fā)送保持寄存器非空),發(fā)送完成后THER0置1(發(fā)送保持寄存器空),TI0置1,TI0是用軟件清0的。第一、第二和第三個(gè)數(shù)據(jù)都是前一個(gè)數(shù)據(jù)發(fā)送完成后一個(gè)數(shù)據(jù)再寫入。由于這三個(gè)數(shù)據(jù)分別是5位、6位和7位數(shù)據(jù),因此TX0端口依次發(fā)送其低5位(0x16)、6位(0x26)和7位(0x66)數(shù)據(jù)。第四個(gè)數(shù)據(jù)沒有發(fā)送完成第五個(gè)數(shù)據(jù)即寫入,這時(shí)第五個(gè)數(shù)據(jù)(0x69)存入發(fā)送緩存TBUF中,待第四個(gè)數(shù)據(jù)發(fā)送完成后,第五個(gè)數(shù)據(jù)再被發(fā)送。接收端接收到的數(shù)據(jù)即發(fā)送端發(fā)送出的數(shù)據(jù),第一、二、三個(gè)數(shù)據(jù)存入FIFO中。接收第四個(gè)數(shù)據(jù)引起接收FIFO溢出,OVER置1,第四個(gè)數(shù)據(jù)(0x68)丟失。每接收一個(gè)數(shù)據(jù)RI0置1,接收第二個(gè)數(shù)據(jù)后RI0不可軟件清0。OVER置1后,連續(xù)讀SBUF0三次,接收FIFO清空。因此第五個(gè)數(shù)據(jù)接收到FIFO中,將這個(gè)數(shù)據(jù)讀出清空FIFO,這時(shí)再接收到的數(shù)據(jù)如果有校驗(yàn)錯(cuò)誤PERRR0置1。第六個(gè)數(shù)據(jù)(0x99)的正確校驗(yàn)碼是1,用testbench將接收端的這一位置成0,接收端即接收了一個(gè)帶有錯(cuò)誤校驗(yàn)碼的數(shù)據(jù),PERRR0置1。

圖7 多機(jī)通信連接示意圖
多機(jī)通信連接示意圖如圖7所示,主機(jī)發(fā)送,從機(jī)接收。每次傳輸由兩個(gè)字節(jié)組成,主機(jī)先發(fā)送地址字節(jié)0x67且TBX=1,從機(jī)1和從機(jī)2的MCE0位都置1,因此從機(jī)1和從機(jī)2都接收,RI0_1與RI0_2都置1。從機(jī)1被分配的地址0x67與接收到的地址一致,從機(jī)2被分配的地址0x68與接收到的地址不匹配,因此從機(jī)1的MCE0位被軟件清0,準(zhǔn)備接收第二個(gè)字節(jié)。從機(jī)2的MCE0位不變。主機(jī)再發(fā)送數(shù)據(jù)字節(jié) 0x76且 TBX=0,從機(jī)1(MCE0=0)接收,從機(jī) 2(MCE0=1)不接收,RI0_1 置 1,RI0_2 不置1,仿真波形圖如圖8所示。仿真程序如下:

圖8 主機(jī)與2個(gè)從機(jī)通信仿真波形圖
主機(jī)程序:

從機(jī)程序包括主程序和中斷服務(wù)程序兩部分,從機(jī)判斷地址是否一致和MCE0位清零是通過中斷服務(wù)程序完成的。從機(jī)1和從機(jī)2的主程序是一致的。
從機(jī)程序:

從機(jī)2的中斷服務(wù)程序與從機(jī)1的中斷服務(wù)程序與只有判斷地址處不同即SBUF0==0x68。
展示了UART的內(nèi)部結(jié)構(gòu),總結(jié)歸納了其使用方法,給出了接收和發(fā)送電路的設(shè)計(jì)過程,并提供了發(fā)送、接收端口以及內(nèi)部寄存器標(biāo)志狀態(tài)位的仿真波形圖,直觀地展現(xiàn)了UART工作時(shí)內(nèi)部寄存器的狀態(tài)變化,為接口編程提供幫助。
[1]張培仁,孫力.C8051F系列單片機(jī)原理與應(yīng)用[M].北京:清華大學(xué)出版社,2013.Zhang Peiren,Sun Li.Beijing:Principle and Application of C8051F MCU Family[M].Tsinghua University Press,2013.
[2]趙亮,侯國(guó)銳.單片機(jī)C語言編程與實(shí)例[M].北京:人民郵電出版社,2003.Zhao Liang,Hou Guorui.MCU Programming and Instantiation of C Language[M].Beijing:Post&Telecom Press,2003.
[3]周立功,夏宇聞.單片機(jī)與CPLD綜合應(yīng)用技術(shù)[M].北京:北京航空航天大學(xué)出版社,2003.Zhou Ligong,Xia Yuwen.Integrated Application Technology of MCU and CPLD[M].Beijing:Beihang University Press,2003.
[4]張迎新,雷文,姚靜波.C8051F系列SOC單片機(jī)原理及應(yīng)用[M].北京:國(guó)防工業(yè)出版社,2005.Zhang Yingxin,Lei Wen,Yao Jingbo.Principle and Application of C8051F SOC MCU Family[M].Beijing:National Defence Industry Press,2005.
[5]閻石.數(shù)字電子技術(shù)基礎(chǔ) [M]北京:高等教育出版社,1997.Yan Shi.Fundamentals of Digital Electronics[M].Beijing:Higher Education Press,1997.
[6]袁俊泉,孫敏琪,曹瑞.Verilog HDL數(shù)字系統(tǒng)設(shè)計(jì)及其應(yīng)用[M]西安:西安電子科技大學(xué)出版社,2002.Yuan Junquan,Sun Minqi,Cao Rui.Verilog HDL Design and Applications of Digital System[M].Xi’an:Xidian University Press,2002.
[7][美]Janick Bergeron.編寫測(cè)試平臺(tái)--HDL模型的功能驗(yàn)證(第二版)[M].北京:電子工業(yè)出版社,2006.Janick Bergeron.Writing Testbenches Functional Verification of HDL Models Second Edition[M].Beijing:Publishing House of Electronics Industry,2006.
[8]William K.Lam.Hardware Design Verification[M]USA:Pearson Education,2006.
Design of an UART in C8051F MCU Family
Sun Jing
The function of UART and the Data Format in C8051F MCU family are presented.The operation and the two typical communications are analyzed.The function and use of SFRs are analyzed detailedly.The design process of Transmit and Receive circuit are provided.The state of SFRs is simulated.The timing of TX0 and RX0 are simulated.Multiprocessor communications process is simulated.Simulation waveforms are provided.
C8051FMCU family;UART;SFR;Multiprocessor communications;Simulation waveforms;Simulation program
10.3969/j.issn.1002-2279.2017.04.004
TN4
A
1002-2279-(2017)04-0011-05
孫靜(1982—),女,遼寧省開原市人,碩士研究生,工程師,主研方向:集成電路設(shè)計(jì)。
2016-08-02