1 引言 在許多復雜的測控、測試及數據處理系統中,一般需要與大量的被控對象、被測試設備及自動化儀表進行通信,而這些對象、設備及儀表等所提供的接口大多是標準的異步串行接口形式,因此,在以CPU為核心,與多路外圍設備進行串行通信的測控、測試系統中,需要對串行接口進行擴充,通過選擇功能合適的接口器件完成系統的設計要求。 目前,市場上出現了多種型號的接口芯片, Philips半導體公司生產的四通道通用異步接收/發送器芯片SC26C94是其中之一。它以高集成度、低功耗、高性能、使用靈活等特點被廣泛應用于航空、航海、工業控制等領域中。 2 SC26C94器件 SC26C94是采用COMS技術生產的四通道通用異步接收/發送器芯片,共有4個相互獨立的通道,且每個通道各有4個數字I/O口和2個16位定時/計數器,它們均可以通過編程設置其工作方式。結構框圖如圖1所示。 2.1 SC26C94特點 SC26C94為用戶提供了+5V的供電方式,信號電平與TTL電平兼容,有DIP和PLCC兩種封裝形式,并具有以下特點: ·8字節發送FIFO; ·8字節接收FIFO; ·數據格式:5~8位數據位,包括奇校驗、偶校驗和無校驗、1、1.5、2位停止位; ·發送和接收可設置不同波特率(23種固定波特率:50~230.4k或外部時鐘的1倍或16倍); ·校驗錯誤、幀錯誤和超限錯誤檢測; ·起始位錯誤檢測; ·通道工作模式可編程設置:即普通全雙工、自動回繞、局部循環和遠程循環四種模式; ·中斷優先級可編程設置并自動識別; ·具有掉電保護模式; ·每個接收器配有“看門狗”電路; 2.2 SC26C94寄存器 SC26C94的工作方式是可編程的,工作方式通過對其一系列寄存器設置來定義,因此使用過程中,需要了解以下寄存器功能: (1)MR0:工作方式寄存器0 定義發送和接收寄存器的FIFO工作狀態及接收器“看門狗”是否啟動。 (2)MR1:工作方式寄存器1 該寄存器和MR0組合定義接收FIFO工作狀態及數據格式,包括:5~8位數據位、奇校驗、偶校驗和無校驗、1、1.5、2位停止位。 (3)MR2:工作方式寄存器2 定義通道工作模式(包括普通全雙工、自動回繞、局部循環和遠程循環),停止位(1、1.5、2位)。 (4)CSR:時鐘選擇寄存器 該寄存器與BRG(波特率產生器)、ACR(輔助控制寄存器,選擇波特率設置方式)一起設置接收和發送波特率。 (5)CR:命令寄存器 定義各發送接收端口工作狀態及是否允許發送接收。 (6)SR:狀態寄存器 反映發送接收緩沖器狀態及幀錯、奇偶校驗錯、超限錯等狀態。 (7)IMR:中斷屏蔽寄存器 定義各端口是否允許中斷。 (8)ISR:中斷狀態寄存器 反映當前中斷類型。 (9)CIR:當前中斷寄存器 反映當前中斷的通道號和發送或接收中斷類型。 3 SC26C94在測控系統中的應用 某航空測控系統是以80X86為核心,由A/D、 D/A及開關量控制、10種測試設備組成的,其中測試設備中有8路為標準串行通信,分別為發動機轉速、氣壓、高度、速度、遙測調制器、遙控解調器、地磁方向、GPS等量。系統選用兩片 SC26C94,擴充8個串行口,實現80X86與8路測試設備的通信。 3.1 硬件設計 (1)振蕩電路 SC26C94內部有一個用于構成振蕩器的高增益反向放大器,引腳X1與X2分別是此放大器的輸入端和輸出端。此放大器與外部晶體構成一個振蕩器,此例中采用了內部振蕩電路。如圖2所示,G1(G2)為3.6864MHz晶體;外部電容C2(C5)、 C3(C6)的典型值為24pF;另外,使用外部晶振時,可經過一非門,在非門輸出端并聯一個1k W的上拉電阻,從公共點引出與引腳X1連接。 (2)復位電路 SC26C94復位時間必須保證RESET引腳上出現 1ms以上穩定的高電平,才可實現可靠的復位。因此無論是簡單還是復雜的復位電路,均要保證此條件。圖2中使用了簡單的復位電路,其中R1 (R2)=1.5kW、C1 (C4)=10mF。 (3)接口電路 如圖2所示,通過ISA總線將80X86CPU與SC26C94及其它系統連接起來。其中D1完成總線驅動、隔離和地址譯碼,RXD1~RXD8與TXD1~ TXD8是SC26C94的接收/發送端,分別與外部的8路測試設備連接,實現CPU與外圍設備的通信。 3.2 SC26C94軟件設計 SC26C94的軟件設計首先是對其進行初始化,然后再分別對各個中斷源進行中斷服務程序的設計;可選擇C或匯編語言進行編程。 3.2.1 初始化編程 初始化編程主要選擇芯片工作方式,包括數據格式、波特率、中斷允許、接收或發送緩沖器所允許的字節數等。編程方法及順序如下: (1)復位接收FIFO(CR)復位發送FIFO (CR); (2)禁止DACKN; (3)選擇波特率組別(BRGrate); (4)定義中斷向量類型(ICR); (5)選擇波特率組別(ACR); (6)設置中斷屏蔽寄存器(IMR); (7)指針指向MR0(CR); (8)設置數據格式及波特率(MR0、MR1、 MR2、CSR); (9)接收發送允許(CR)。 以C語言為例對通道A初始化程序設計如下: outportb(uaraddr,uarCRa); outportb(uarcen1,0x20); outportb(uarcen1,0x30); outportb(uaraddr,uarDACKN); outportb(uarcen1,0); outportb(uaraddr,uarBRGrate) outportb(uarcen1,0x00); outportb(uaraddr,uarICR); outportb(uarcen1,0x02); outportb(uaraddr,uarACRab); outportb(uarcen1,0x80); outportb(uaraddr,uarIMRab); outportb(uarcen1,uar1IMRabd); //UAR1 a yx1(laser) outportb(uaraddr,uarCRa) outportb(uarcen1,0xb0); outportb(uaraddr,uarMRa); outportb(uarcen1,0x80); outportb(uarcen1,0x53); outportb(uarcen1,0x07); outportb(uaraddr,uarCSRa); outportb(uarcen1,0x88); outportb(uaraddr,uarCRa); outportb(uarcen1,0x05); 3.2.2 中斷服務程序設計 由于SC26C94四通道中的任何一個都可引起中斷,因此在中斷服務程序中首先要識別中斷源,即識別中斷是由哪一個通道引起,是發送中斷還是接收中斷,是有錯誤還是無錯誤等。流程如圖3所示。 根據流程圖可編程如下: void interrupt (*oldvect2)(); void interrupt UAR1_interrupt(void) { //保護現場// for(ii2=1;ii2<=5;ii2++) { outportb(uaraddr,uarupdateCIR); outportb(uarcen1,0x00); outportb(uaraddr,uarCIR); uar1cir=inportb(uarcen1); outportb(uaraddr,uarISRab); uar1israb=inportb(uarcen1); outportb(uaraddr,uarISRcd); uar1isrcd=inportb(uarcen1); outportb(uaraddr,uarGIBCR); count1=inportb(uarcen1); if (count1 > 8) count1 = 8; stt1=uar1cir&0x1f; if(stt1<=3)break; switch(stt1) { case 0x1c: //中斷服務程序// break; default:; } } //恢復現場// } 4 結論 上述測控系統設計及運行過程表明,SC26C94 具有使用靈活、功能豐富、系統連接方便、編程簡單、可靠性高等特點,另外,其合理的性能價格比及暢通的貨源渠道,表現出較好的工程實用特性,是一種實用的接口芯片,可廣泛應用于自動化儀表、測試、測控及數據處理等系統中。 |