徐 智,張義濤
(1.中航工業(yè)直升機(jī)設(shè)計研究所,江西景德鎮(zhèn) 333001;2.陸航駐景德鎮(zhèn)地區(qū)代表室,江西景德鎮(zhèn) 333000)
RS232/422串口是目前最常用的一種工業(yè)標(biāo)準(zhǔn),它具有技術(shù)成熟、性能可靠、操作簡單等優(yōu)點,在民用和軍用航空領(lǐng)域被廣泛應(yīng)用。
傳統(tǒng)的RS232/422總線接口大都采用專用的總線板卡,這種方案集成度低、成本高。當(dāng)面對多設(shè)備時,就需要通過增加板卡數(shù)量來滿足多設(shè)備的要求,故而增加了系統(tǒng)的體積和重量。為了在最小系統(tǒng)中實現(xiàn)多通道RS232/422總線的收發(fā)和降低占用CPU時間,筆者基于FPGA設(shè)計了多通道RS232/422總線接口,使多路信號的收發(fā)和處理變得靈活、有序。
基本的UART通信只需要兩條信號線(RXD、TXD)就可以完成數(shù)據(jù)的相互通信,接收與發(fā)送的全雙工形式,其中TXD是 UART的發(fā)送端,RXD是UART的接收端。UART基本特點是:在信號線上有兩種狀態(tài),可分別用邏輯1(高電平)和邏輯0(低電平)來區(qū)分。在發(fā)送器空閑時,數(shù)據(jù)線應(yīng)保持在邏輯高電平狀態(tài),發(fā)送器是通過發(fā)送起始位來開始一個字符的傳送,起始位使數(shù)據(jù)線處于邏輯低電平狀態(tài),提示接收器數(shù)據(jù)開始傳輸,數(shù)據(jù)位一般為8位一個字節(jié)的數(shù)(也有6位、7位的情況),低位(LSB)在前,高位(MSB)在后,校驗位一般用來判斷接收的數(shù)據(jù)位有無錯誤,一般是奇偶校驗,停止位在最后,用以標(biāo)志UART一個字符傳送的結(jié)束,它對應(yīng)于邏輯1狀態(tài)。
RS232/422總線是計算機(jī)與各任務(wù)設(shè)備之間進(jìn)行數(shù)據(jù)交互的通道,完成數(shù)據(jù)信號的收發(fā)。它由控制芯片、總線協(xié)議芯片和電平轉(zhuǎn)換芯片組成。控制芯片從數(shù)據(jù)總線接收來自CPU的數(shù)據(jù)指令,對總線協(xié)議芯片進(jìn)行配置和邏輯控制??偩€協(xié)議芯片接收完數(shù)據(jù)后,將中斷信號和完整的數(shù)據(jù)信號發(fā)送給控制芯片??刂菩酒ㄟ^數(shù)據(jù)總線將數(shù)據(jù)信號發(fā)送給CPU。它的結(jié)構(gòu)原理如圖1所示。
圖1 接口結(jié)構(gòu)原理圖
1)總線協(xié)議芯片
總線協(xié)議芯片TL16C754是4通道,每通道有64B FIFO的UART,通過3個總線協(xié)議芯片可以構(gòu)成12個通道的UART。在FIFO工作模式下,每通道的發(fā)送和接收FIFO深度可以設(shè)置,減少了CPU的中斷/查詢頻率,提高了系統(tǒng)的效率。TL16C754輸出LVTTL電平,對4個通道TX,RX進(jìn)行電平轉(zhuǎn)換,可以擴(kuò)展成RS422或RS232口。在本接口電路中共選用了3片TL16C754來提供12路UART。
2)轉(zhuǎn)換芯片
Max3033,Max3093是4路 RS422電平轉(zhuǎn)換芯片。Max3033接收來自TL16C754的串行數(shù)據(jù),轉(zhuǎn)換成滿足RS422協(xié)議的差分輸出信號。Max3094接收外部的RS422差分輸入信號,將信號轉(zhuǎn)換成串行數(shù)據(jù)傳輸給TL16C754。本接口電路中共提供了8路RS422。
Max3232是2路全雙工RS232電平轉(zhuǎn)換芯片。Max3232接收來自TL16C754的串行數(shù)據(jù),轉(zhuǎn)換成滿足RS232協(xié)議的串行輸出信號;同時Max3232接收來自外部的RS232的串行輸入信號,將信號轉(zhuǎn)換成串行數(shù)據(jù)傳輸給TL16C754。本接口電路中共提供了6路RS232。
3)控制芯片
控制芯片實際上就是通過硬件描述語言[1],在可編程邏輯器件(FPGA)上設(shè)計實現(xiàn)的芯片。FPGA內(nèi)部資源豐富,通過它能有效提高系統(tǒng)的集成度,縮小系統(tǒng)體積,降低成本。FPGA是RS232/422多通道接口電路的核心[2],任務(wù)是接收CPU的指令,對3片TL16C754協(xié)議芯片進(jìn)行初始化,并將接收到的數(shù)據(jù)由CPU指定的通道輸出。在接收到協(xié)議芯片的中斷信號后,對中斷源進(jìn)行判斷,提醒CPU到相應(yīng)的通道接收新的總線數(shù)據(jù)。依據(jù)該設(shè)計原理,F(xiàn)PGA中提供了時鐘發(fā)生模塊、數(shù)據(jù)寄存器、地址寄存器、中斷辨識寄存器以及控制邏輯轉(zhuǎn)換的狀態(tài)機(jī)。
TL16C754的串行通道由控制寄存器 LCR、IER、DLL、DLM、MCR和FCR編程。這些控制字決定字符長度、停止位的個數(shù)、奇偶校驗、波特率以及調(diào)制調(diào)解器接口??刂萍拇嫫骺梢砸匀我忭樞?qū)懭?,但是IER必須最后一個寫入,因為它控制中斷。本系統(tǒng)中波特率設(shè)置為19200,系統(tǒng)工作在DMA模式1中。以設(shè)置通道A為例:
FPGA接收到數(shù)據(jù)總線上的配置字,依次配置DLL、DLH(除數(shù)鎖存寄存器)、EFR(增強(qiáng)功能寄存器)、MCR(調(diào)制調(diào)節(jié)器控制寄存器)、TLR(觸發(fā)等級寄存器)、FCR(FIFO控制寄存器)、LCR(線路控制寄存器)和IER(中斷識別寄存器)。通過配置上述寄存器,可將串行通道設(shè)置為19200波特率,8位有效數(shù)據(jù)位,1位停止位,無奇偶校驗。
發(fā)送模塊主要由發(fā)送FIFO緩存構(gòu)成,由于協(xié)議芯片兩端連接的總線傳輸速率不同,因此用發(fā)送FIFO作為數(shù)據(jù)緩存。各個通道都有64個字節(jié)長度的發(fā)送FIFO緩存結(jié)構(gòu)。只要發(fā)送FIFO中有數(shù)據(jù),它就通過發(fā)送邏輯模塊發(fā)送出去,同時產(chǎn)生奇偶校驗和停止位。通過TLR寄存器可以設(shè)置觸發(fā)等級,當(dāng)發(fā)送FIFO中空閑空間達(dá)到觸發(fā)等級的條件時,TXRDY信號被協(xié)議芯片給出。在本系統(tǒng)中,各個通道的發(fā)送是通過CPU定時器分時發(fā)送的。
接收模塊主要由接收FIFO緩存構(gòu)成,由于協(xié)議芯片兩端連接的總線傳輸速率不同,因此用接收FIFO作為數(shù)據(jù)緩存。每個通道的接收FIFO也是64字節(jié)的空間。通過TLR寄存器可以設(shè)置觸發(fā)等級,當(dāng)接收FIFO中接收到的數(shù)據(jù)達(dá)到觸發(fā)等級時,RXRDY信號被協(xié)議芯片給出。
本系統(tǒng)中使用了3片協(xié)議芯片,每個協(xié)議芯片中有1個 TXRDY,1個 RXRDY和4個 INT信號。如圖2所示,將18個信號與在一起,產(chǎn)生一個中斷信號INT_UART,INT_UART和FLAG或在一起,產(chǎn)生中斷信號INT0,INT0與CPU相連,取其下降沿為中斷觸發(fā)信號。如圖2所示。
圖2 中斷信號
當(dāng)CPU接收到INT0的中斷信號后,CPU將FLAG信號置高,從而屏蔽18個中斷源。此時,CPU進(jìn)入到中斷服務(wù)程序。在中斷服務(wù)程序中,CPU讀取FPGA提供的3個中斷辨識寄存器INTREG1,INTREG2和INTREG3,如表1所示。CPU首先對INTREG1和INTREG2進(jìn)行判斷,當(dāng)它們?nèi)珵?時,說明接收FIFO中的數(shù)據(jù)都是正確的,不存在成幀,奇偶校驗、數(shù)據(jù)溢出錯誤。INTREG3中的低3位,表示接收FIFO中的數(shù)據(jù)到達(dá)了觸發(fā)等級,CPU可以對FIFO進(jìn)行讀取。CPU通過對INTREG3中低3位的判斷,可以清楚的知道哪個協(xié)議芯片的數(shù)據(jù)準(zhǔn)備就緒,然后對指定的通道進(jìn)行數(shù)據(jù)讀取操作。
這種中斷機(jī)制的引入減少了底層數(shù)據(jù)對CPU的中斷次數(shù),使得CPU有更多的時間去進(jìn)行任務(wù)調(diào)度管理。中斷服務(wù)流程如圖3所示。
圖3 中斷服務(wù)程序流程圖
表1 中斷辨識寄存器
將該系統(tǒng)的發(fā)送接收端口接到PC機(jī)的串口端,利用PC機(jī)超級終端可以正確顯示系統(tǒng)通過任意UART端口發(fā)送出來的數(shù)據(jù)。本接口系統(tǒng)已經(jīng)成功運用在某型號無人直升機(jī)航空信號仿真平臺中。
本文基于FPGA技術(shù),設(shè)計并實現(xiàn)了多通道的RS232/422接口電路,通過通道的選擇和切換,提高了系統(tǒng)的處理能力。通過測試確定,多通道接口轉(zhuǎn)換的信號符合UART規(guī)范。這種設(shè)計思路可以方便地應(yīng)用到其他類型的總線通信模塊的設(shè)計中。
[1]潘松,王國棟.VHDL實用教程[M].成都:電子科技大學(xué)出版社,2001.
[2]曹會華,賀占莊.基于有限狀態(tài)機(jī)實現(xiàn)全雙工可編程UART[J].計算機(jī)技術(shù)與發(fā)展,2007,17(2):54-56.