摘 要: 提出了一種基于狀態(tài)機(jī)且內(nèi)部帶有16字節(jié)緩沖FIFO的異步串行通信接口的設(shè)計(jì)思路和實(shí)現(xiàn)方法。
關(guān)鍵詞: 工業(yè)控制系統(tǒng) 異步串行通信接口 狀態(tài)機(jī)
近幾年來工控機(jī)產(chǎn)業(yè)的飛速發(fā)展,使工控產(chǎn)品的應(yīng)用范圍由原工業(yè)自動(dòng)化行業(yè)的運(yùn)用,迅速地轉(zhuǎn)向制造業(yè)自動(dòng)化。相對于商用PC而言,工控機(jī)具有抗惡劣環(huán)境、結(jié)構(gòu)擴(kuò)充性能好、電壓適用范圍寬等優(yōu)點(diǎn),可充分滿足企業(yè)運(yùn)行的特殊需求,其發(fā)展已進(jìn)入到嵌入式智能平臺(tái)(Embedded Intelligent Platform)階段。
由于串行通信結(jié)構(gòu)簡單、可靠性強(qiáng)、實(shí)現(xiàn)及使用成本低、通信標(biāo)準(zhǔn)統(tǒng)一,且信道成本低,使其在測控系統(tǒng)和工程中應(yīng)用十分廣泛。因此,在工業(yè)控制中,串行接口是常用的計(jì)算機(jī)與外部串行設(shè)備之間的首選數(shù)據(jù)傳輸通道。許多設(shè)備和計(jì)算機(jī)都可以通過串行接口對外設(shè)進(jìn)行控制和檢測。因此,串行接口通信日益成為計(jì)算機(jī)和外設(shè)進(jìn)行通信、獲取由外設(shè)采集到的監(jiān)測數(shù)據(jù)的一種非常重要的手段。
本文介紹了一種基于工業(yè)控制系統(tǒng)平臺(tái)的全雙工、內(nèi)部帶有16字節(jié)緩沖FIFO的異步串行通信接口(Universal Asynchronous Receiver/Transmitter)的設(shè)計(jì)思路和實(shí)現(xiàn)方法。該方法具有可編程的串行接口特性和完整的狀態(tài)信息報(bào)告功能、獨(dú)立的中斷優(yōu)先級控制能力,以及自動(dòng)奇偶校驗(yàn)、溢出和數(shù)據(jù)幀出錯(cuò)等檢測標(biāo)志。
1 工控系統(tǒng)平臺(tái)結(jié)構(gòu)
為了滿足市場對工業(yè)型計(jì)算機(jī)的要求,除了VME總線工控機(jī)外,產(chǎn)生了一系列基于PC、與ISA/PCI總線標(biāo)準(zhǔn)兼容的嵌入式工控機(jī),其中比較有代表性的是Compact PCI/PXI總線、AT96總線、STD總線、STD32總線、PC/104和PC/104-Plus總線嵌入式工業(yè)控制機(jī)。
由于軟件的兼容性這一重要原因,目前的工業(yè)控制機(jī)已經(jīng)由過去的專用封閉式架構(gòu)變?yōu)镻C技術(shù)的開放式架構(gòu)。由桌面PC技術(shù)衍生的ISA總線加固型計(jì)算機(jī)在工業(yè)上得到了相當(dāng)廣泛的應(yīng)用。本設(shè)計(jì)所基于的工控系統(tǒng)平臺(tái)即采用ISA總線協(xié)議,以高性能的32位微處理器作為核心處理器,其結(jié)構(gòu)如圖1所示。

本系統(tǒng)可分為系統(tǒng)控制器和外設(shè)控制器二大部分。系統(tǒng)控制器包括控制主存的DRAM控制器、完成總線仲裁的總線控制器、實(shí)現(xiàn)與ISA總線協(xié)議相關(guān)操作的ISA控制器,以及可編程中斷控制器、定時(shí)器、鍵盤控制器、實(shí)時(shí)時(shí)鐘RTC和DMA控制器。外設(shè)控制器則由硬盤控制器、軟盤控制器(包括軟盤驅(qū)動(dòng)器)、串行通信接口和并行通信接口組成。此外,再加上BIOS ROM就構(gòu)成了一個(gè)完整的工業(yè)控制系統(tǒng)。其中,串行通信接口直接連接在ISA總線上,系統(tǒng)利用該接口輸入由采集卡采集的數(shù)據(jù)以及輸出遠(yuǎn)程控制信息。更為重要的是,由于本工控系統(tǒng)不包含顯卡,因而必須利用串行接口來進(jìn)行整個(gè)系統(tǒng)的調(diào)試。由此可見,串行接口的設(shè)計(jì)是整個(gè)系統(tǒng)至關(guān)重要的一部分。
2 異步串行通信接口的設(shè)計(jì)
根據(jù)工控系統(tǒng)要求,設(shè)計(jì)中將UART分為如下幾個(gè)子模塊[1][2]:傳輸速率控制電路即波特率發(fā)生器、讀/寫控制邏輯、接收控制電路、發(fā)送控制電路、MODEM控制邏輯、中斷控制邏輯、線路控制邏輯。UART結(jié)構(gòu)原理如圖2所示,各子模塊功能如下。

(1)讀/寫控制邏輯:對片選、讀寫等信號(hào)進(jìn)行譯碼,以訪問內(nèi)部寄存器。
(2)波特率發(fā)生器:對輸入的基準(zhǔn)時(shí)鐘分頻,以產(chǎn)生所需要的波特率,并將符合要求的發(fā)送時(shí)鐘送給發(fā)送器。同時(shí)還送出分頻后的時(shí)鐘,以作為接收時(shí)鐘。
(3)發(fā)送控制邏輯:把寫入發(fā)送保持寄存器的數(shù)據(jù)進(jìn)行格式化并送到移位寄存器,然后按選定的時(shí)鐘頻率進(jìn)行串行輸出。
(4)接收控制邏輯:采樣串行數(shù)據(jù)輸入信號(hào),按格式化對數(shù)據(jù)進(jìn)行校驗(yàn)后,轉(zhuǎn)換成并行數(shù)據(jù)送往CPU。
(5)線路控制邏輯:用來寄存發(fā)送字符的編程格式、間斷點(diǎn)設(shè)置等參數(shù),并記錄接收和發(fā)送時(shí)的狀態(tài)信息。
(6)MODEM控制邏輯:為MODEM提供控制信號(hào),記錄MODEM、數(shù)據(jù)裝置輸入給UART的狀態(tài)信息及變化信息。
(7)中斷控制邏輯:實(shí)現(xiàn)中斷優(yōu)先權(quán)管理,允許在符合條件時(shí)發(fā)出中斷請求,或禁止在符合條件時(shí)發(fā)中斷請求。
UART是可編程的異步串行通信接口,共有11個(gè)內(nèi)部寄存器,用戶可通過對這些寄存器編程,實(shí)現(xiàn)所需的通信。各寄存器的讀寫端口地址分配如表1所示。表中DLAB是線路控制寄存器的D7位,對于COM1,BA為3F8H;對于COM2,BA為2F8H。

下面就其中一些模塊作簡要介紹。
2.1 數(shù)據(jù)接收單元
數(shù)據(jù)接收單元如圖3所示。接收數(shù)據(jù)的過程如下:當(dāng)編程初始化后即進(jìn)入允許接收和準(zhǔn)備好接收數(shù)據(jù)狀態(tài),監(jiān)視串行數(shù)據(jù)輸入線SIN。在無字符傳送時(shí),SIN線上為高電平,即處于Mark狀態(tài);當(dāng)在接收時(shí)鐘的上升沿采樣,SIN線上出現(xiàn)低電平時(shí),就認(rèn)為數(shù)據(jù)接收單元是起始位,于是啟動(dòng)一個(gè)內(nèi)部計(jì)數(shù)器。由于接收時(shí)鐘頻率為16倍的波特率,當(dāng)計(jì)數(shù)器計(jì)到8(對SIN連續(xù)采樣8次,即到1個(gè)數(shù)據(jù)位寬度的一半)時(shí),若發(fā)現(xiàn)SIN這時(shí)已變?yōu)楦唠娖?,則剛才的低電平可能是一個(gè)噪聲干擾,而不是真正的起始位,或者接收器是在發(fā)送方發(fā)送1個(gè)字符的中間被允許接收。在這二種情況下接收器并不開始接收數(shù)據(jù),而是繼續(xù)尋找新的起始位,直到連續(xù)采樣到8個(gè)低電平,才認(rèn)為是正確的起始位。此后每隔1位(16個(gè)脈沖),即在對應(yīng)的每個(gè)數(shù)據(jù)位中間的1個(gè)接收時(shí)鐘的上升沿處采樣SIN線,并把采樣到的信息以移位方式送入移位寄存器。在串行輸入的數(shù)據(jù)流中,字符的低位在前,高位在后。接收到1幀數(shù)據(jù)位后,接收控制電路根據(jù)初始化編程選定的數(shù)據(jù)格式,把串行數(shù)據(jù)轉(zhuǎn)化成并行數(shù)據(jù),并進(jìn)行奇偶校驗(yàn)、對停止位的檢查等,且自動(dòng)刪除起始位、奇偶校驗(yàn)位和停止位。然后移位寄存器內(nèi)的數(shù)據(jù)以并行方式送到接收數(shù)據(jù)緩沖寄存器或接收FIFO中保存。同時(shí)將線路狀態(tài)寄存器LSR的Data Ready位置1,供CPU查詢用,且將管腳RXRDY_n置為有效的低電平。若允許發(fā)中斷,此時(shí)還會(huì)發(fā)出中斷請求信號(hào),請求CPU讀取接收到的數(shù)據(jù)。

接收數(shù)據(jù)過程由一個(gè)3位狀態(tài)機(jī)來實(shí)現(xiàn)。其狀態(tài)有Idle(空閑)、Start(接收起始位)、Shift(接收數(shù)據(jù)位)、Parity(接收奇偶校驗(yàn)位)以及Stop(接收停止位)。每一個(gè)狀態(tài)表明了當(dāng)前正在接收的數(shù)據(jù)屬于哪一種字符,并且根據(jù)當(dāng)前接收字符的狀態(tài),驅(qū)動(dòng)其他部件進(jìn)行合適的操作。接收狀態(tài)機(jī)狀態(tài)轉(zhuǎn)換如圖4所示。

2.2 數(shù)據(jù)發(fā)送單元
數(shù)據(jù)發(fā)送單元如圖5所示。對于由CPU送來的待發(fā)送的并行數(shù)據(jù)先寫入發(fā)送保持寄存器或發(fā)送FIFO,按照編程規(guī)定的格式,在發(fā)送時(shí)鐘的控制下,經(jīng)發(fā)送移位寄存器變成串行數(shù)據(jù)流,然后從串行輸出SOUT管腳發(fā)送出去。在串行輸出的數(shù)據(jù)流中,字符的低位在前,高位在后。發(fā)送時(shí)自動(dòng)加上起始位,并根據(jù)編程規(guī)定的校驗(yàn)要求,加上1個(gè)校驗(yàn)位以及加上編程規(guī)定的停止位。當(dāng)沒有數(shù)據(jù)發(fā)送時(shí),SOUT保持高電平。由于在前一個(gè)數(shù)據(jù)幀發(fā)送過程中發(fā)送保持寄存器或發(fā)送FIFO被寫入數(shù)據(jù),所以只要發(fā)送保持寄存器或發(fā)送FIFO不為空,則發(fā)送保持寄存器或發(fā)送FIFO中的數(shù)據(jù)將自動(dòng)并行地送入發(fā)送移位寄存器,在發(fā)送完1個(gè)數(shù)據(jù)幀后立即發(fā)送下一幀。

發(fā)送數(shù)據(jù)過程由一個(gè)3位狀態(tài)機(jī)控制,通過狀態(tài)的轉(zhuǎn)換來實(shí)現(xiàn)起始位、數(shù)據(jù)位、奇偶校驗(yàn)位以及停止位的發(fā)送。其狀態(tài)有Idle(空閑)、Start(發(fā)送起始位)、Shift(發(fā)送數(shù)據(jù)位狀態(tài))、Parity(發(fā)送奇偶校驗(yàn)位)以及Stop_1bit(發(fā)送1位停止位)、Stop_halfbit(發(fā)送半個(gè)停止位)、Stop_2bit(發(fā)送第2個(gè)停止位)。發(fā)送狀態(tài)機(jī)狀態(tài)轉(zhuǎn)換如圖6所示。

2.3 線路控制邏輯
線路控制邏輯以線路控制寄存器和線路狀態(tài)寄存器為核心,用于寄存發(fā)送字符的編程格式、間斷點(diǎn)設(shè)置等參數(shù),并記錄接收和發(fā)送時(shí)的狀態(tài)信息。接收發(fā)送狀態(tài)標(biāo)志如表2所示。

接收控制電路在接收串行數(shù)據(jù)的同時(shí)對接收數(shù)據(jù)的正確性和接收過程進(jìn)行監(jiān)視。若發(fā)現(xiàn)接收過程出現(xiàn)如表2所示的狀態(tài),則將相應(yīng)的狀態(tài)信息送往線路狀態(tài)寄存器LSR。而發(fā)送時(shí),UART也是通過LSR的D5和D6位指明發(fā)送保持寄存器和發(fā)送移位寄存器的狀態(tài)[1]。
3 仿真與驗(yàn)證
本設(shè)計(jì)采用Altera公司的集成開發(fā)軟件QuartusⅡ3.0,并用該公司的Cyclone系列芯片進(jìn)行FPGA驗(yàn)證(因Cyclone系列芯片是一種低成本、高密度的FPGA芯片系列,所以是首選的中規(guī)模器件產(chǎn)品)。Cyclone系列芯片采用0.13?滋m工藝制造,1.5V核心電壓供電,功耗低,最高集成有20 060個(gè)邏輯部件和高達(dá)288Kb的RAM,支持多種I/O標(biāo)準(zhǔn)以及支持多個(gè)IP核,包括Altera MegaCore功能和Altera Megafuncitons Partners Program(AMPP)宏功能[4]。通過QuartusⅡ3.0綜合、布局布線后,可以達(dá)到180MHz以上的時(shí)鐘頻率,完全可滿足系統(tǒng)時(shí)序的要求。本設(shè)計(jì)下載到FPGA中進(jìn)行仿真驗(yàn)證后,可以很好地實(shí)現(xiàn)串行接口收發(fā)控制功能。
參考文獻(xiàn)
1 National Semiconductor Corp.PC16550D Universal Asynchronous Receiver/Transmitter with FIFOs.1995
2 Texas Instruments.TL16C550C,TL16C550CI Asynchronous Communications Element With Autoflow Control. 1998
3 EXAR.ST16C550 UART with 16-Byte FIFO′s.2000
4 Gilluwe F V著,精英科技譯.PC技術(shù)內(nèi)幕:I/O、CPU和固定內(nèi)存區(qū)程序員指南.北京:中國電力出版社,2001
