在研制無線分組網絡路由控制器時,采用了雙DSP結構進行數據處理,另外還需擴展8個串口,很顯然這是DSP本身所無法解決的,故必須進行串口擴展。
常用串口擴展方法:
從本質上講,所有的串口擴展接口電路都是以并行數據形式與CPU接口,而以串行數據形式與外部邏輯接口。它們的基本功能是從外部邏輯接收串行數據,轉換成并行數據后傳送給CPU;或者從CPU并行輸出的數據,轉變成串行數據后輸出給外部邏輯。串行通信接口電路至少包括一個接收器和一個發送器,而接收器和發送器都分別包括一個數據寄存器和一個移位寄存器,以便實現CPU輸出→并行→串行→發送或接收→串行→并行→CPU輸入操作。
串口擴展的方法一般有三種,一是全部應用硬件,由中小集成電路構成串口,這種方法已很少使用;二是利用通用I/O口,由軟件來設定波特率;三是應用串行接口器件(如UART、USRT、USART等)來擴展串口,CPU只需通過這些接口器件所提供的接口來編程,就可以實現串行通信。
SCC85C30的性能特點
對一個需進行實時多路并行數據處理的系統來說,選用一種高效可靠的串行通信接口器件是非常重要的。Zilog公司的串行通信控制器(SCC)85C30就是一種高性能的串行通信接口器件,其功能比其它USART(Universal Synchronous Asynchronous Receiver/Transmitter通用異步同步收發器)強大的多。85C30串行通信控制器(SCC)是一種雙通道、多規約數據通信外圍器件,該芯片為處理各種有效的串行通信規程提供多功能支持:可起到串-并、并-串的轉換器/控制器作用,它在程序控制下可滿足串行通信上廣泛多樣的用途;具有波特率發生器、數字鎖相環和晶體振蕩器,使外部邏輯得到簡化;能以多種方式產生和檢測CRC碼,并可通過多種方式編程來檢查數據的完整性,有同時在兩條通道上控制調制-解調的能力。在不需要這些控制的用途中,調制-解調控制器可作為通用I/O。
85C30的每路信道可存取14個寫寄存器和7個讀寄存器,用戶可進行配置使其能處理全部非同步格式,而與數據長度、停止位的數目或奇偶要求無關。還能處理所有的同步格式,包括按字符、按字節的存取規程。85C30還具有下列功能:通過檢查奇偶位改變規程;插入或刪除字符,生成CRC,并加以檢查;生成斷點和異常中止碼,并加以檢測;以及其它許多與規程有關的功能。
85C30內部結構能提供連接多路轉換總線和非多路轉換總線所必要的全部中斷和控制邏輯。此外還有接口邏輯,用于監視調制解調器和外圍控制輸入輸出。其控制信號都是通用的,不僅用于調制解調控制,而且適用于控制多種外圍設備。數據操作和控制聯接都通過內部的讀和寫寄存器進行,這些寄存器經編程之后,可使85C30執行各種功能(硬件開銷小),即在程序排隊之前或之中對寄存器賦值,以決定85C30如何建立一個給定的通信規程。
85C30采用附加電路支持串行通信。設計人員可以選擇內部波特率發生器,選擇頻率并對85C30中的幾個電路之一的輸出編程。可在程序控制下對幾種標準格式進行編碼和譯碼。另外,還可為DPLL、波特率發生器接收器和發送器選擇各種定時部件。
雙DSP對多個SCC的控制設計
對一個進行實時并行多通道數據處理的雙DSP系統來說,其擴展的串口也必須滿足系統的實行性要求。串行接口器件性能的好壞以及雙DSP對多個串行通信控制器(SCC)控制的好壞直接影響到系統的整體性能。
雙DSP系統對多個SCC控制,采用4片Zilog公司的SCC(85C30)使雙DSP(TMS320F206)在原有2個異步串口和2個同步串口的基礎上又增加了8個串行口(可根據需要設定為異步口或設定為同步口)。
85C30是較為復雜的器件,要充分利用其功能,需對其進行合理編程。在編程時需對其諸多寄存器進行操作,這在單個DSP情況下也是較為復雜的。用雙DSP對其控制,以及雙DSP對多SCC的控制情況更為復雜,需解決以下的問題:
(1)對SCC訪問的優先權問題;
(2)數據線、地址線、選通控制線的方向問題;
(3)雙DSP相互間握手、時序問題;
(4)兩套總線間干擾的消除問題及總線切換時的誤動作問題;
為解決這些問題,需采取硬件設計和軟件設計相結合的辦法,使DSP對SCC的控制更可靠,效率更高。
在硬件的設計上:
(1)采用了兩套獨立的數據線和地址線,重點解決了讀/寫、片選等切換邏輯的設計問題;
(2)采用雙向三態總線驅動器(如74LS245)實現數據、地址、控制總線的隔離;
(3)把DSP(TMS320F206)的IO0、IO1、IO2、IO3設置為對SCC的訪問控制線。實現DSP對SCC的分時復用。
在軟件設計上:
(1)對兩個DSP進行了分工,設定DSP1負責接收數據,DSP2負責發送數據;
(2)設定DSP1從第1個SCC開始向后查詢,DSP2從第三個SCC向后查詢,最大限度地降低二者忙閑比,提高了系統的實時性。
(3)把IO0、IO1設定為發送端口,把IO2、IO3設定為接收端口。IO0-IO3值所表達含義如附表所示。
(4)對SCC分時選通。訪問某一SCC前先查詢IO2、IO3以確定另一DSP是否正在訪問它,若另一DSP不訪問該SCC,則訪問之首先把該SCC的編號通過IO0、IO1發送給另一DSP;若另一DSP正訪問它,則跳過該SCC,訪問下一SCC,同樣也把該SCC的編號通過IO0、IO1發送給另一DSP。