李 強,李志宇,高艷輝
(1.南京航空航天大學 自動化學院,江蘇 南京210016;2.南京航空航天大學 無人機研究院,江蘇 南京210016)
異步串行通信是一種串行數(shù)據(jù)傳輸協(xié)議, 用于雙向通信,可以實現(xiàn)半雙工和全雙工傳輸,因其結(jié)構(gòu)簡單、設(shè)計方便、價格低廉、占用資源少[1]、傳輸距離遠等優(yōu)勢而得到廣泛應(yīng)用。 近年來串行通信正朝著帶寬、速度、穩(wěn)定性逐漸增強的方向發(fā)展[2]。 586-Engine 是TERN 公司推出的一款為了高精度和高可靠性的植入式應(yīng)用所設(shè)計的核心板卡, 運算速率高,適用于工業(yè)程序控制和高精度的數(shù)學計算。 該板卡提供了2 路異步串行通信接口,這在很多應(yīng)用場合遠遠不夠。為了增加串口數(shù)量并保證較高的傳輸速率, 使用高性能的UR8 擴展卡是一種可行方案, 本文結(jié)合UR8 串口擴展卡在586-Engine 上的成功應(yīng)用, 對UR8 串口擴展方法進行詳細介紹。
586-Engine 是TERN 公司生產(chǎn)的基于AMD Elan SC520處理器的C/C++可編程微控制模塊,成本低,功耗低,結(jié)構(gòu)緊湊。 它提供了多種算法指令用于處理各類數(shù)字格式以及正弦、余弦、正切、對數(shù)等超越函數(shù),擅長高強度的運算應(yīng)用[3]。
586-Engine 的主要參數(shù)指標如下:
1)CPU 是 主 頻 為133 MHz 的32 位AMD ElanSC520 處 理器,兼容Intel80x86;
2)尺寸為3.6*2.3*0.3 英寸,適用溫度為-40oC—85oC;
3)支持114 字節(jié)內(nèi)置RAM,高達512KB 電池供電的SRAM,512 kB 的Flash,不支持SDRAM、PCI、DMA。
4)提供兩個工業(yè)標準通用異步串口(UART),最高達到1.152 Mbit/s。
5)提供32 路多功能I/O 總線。包括總共19 路12 位模數(shù)轉(zhuǎn)換器, 其中11 路串行模數(shù)轉(zhuǎn)換和8 路并行模數(shù)轉(zhuǎn)換;6 路12位數(shù)模轉(zhuǎn)換器,其中2 路串行數(shù)模轉(zhuǎn)換和4 路并行數(shù)模轉(zhuǎn)換。
6)可編程中斷控制器(PIC)支持22 個中斷優(yōu)先級,包括15 個外部中斷。 共有7 個定時器,其中1 個可編程內(nèi)部定時器,3 個16 位PIT 定時器和3 個16 位GP 定時器[4]。
UR8 是TERN 公司生產(chǎn)的8 路異步串口擴展卡。 它提供了多種串口工作方式,如RS232、RS485、RS422。 其核心部件是2 片TL16C754B 芯片, 每片TL16C754B 具有4 路異步串口, 每個通道具有64 字節(jié)的發(fā)送FIFO 和64 字節(jié)的接收FIFO。在FIFO 模式下,可以減小CPU 的中斷數(shù)量并降低軟件開銷。 它有3 種工作模式:查詢模式、中斷模式和DMA 模式,并可編程選擇中斷和DMA 模式的FIFO 深度[5]。 它提供了可編程的波特率發(fā)生器用于產(chǎn)生14 種不同的波特率,最高波特率可達230400bit/s,可見UR8 的串口傳輸速度非???。
UR8 擴展卡提供了3 種可配置的串口標準方案 (即RS232、RS485、RS422)以滿足不同的需求。其中8 個串口均可配置為RS232 串口標準;COM2-COM5 4 個串口可配置為RS485 串口標準;COM2 可配置為RS422 串口標準。若采用后兩種方案與PC 機進行通信需在中間加裝一個RS232/RS485轉(zhuǎn)換器。 以上3 種配置方案均已成功應(yīng)用, 本文僅以RS232為例對該方法進行介紹。
586-Engine 的數(shù)據(jù)總線D0-D7 連接到UR8 的D0-D7,用于雙向數(shù)據(jù)交換,/RD 和/CS1 分別和UR8 內(nèi)部HCT245 芯片的DIR 及G 相連來選擇傳輸方向;586-Engine 的地址總線A1、A2、A3、寫使能端/WR、讀使能端/RD 以及RST 與UR8 的A0、Al、A2、寫使能端/WR、讀使能端/RD 以及RST 相連,實現(xiàn)TL16C754B 的片內(nèi)寄存器尋址和讀寫控制;586-Engine 的地址總線A4、A5、A6、A7 與UR8 的A4、A5、A6、A7 相連, 經(jīng)過TL16C754B 內(nèi)部譯碼器芯片進行譯碼實現(xiàn)片選功能[6]。
UR8 的8 個串口(COM2-COM9)選用RS232 通訊方式。可以采用兩種方案進行試驗,第一種是UR8 的8 個串口與8臺PC 機同時通信, 第二種是UR8 的8 個串口級聯(lián)的接線方式, 為了操作簡潔采用第二種方案, 即: 外部數(shù)據(jù)發(fā)送到COM2 的 接 收 端/RXD2,/TXD2 連 到/RXD3,/TXD3 連 到/RXD4,以此類推,最終數(shù)據(jù)由COM9 的發(fā)送端/TXD9 發(fā)送到PC 機的接收端,通過串口調(diào)試助手檢測數(shù)據(jù)的正確性和完整性。 整個接線關(guān)系如圖1 所示。
圖1 接口設(shè)計電路原理圖Fig. 1 Interface circuit schematic design
TL16C754B 內(nèi)部寄存器地址如下表所示,每一個串口的定義都完全相同。
表1 TL16C754B 內(nèi)部寄存器Tab.1 TL16C754B internal registers
UR8 的地址設(shè)置非常靈活,每個通道的基地址可以自由選擇,采用基地址加偏移量的方法可以確定各寄存器的地址,然后就可以對各寄存器進行讀寫操作。 值得注意的是,A0 沒有使用,各偏移量和基地址為偶地址,這樣就增加了系統(tǒng)的抗干擾能力。
UR8 是一款可靈活選擇配置的擴展卡, 其每一通道的初始化配置均可根據(jù)實際需要來進行。下面以串口2 為例,給出初始化配置。
************************************ 設(shè) 置 串 口2*********************************
baud=13; // 波特率選擇115200
qur_init(2, baud);
outportb(LCR2,0x83); // 線路控制寄存器,8 位,無奇偶校驗,使能DLL、DLH
outportb(DLL2,(unsigned char)(ctlr&0xff) ); // 波特率因子寄存器低位
outportb (DLH2,(unsigned char)((ctlr>>8)&0xff)); // 波特率因子寄存器高位
outportb(LCR2,0x03); // 線路控制寄存器,8 位,無奇偶校驗
outportb(IER2,0x00); // 中斷允許寄存器,不允許中斷outportb(FCR2,0x07); // 清空FIFO
outportb(MCR2,0x00); // Modem 控制寄存器歸零
void qur_init( char ch, unsigned char baud) //ch=2-9,串口初始化
void put_ch (char ch, unsigned char dat) //串口數(shù)據(jù)發(fā)送函數(shù)
unsigned char qur_hit ( char ch) //檢查接收FIFO是否有數(shù)據(jù)
unsigned char get_ch( char ch) //串口數(shù)據(jù)接收函數(shù)
軟件設(shè)計流程圖如圖2 所示,程序采用順序查詢模式,依次查詢COM2-COM9 的接收FIFO 中是否有數(shù)據(jù), 如果有數(shù)據(jù)則存儲數(shù)據(jù)再將存儲的數(shù)據(jù)發(fā)出; 如果接收FIFO 中沒有數(shù)據(jù),則繼續(xù)檢查下一個串口。 結(jié)合硬件的連線方式,一幀數(shù)據(jù)就會在8 個串口間循環(huán)一次。每一通道都有各自的接收/發(fā)送FIFO 和寄存器,各自數(shù)據(jù)的接收和發(fā)送不受影響。
圖2 軟件設(shè)計流程圖Fig. 2 Flow chart of the software design
調(diào)試過程中,PC 機串口發(fā)送端與UR8 的串口2 的RXD2 相連, 發(fā)送的數(shù)據(jù)通過串口發(fā)送端依次通過COM2、COM3、COM4、COM5、COM6、COM7、COM8、COM9, 最 終 由COM9 的發(fā)送端TXD9 傳送到PC 機的串口接收端,形成一個數(shù)據(jù)循環(huán)傳輸?shù)倪^程。PC 機通過串口調(diào)試助手控制串口的發(fā)送和接收,具體調(diào)試原理如圖3 所示。
圖3 調(diào)試原理框圖Fig. 3 Debugging principle diagram
串口調(diào)試助手當波特率設(shè)定為115 200 bit/s,一幀數(shù)據(jù)為01 到40 個字符時,逐步減小每幀數(shù)據(jù)的發(fā)送間隔,最終測試得到的最短時間間隔為20 ms。 即每20 ms 發(fā)送一幀數(shù)據(jù)。PC機接收到的數(shù)據(jù)顯示在窗口中,實驗最終結(jié)果如圖4 所示。
從結(jié)果可以看出,接收窗口接收到的數(shù)據(jù)沒有誤碼,說明數(shù)據(jù)在各個串口的接收發(fā)送過程中沒有出現(xiàn)錯誤; 界面最下面顯示S:153000 R:153000,發(fā)送和接收的字節(jié)數(shù)相等,說明沒有丟失數(shù)據(jù)。
圖5 給出了時間間隔減小到19 ms 的實驗結(jié)果, 從接收窗口可以看出第4 行39、40 兩個字符被01、02 替代, 說明串口發(fā)送一幀數(shù)據(jù)所需要時間已經(jīng)大于PC 機發(fā)送一幀數(shù)據(jù)的時間間隔, 串口還沒發(fā)完一幀數(shù)據(jù)已經(jīng)被強制執(zhí)行下一次的發(fā)送命令,第8、15、17、22 行反映了同樣的問題。 說明20 ms為這種擴展方案的極限值。
圖4 測試界面圖Fig. 4 Interface chart of the test system
圖5 測試界面圖(19ms/次)Fig. 5 Interface chart of the test system(19ms/次)
調(diào)試結(jié)果說明, 使用UR8 成功地擴展了586-Engine 的異步串行通信能力。
本文介紹的這種串行通信擴展方案具有明顯的優(yōu)越性:一是增加了8 個串行通信接口,可以與更多的設(shè)備進行連接,極大地提高了586-Engine 的異步串行通信能力; 二是由于586-Engine 內(nèi)核處理數(shù)據(jù)的速度極快并盡最大限度的壓縮程序所占用時間,使得這種UR8 串口擴展方案達到很高的傳輸速率,能夠滿足譬如飛控計算機這種高實時性、高運算量設(shè)備的設(shè)計需求;三是UR8 不僅能擴展到586-Engine,還能直接 擴 展 到A-Engine、i386-Engine、i386-Drive、586-Drive 等TERN 公司生產(chǎn)的板卡,省去了設(shè)計接口電路的麻煩。 實驗證明,在實時性高、傳輸波特率高、CPU 運算量大的情況下,使用UR8 進行串口擴展是一種很實用的方案。
[1] 蘭立榮,閆繼英,林海土,等.基于ARM處理器設(shè)備的多串口設(shè)計與實現(xiàn)[J].儀表技術(shù),2011(5):19-21.
LAN Li-rong, YAN Ji-ying,LIN Hai-tu,et al.Design and implementation of multi -channel UART based on ARM apparatus[J]. Instrumentation Technology,2011(5):19-21.
[2] Chen Z H,Shi M, Yi Q M.A method for DSP asynchronous serial port expansion based on TL16C752B [C] //Business Management and Electronic Information (BMEI),2011 International Conference on.IEEE,2011(1):844-847.
[3] TERN,Inc.586-EngineTM Technical Manual[S].2001.
[4] 陳德勝,黃一敏,史擁軍.TLl6C754在嵌入式系統(tǒng)串行通信中的應(yīng)用[J].儀器儀表用戶,2007,14(4):81-82 CHEN De-sheng,HUANG Yi-min,SHI Yong-jun.The application of TL16C754 in the serial communications of embedded system[J].Electronic Instrutmentation Costumers,2007,14(4):81-82.
[5] 梅培智, 于海勛, 何衡湘, 等. 基于TL16C754B 的TMS320F2812異步串行通信擴展 [J]. 科學技術(shù)與工程,2007,7(23):6035-6039.MEI Pei-zhi,YU Hai-xun,HE Heng-xiang,et al.UART serial port extension of TM S320F2812 based on TL16C754B[J].Science Technology and Engineering,2007,7(23):6035-6039.
[6] 皮小平,呂宗偉.TL16C754在多串口擴展中的應(yīng)用[J].電子元器件應(yīng)用,2006,3(1):64-66.PI Xiao -ping,LV Zong -wei.Application of TL16C754 in multi serial port expansion [J].Electronic Component & Device Applications,2006,3(1):64-66.