<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > 基于FPGA和SC16C554實(shí)現多串口通信的方法

基于FPGA和SC16C554實(shí)現多串口通信的方法

作者: 時(shí)間:2009-09-01 來(lái)源:網(wǎng)絡(luò ) 收藏

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

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

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

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

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

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

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

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

  3.3 讀時(shí)序設計

  的通用讀時(shí)序圖如下:

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

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

  4 測試結果及分析

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

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

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

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

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

  5 結束語(yǔ)

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

合成孔徑雷達相關(guān)文章:合成孔徑雷達原理

上一頁(yè) 1 2 下一頁(yè)

關(guān)鍵詞: FPGA SC16C554 多串口通信

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>