一種基于FPGA和SC16C554實(shí)現(xiàn)多串口通信的方法
隨著電子技術(shù)的飛躍發(fā)展,通用數(shù)字信號(hào)處理器(DSP)的性能價(jià)格比不斷提高,數(shù)據(jù)處理能力不斷加強(qiáng),其應(yīng)用領(lǐng)域日益增多,在數(shù)據(jù)實(shí)時(shí)采集及高速數(shù)字信號(hào)處理中應(yīng)用尤其廣泛。當(dāng)DSP獨(dú)立構(gòu)成一個(gè)處理單元時(shí),往往需要和外設(shè)進(jìn)行數(shù)據(jù)交換,其通信能力至關(guān)重要。在研制機(jī)載合成孔徑雷達(dá)系統(tǒng)時(shí),信號(hào)處理機(jī)作為系統(tǒng)的核心要與飛控系統(tǒng)、穩(wěn)定平臺(tái)、雷達(dá)信號(hào)源以及導(dǎo)航系統(tǒng)等部分進(jìn)行數(shù)據(jù)交換;如何實(shí)現(xiàn)其與其它部分之間有效的通信成為系統(tǒng)設(shè)計(jì)的關(guān)鍵。串口通信因?yàn)槠浜?jiǎn)單,可靠仍然是廣泛采用的方法之一。
1 串口擴(kuò)展方案選擇
多串口通信常用的實(shí)現(xiàn)方案有兩種:一種是軟件實(shí)現(xiàn),采用軟件編程模擬串口,該方法成本低,但編程復(fù)雜、開發(fā)周期長(zhǎng)、可靠性低。另一種是硬件實(shí)現(xiàn),使用多串口單片機(jī)或?qū)S么跀U(kuò)展芯片,該方法雖然成本較高,但是開發(fā)比較簡(jiǎn)單,可靠性高。
目前比較通用的實(shí)現(xiàn)方案是采用通用異步通信芯片實(shí)現(xiàn)串口擴(kuò)展,采用FPGA/CPLD實(shí)現(xiàn)DSP與異步串口擴(kuò)展芯片之間的邏輯控制,完全基于DSP接收和發(fā)送數(shù)據(jù)。該方案的缺點(diǎn)是:當(dāng)數(shù)據(jù)量較大、多串口同時(shí)工作時(shí)占用DSP的時(shí)間較長(zhǎng),影響DSP的工作效率,且會(huì)造成數(shù)據(jù)丟失。因此本文提出了一種新的實(shí)現(xiàn)方法--基于FPGA和通用異步通信芯片實(shí)現(xiàn)多串口通信設(shè)計(jì)。在不進(jìn)行硬件改動(dòng)的基礎(chǔ)上,通過(guò)在FPGA內(nèi)建立一個(gè)緩存機(jī)制,實(shí)現(xiàn)接收串口芯片的數(shù)據(jù),達(dá)到一定量時(shí)向DSP發(fā)送中斷讀取數(shù)據(jù)。該設(shè)計(jì)能極大減少對(duì)DSP的占用時(shí)間,提高了DSP的工作效率;同時(shí)提高了對(duì)串口芯片中斷請(qǐng)求的響應(yīng)速度,解決了數(shù)據(jù)丟失的問(wèn)題。
2 硬件電路設(shè)計(jì)
本設(shè)計(jì)采用通用異步通信芯片SC16C554來(lái)實(shí)現(xiàn)串口擴(kuò)展。SC16C554主要特點(diǎn)有:
1.有A、B、C、D四個(gè)通道獨(dú)立收發(fā)數(shù)據(jù);
2.最高傳輸速率可達(dá)5Mbit/s,具有可編程波特率發(fā)生器,便于靈活選擇數(shù)據(jù)收發(fā)頻率;
3.具有16字節(jié)的收發(fā)FIFO,且有1、4、8、14字節(jié)四個(gè)可選擇的中斷觸發(fā)深度;
4.可通過(guò)編程設(shè)置傳輸數(shù)據(jù)的格式(數(shù)據(jù)長(zhǎng)度,校驗(yàn)位,停止位);
5.具有可獨(dú)立控制的發(fā)送、接收、線路狀態(tài)和MODEM狀態(tài)中斷;
6.充分分級(jí)的中斷系統(tǒng)控制,全面的線路狀態(tài)報(bào)告功能。
基于FPGA和SC16C554實(shí)現(xiàn)多串口通信的基本原理圖如圖1所示:
3 軟件設(shè)計(jì)及實(shí)現(xiàn)
系統(tǒng)實(shí)際工作所需波特率分別為9600、38400、115200、153600 。分析計(jì)算可得不同波特率發(fā)送數(shù)據(jù)時(shí),連續(xù)兩個(gè)數(shù)據(jù)之間的時(shí)間間隔如表1所示:
由表1可知單個(gè)通道連續(xù)兩個(gè)中斷產(chǎn)生的最小時(shí)間間隔為65μs;因此在65μs的時(shí)間內(nèi)如果可以實(shí)現(xiàn)對(duì)四個(gè)通道分別進(jìn)行一次讀數(shù)據(jù)操作,即使是四個(gè)通道同時(shí)來(lái)數(shù)據(jù)也不會(huì)發(fā)生數(shù)據(jù)丟失的現(xiàn)象。
3.1 數(shù)據(jù)的存儲(chǔ)設(shè)計(jì)
即在FPGA內(nèi)部建立一個(gè)緩存機(jī)制。設(shè)計(jì)采用在FPGA內(nèi)部做一個(gè)雙端口RAM(DPRAM),用來(lái)存儲(chǔ)串口數(shù)據(jù),DSP通過(guò)訪問(wèn)DPRAM得到接收的串口數(shù)據(jù)。
DPRAM指一個(gè)存儲(chǔ)模塊卻包含兩個(gè)獨(dú)立的端口,這兩個(gè)端口共用同一塊地址空間,兩個(gè)端口都可以向這塊空間里寫數(shù)據(jù)或從中讀取數(shù)據(jù)。DPRAM的讀寫數(shù)據(jù)的模式包括只讀、只寫、讀寫三種模式,其中讀寫模式又包括先寫后讀、先讀后寫、只寫不讀三種模式,我們采用先讀后寫的模式。
我們將DPRAM的地址空間分為四部分,分別用來(lái)存放四個(gè)通道的數(shù)據(jù)。當(dāng)FPGA收到數(shù)據(jù)時(shí),我們可以根據(jù)置通道標(biāo)志寄存器CS[2:0]的值來(lái)判斷該數(shù)據(jù)來(lái)自哪個(gè)通道,將其存入對(duì)應(yīng)的地址空間,并將該通道對(duì)應(yīng)地址線加一。當(dāng)該通道存儲(chǔ)數(shù)據(jù)量達(dá)到編程設(shè)置的觸發(fā)深度時(shí),就將DSP中斷寄存器dspint置低,向DSP發(fā)送中斷;同時(shí)向DPRAM內(nèi)一事先定義好的公共存儲(chǔ)空間寫入通道標(biāo)志字。當(dāng)DSP收到中斷后,首先訪問(wèn)該公共存儲(chǔ)區(qū)讀取通道標(biāo)志字,判斷該中斷是由哪個(gè)通道產(chǎn)生的;然后調(diào)用相應(yīng)的接收函數(shù)從DPRAM內(nèi)讀取該通道的數(shù)據(jù)存入指定的地址空間等待處理。
3.2 讀串口數(shù)據(jù)狀態(tài)機(jī)的設(shè)計(jì)
一個(gè)完整的讀取串口數(shù)據(jù)操作需要進(jìn)行三次讀操作:讀中斷狀態(tài)寄存器(ISR)、讀線狀態(tài)寄存器(LSR)、讀接收保存寄存器(RHR)。由于這三次讀操作具有嚴(yán)格的邏輯順序和時(shí)序關(guān)系,非常適合采用狀態(tài)機(jī)來(lái)描述;所以本設(shè)計(jì)采用有限狀態(tài)機(jī)來(lái)實(shí)現(xiàn)讀取串口數(shù)據(jù)。圖2為讀通道A數(shù)據(jù)的狀態(tài)轉(zhuǎn)移圖。
評(píng)論