熟女俱乐部五十路二区av,又爽又黄禁片视频1000免费,国产卡一卡二卡三无线乱码新区,中文无码一区二区不卡αv,中文在线中文a

新聞中心

EEPW首頁 > 網絡與存儲 > 設計應用 > 一種基于FPGA和SC16C554實現多串口通信的方

一種基于FPGA和SC16C554實現多串口通信的方

——
作者: 時間:2010-01-25 來源:電子產品世界 收藏

  0 引言

本文引用地址:http://www.bjwjmy.cn/article/103967.htm

  隨著電子技術的飛躍發(fā)展,通用數字信號處理器(DSP)的性能價格比不斷提高,數據處理能力不斷加強,其應用領域日益增多,在數據實時采集及高速數字信號處理中應用尤其廣泛。當DSP獨立構成一個處理單元時,往往需要和外設進行數據交換,其通信能力至關重要。在研制機載合成孔徑雷達系統(tǒng)時,信號處理機作為系統(tǒng)的核心要與飛控系統(tǒng)、穩(wěn)定平臺、雷達信號源以及導航系統(tǒng)等部分進行數據交換;如何實現其與其它部分之間有效的通信成為系統(tǒng)設計的關鍵。串口通信因為其簡單,可靠仍然是廣泛采用的方法之一。

  1 串口擴展方案選擇

  多串口通信常用的實現方案有兩種:一種是軟件實現,采用軟件編程模擬串口,該方法成本低,但編程復雜、開發(fā)周期長、可靠性低。另一種是硬件實現,使用多串口單片機或專用串口擴展芯片,該方法雖然成本較高,但是開發(fā)比較簡單,可靠性高。

  目前比較通用的實現方案是采用通用異步通信芯片實現串口擴展,采用/CPLD實現DSP與異步串口擴展芯片之間的邏輯控制,完全基于DSP接收和發(fā)送數據。該方案的缺點是:當數據量較大、多串口同時工作時占用DSP的時間較長,影響DSP的工作效率,且會造成數據丟失。因此本文提出了一種新的實現方法--基于和通用異步通信芯片實現多串口通信設計。在不進行硬件改動的基礎上,通過在內建立一個緩存機制,實現接收串口芯片的數據,達到一定量時向DSP發(fā)送中斷讀取數據。該設計能極大減少對DSP的占用時間,提高了DSP的工作效率;同時提高了對串口芯片中斷請求的響應速度,解決了數據丟失的問題。

  2 硬件電路設計

  本設計采用通用異步通信芯片來實現串口擴展。主要特點有:

  1.有A、B、C、D四個通道獨立收發(fā)數據;

  2.最高傳輸速率可達5Mbit/s,具有可編程波特率發(fā)生器,便于靈活選擇數據收發(fā)頻率;

  3.具有16字節(jié)的收發(fā)FIFO,且有1、4、8、14字節(jié)四個可選擇的中斷觸發(fā)深度;

  4.可通過編程設置傳輸數據的格式(數據長度,校驗位,停止位);

  5.具有可獨立控制的發(fā)送、接收、線路狀態(tài)和MODEM狀態(tài)中斷;

  6.充分分級的中斷系統(tǒng)控制,全面的線路狀態(tài)報告功能。

  基于FPGA和實現多串口通信的基本原理圖如圖1所示:

  

 

  3 軟件設計及實現

  系統(tǒng)實際工作所需波特率分別為9600、38400、115200、153600 。分析計算可得不同波特率發(fā)送數據時,連續(xù)兩個數據之間的時間間隔如表1所示:

  

 

  由表1可知單個通道連續(xù)兩個中斷產生的最小時間間隔為65μs;因此在65μs的時間內如果可以實現對四個通道分別進行一次讀數據操作,即使是四個通道同時來數據也不會發(fā)生數據丟失的現象。

  3.1 數據的存儲設計

  即在FPGA內部建立一個緩存機制。設計采用在FPGA內部做一個雙端口RAM(DPRAM),用來存儲串口數據,DSP通過訪問DPRAM得到接收的串口數據。

  DPRAM指一個存儲模塊卻包含兩個獨立的端口,這兩個端口共用同一塊地址空間,兩個端口都可以向這塊空間里寫數據或從中讀取數據。DPRAM的讀寫數據的模式包括只讀、只寫、讀寫三種模式,其中讀寫模式又包括先寫后讀、先讀后寫、只寫不讀三種模式,我們采用先讀后寫的模式。

  我們將DPRAM的地址空間分為四部分,分別用來存放四個通道的數據。當FPGA收到數據時,我們可以根據置通道標志寄存器CS[2:0]的值來判斷該數據來自哪個通道,將其存入對應的地址空間,并將該通道對應地址線加一。當該通道存儲數據量達到編程設置的觸發(fā)深度時,就將DSP中斷寄存器dspint置低,向DSP發(fā)送中斷;同時向DPRAM內一事先定義好的公共存儲空間寫入通道標志字。當DSP收到中斷后,首先訪問該公共存儲區(qū)讀取通道標志字,判斷該中斷是由哪個通道產生的;然后調用相應的接收函數從DPRAM內讀取該通道的數據存入指定的地址空間等待處理。

  3.2 讀串口數據狀態(tài)機的設計

  一個完整的讀取串口數據操作需要進行三次讀操作:讀中斷狀態(tài)寄存器(ISR)、讀線狀態(tài)寄存器(LSR)、讀接收保存寄存器(RHR)。由于這三次讀操作具有嚴格的邏輯順序和時序關系,非常適合采用狀態(tài)機來描述;所以本設計采用有限狀態(tài)機來實現讀取串口數據。圖2為讀通道A數據的狀態(tài)轉移圖。

  

 

  State0:空閑狀態(tài),當沒有數據時狀態(tài)機一直停留在空閑狀態(tài);

  State 1:賦IsR寄存器地址給UART_A,置通道標志寄存器CS[2:O]=001(表示A通道);

  State2:讀ISR,判斷中斷類型(04為接受數據準備好中斷),賦LSR寄存器地址給UART、A;

  State3:讀LSR,判斷是否有數據(LSR[0]=1表示有數據在RHR內),賦RHR寄存器地址給UART A;

  State4:讀RHR,讀取串口數據。

  多通道工作時,可以通過增加狀態(tài)機狀態(tài)來實現。完成一個通道的讀數操作需要四個狀態(tài),當四個通道同時工作時,狀態(tài)機的狀態(tài)需要增加到17個。其中Stare5~State8完成對通道B的操作;其中State9~State12完成對通道C的操作;其中State13~State16完成對通道D的操作。

  3.3 讀時序設計

  SC16C554的通用讀時序圖如下:

  

 

  其中t6s=0ns t6h=0ns t7h=0ns t7d=10ns t7w=26nst9d=20ns t12h=15ns都為最小值,t12d max=26ns由圖3可以看出:對串口進行一次讀操作所需的時間T=t6s+t7d+t7w+t9d所以T最小為56ns。本設計采用60MHz時鐘分頻出10MHz時鐘,在一個1OMHz時鐘周期(100ns)內完成一次讀操作。用6 0 MH z時鐘同步一個計數器cscount[2:0],在第一個6 0MH z時鐘的上升沿(cs_count=3’b000時)置CS為低,并賦對應的地址給UART A;在第二個60MHz時鐘的上升沿(cs_cout=3’b001時)置UART IOR為低;在第四個60MHz時鐘的上升沿(cs_count=3’b011時)置CS、UART IOR為高。這樣UART IOR有效時間為兩個時鐘周期(33ns),且比CS延時一個時鐘周期(17ns),完全滿足圖3讀時序的要求。

  由圖2可知,由空閑狀態(tài)State0到完成一次串口數據的讀取,共需要500ns的時間。這樣多通道工作時連續(xù)完成四個通道的讀數操作共需2μs,遠小于單個通道連續(xù)兩個中斷產生的時間間隔65μs;這樣有效解決了多通道工作時,當讀取數據的過程中其它通道中斷丟失的問題。如:當讀通道A數據的過程中,通道B產生中斷請求;則狀態(tài)機完成通道A數據讀取返回到空閑狀態(tài)State0,檢測到INTB為高,狀態(tài)機進入下一個狀態(tài)(State5)進行通道B的數據接收。

  4 測試結果及分析

  我們分別對兩種方案進行了測試,結果如下:表2為完全基于DSP接收和發(fā)送數據的通信性能測試;表3為基于FPGA接收串口數據的通信性能測試。

  

 

  波特率發(fā)送周期數據長度測試結果

  比較兩種方案的測試結果可以得出以下結論:

  1單通道工作時:兩種方案的通信性能是一樣的。

  2多通道同時工作時:由表2測試結果可以看出,每次發(fā)送的數據量過大、或發(fā)送周期較小時,由于DSP對串口芯片中斷請求的處理速度問題就會造成數據丟失。由表3測試結果可以看出,四通道工作時,發(fā)送數據長度為64字節(jié),通道發(fā)送周期最小可達10ms;如果發(fā)送數據長度減小,通道發(fā)送周期還可以更小。該設計性能遠遠好于方案改進前完全基于DSP接收和發(fā)送數據的性能;能滿足系統(tǒng)實際工作的需要。

  

 

  5 結束語

  基于FPGA接收數據的設計有兩個突出的優(yōu)點:1、極大提高了對串口中斷的響應速度,避免了多通道工作、完全基于DSP接收和發(fā)送數據時數據大量丟失的情況;2、完全可編程設置DSP中斷產生條件,解決了原來串口芯片只有1、4、8、14字節(jié)四個觸發(fā)深度的限制,可編程設置存儲空間范圍內的任意字節(jié)的觸發(fā)深度,大大減少了DSP的中斷數量,提高了DSP的工作效率。另外程序具有較強的可移植性,當設計需要修改時,只需修改少量代碼,有效降低了設計周期。

合成孔徑雷達相關文章:合成孔徑雷達原理


關鍵詞: FPGA SC16C554

評論


相關推薦

技術專區(qū)

關閉