基于UR8的586-Engine異步串行通信擴(kuò)展設(shè)計(jì)
摘要:TERN公司開發(fā)的586-Engine微控制模塊具有精度高可靠性高的特點(diǎn),適用于工業(yè)程序控制和高精度數(shù)學(xué)計(jì)算。為了實(shí)現(xiàn)高實(shí)時(shí)性、高傳輸波特率的要求,本文提出了一種基于UR8的異步串行通信擴(kuò)展方案,并完成系統(tǒng)的軟硬件設(shè)計(jì)。文中詳細(xì)介紹了基于UR8的串口擴(kuò)展方法,給出了接口設(shè)計(jì)電路原理圖、初始化配置例程以及程序流程圖,并對設(shè)計(jì)細(xì)節(jié)進(jìn)行了詳細(xì)闡述,最后給出試驗(yàn)結(jié)果。
本文引用地址:http://2s4d.com/article/201610/306147.htm關(guān)鍵詞:586-Engine;UR8;嵌入式模塊;串口擴(kuò)展
異步串行通信是一種串行數(shù)據(jù)傳輸協(xié)議,用于雙向通信,可以實(shí)現(xiàn)半雙工和全雙工傳輸,因其結(jié)構(gòu)簡單、設(shè)計(jì)方便、價(jià)格低廉、占用資源少、傳輸距離遠(yuǎn)等優(yōu)勢而得到廣泛應(yīng)用。近年來串行通信正朝著帶寬、速度、穩(wěn)定性逐漸增強(qiáng)的方向發(fā)展。586-Engine是TERN公司推出的一款為了高精度和高可靠性的植入式應(yīng)用所設(shè)計(jì)的核心板卡,運(yùn)算速率高,適用于工業(yè)程序控制和高精度的數(shù)學(xué)計(jì)算。該板卡提供了2路異步串行通信接口,這在很多應(yīng)用場合遠(yuǎn)遠(yuǎn)不夠。
為了增加串口數(shù)量并保證較高的傳輸速率,使用高性能的UR8擴(kuò)展卡是一種可行方案,本文結(jié)合UR8串口擴(kuò)展卡在586-Engine上的成功應(yīng)用,對UR8串口擴(kuò)展方法進(jìn)行詳細(xì)介紹。
1 器件介紹
586-Engine是TEBN公司生產(chǎn)的基于AMD Elan SC520處理器的C/C++可編程微控制模塊,成本低,功耗低,結(jié)構(gòu)緊湊。它提供了多種算法指令用于處理各類數(shù)字格式以及正弦、余弦、正切、對數(shù)等超越函數(shù),擅長高強(qiáng)度的運(yùn)算應(yīng)用。
586-Engine的主要參數(shù)指標(biāo)如下:
1)CPU是主頻為133 MHz的32位AMD ElanSC520處理器,兼容Inte180x86;
2)尺寸為3.6*2.3*0.3英寸,適用溫度為-40℃-85℃;
3)支持114字節(jié)內(nèi)置RAM,高達(dá)512KB電池供電的SRAM,512 kB的Flash,不支持SDRAM、PCI、DMA。
4)提供兩個(gè)工業(yè)標(biāo)準(zhǔn)通用異步串口(UART),最高達(dá)到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個(gè)中斷優(yōu)先級,包括15個(gè)外部中斷。共有7個(gè)定時(shí)器,其中1個(gè)可編程內(nèi)部定時(shí)器,3個(gè)16位PIT定時(shí)器和3個(gè)16位GP定時(shí)器。
UR8是TERN公司生產(chǎn)的8路異步串口擴(kuò)展卡。它提供了多種串口工作方式,如RS232、RS485、RS422。其核心部件是2片TL16C754B 芯片,每片TL16C754B具有4路異步串口,每個(gè)通道具有64字節(jié)的發(fā)送FIFO和64字節(jié)的接收FIFO。在FIFO模式下,可以減小CPU的中斷數(shù)量并降低軟件開銷。它有3種工作模式:查詢模式、中斷模式和DMA模式,并可編程選擇中斷和DMA模式的FIFO深度。它提供了可編程的波特率發(fā)生器用于產(chǎn)生14種不同的波特率,最高波特率可達(dá)230400bit/s,可見UR8的串口傳輸速度非常快。
2 硬件設(shè)計(jì)
2.1 UR8擴(kuò)展卡串口的可配置方案
UR8擴(kuò)展卡提供了3種可配置的串口標(biāo)準(zhǔn)方案(即RS232、RS485、RS422)以滿足不同的需求。其中8個(gè)串口均可配置為RS232串口標(biāo)準(zhǔn);COM2-COM5 4個(gè)串口可配置為RS485串口標(biāo)準(zhǔn);COM2可配置為RS422串口標(biāo)準(zhǔn)。若采用后兩種方案與PC機(jī)進(jìn)行通信需在中間加裝一個(gè)RS232/RS485轉(zhuǎn)換器。以上3種配置方案均已成功應(yīng)用,本文僅以RS232為例對該方法進(jìn)行介紹。
2.2 接口電路原理框圖
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、A1、A2、寫使能端/WR、讀使能端/RD以及RST相連,實(shí)現(xiàn)TL16C754B的片內(nèi)寄存器尋址和讀寫控制;586-Engine的地址總線A4、A5、A6、A7與UR8的A4、A5、A6、A7相連,經(jīng)過TL16C754B內(nèi)部譯碼器芯片進(jìn)行譯碼實(shí)現(xiàn)片選功能。
UR8的8個(gè)串口(COM2-COM9)選用RS232通訊方式。可以采用兩種方案進(jìn)行試驗(yàn),第一種是UR8的8個(gè)串口與8臺(tái)PC機(jī)同時(shí)通信,第二種是 UR8的8個(gè)串口級聯(lián)的接線方式,為了操作簡潔采用第二種方案,即:外部數(shù)據(jù)發(fā)送到COM2的接收端/RXD2,/TXD2連到/RXD3,/TXD3連到/RXD4,以此類推,最終數(shù)據(jù)由COM9的發(fā)送端/TXD9發(fā)送到PC機(jī)的接收端,通過串口調(diào)試助手檢測數(shù)據(jù)的正確性和完整性。整個(gè)接線關(guān)系如圖1所示。
3 軟件設(shè)計(jì)
3.1 UR8的初始化配置
TL16C754B內(nèi)部寄存器地址如下表所示,每一個(gè)串口的定義都完全相同。
UR8的地址設(shè)置非常靈活,每個(gè)通道的基地址可以自由選擇,采用基地址加偏移量的方法可以確定各寄存器的地址,然后就可以對各寄存器進(jìn)行讀寫操作。值得注意的是,A0沒有使用,各偏移量和基地址為偶地址,這樣就增加了系統(tǒng)的抗干擾能力。
UR8是一款可靈活選擇配置的擴(kuò)展卡,其每一通道的初始化配置均可根據(jù)實(shí)際需要來進(jìn)行。下面以串口2為例,給出初始化配置。
3.2 串口函數(shù)說明
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ù)
3.3 程序說明
軟件設(shè)計(jì)流程圖如圖2所示,程序采用順序查詢模式,依次查詢COM2-COM9的接收FIFO中是否有數(shù)據(jù),如果有數(shù)據(jù)則存儲(chǔ)數(shù)據(jù)再將存儲(chǔ)的數(shù)據(jù)發(fā)出;如果接收FIFO中沒有數(shù)據(jù),則繼續(xù)檢查下一個(gè)串口。結(jié)合硬件的連線方式,一幀數(shù)據(jù)就會(huì)在8個(gè)串口間循環(huán)一次。每一通道都有各自的接收/發(fā)送FIFO和寄存器,各自數(shù)據(jù)的接收和發(fā)送不受影響。
3.4 調(diào)試結(jié)果
調(diào)試過程中,PC機(jī)串口發(fā)送端與UR8的串口2的RXD2相連,發(fā)送的數(shù)據(jù)通過串口發(fā)送端依次通過COM2、COM3、COM4、COM5、COM6、 COM7、COM8、COM9,最終由COM9的發(fā)送端TXD9傳送到PC機(jī)的串口接收端,形成一個(gè)數(shù)據(jù)循環(huán)傳輸?shù)倪^程。PC機(jī)通過串口調(diào)試助手控制串口的發(fā)送和接收,具體調(diào)試原理如圖3所示。
串口調(diào)試助手當(dāng)波特率設(shè)定為115 200 bit/s,一幀數(shù)據(jù)為01到40個(gè)字符時(shí),逐步減小每幀數(shù)據(jù)的發(fā)送間隔,最終測試得到的最短時(shí)間間隔為20 ms。即每20 ms發(fā)送一幀數(shù)據(jù)。PC機(jī)接收到的數(shù)據(jù)顯示在窗口中,實(shí)驗(yàn)最終結(jié)果如圖4所示。
從結(jié)果可以看出,接收窗口接收到的數(shù)據(jù)沒有誤碼,說明數(shù)據(jù)在各個(gè)串口的接收發(fā)送過程中沒有出現(xiàn)錯(cuò)誤;界面最下面顯示S:153000 R:153000,發(fā)送和接收的字節(jié)數(shù)相等,說明沒有丟失數(shù)據(jù)。
圖5給出了時(shí)間間隔減小到19 ms的實(shí)驗(yàn)結(jié)果,從接收窗口可以看出第4行39、40兩個(gè)字符被01、02替代,說明串口發(fā)送一幀數(shù)據(jù)所需要時(shí)間已經(jīng)大于PC機(jī)發(fā)送一幀數(shù)據(jù)的時(shí)間間隔,串口還沒發(fā)完一幀數(shù)據(jù)已經(jīng)被強(qiáng)制執(zhí)行下一次的發(fā)送命令,第8、15、17、22行反映了同樣的問題。說明20 ms為這種擴(kuò)展方案的極限值。
調(diào)試結(jié)果說明,使用UR8成功地?cái)U(kuò)展了586-Engine的異步串行通信能力。
4 結(jié)論
本文介紹的這種串行通信擴(kuò)展方案具有明顯的優(yōu)越性:一是增加了8個(gè)串行通信接口,可以與更多的設(shè)備進(jìn)行連接,極大地提高了586-Engine的異步串行通信能力;二是由于586-Engine內(nèi)核處理數(shù)據(jù)的速度極快并盡最大限度的壓縮程序所占用時(shí)間,使得這種UR8串口擴(kuò)展方案達(dá)到很高的傳輸速率,能夠滿足譬如飛控計(jì)算機(jī)這種高實(shí)時(shí)性、高運(yùn)算量設(shè)備的設(shè)計(jì)需求;三是UR8不僅能擴(kuò)展到586-Engine,還能直接擴(kuò)展到A-Engine、i386- Engine、i386-Drive、586-Drive等TERN公司生產(chǎn)的板卡,省去了設(shè)計(jì)接口電路的麻煩。實(shí)驗(yàn)證明,在實(shí)時(shí)性高、傳輸波特率高、 CPU運(yùn)算量大的情況下,使用UR8進(jìn)行串口擴(kuò)展是一種很實(shí)用的方案。
評論