UART控制器設(shè)計_第1頁
UART控制器設(shè)計_第2頁
UART控制器設(shè)計_第3頁
UART控制器設(shè)計_第4頁
UART控制器設(shè)計_第5頁
已閱讀5頁,還剩18頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、西安電子科技大學(xué)可編程邏輯器件原理、應(yīng)用與實驗課程實驗報告實驗名稱UART控制器設(shè)計及驗證研究生院學(xué)院代培生班成績姓名學(xué)號同作者實驗日期2017年4月23日指導(dǎo)教師評語:指導(dǎo)教師:年月日實驗報告內(nèi)容基本要求及參考格式一、實驗?zāi)康亩嶒炈脙x器(或?qū)嶒灜h(huán)境)三、實驗基本原理及步驟(或方案設(shè)計及理論計算)四、實驗數(shù)據(jù)記錄(或仿真及軟件設(shè)計)五、實驗結(jié)果分析及回答問題(或測試環(huán)境及測試結(jié)果)目錄一任務(wù)簡介11、1實驗?zāi)康?1、2開發(fā)工具平臺1二模塊設(shè)計22、1輸入模塊設(shè)計22、1、1機械按鍵消抖22、1、2矩陣鍵盤掃描32、1、3參量輸入及顯示輸入52、2顯示模塊62、3三態(tài)門控制模塊82、4UA

2、RT通信協(xié)議幀格式及波特率設(shè)置92、5UART通信模塊102、5、1串口數(shù)據(jù)發(fā)送模塊112、5、2串口數(shù)據(jù)接收模塊12三系統(tǒng)介紹133、1系統(tǒng)結(jié)構(gòu)介紹133、2系統(tǒng)子模塊介紹153、3開發(fā)板實驗結(jié)果17四總結(jié)20一任務(wù)簡介1、1實驗?zāi)康谋敬稳蝿?wù)的目標為設(shè)計一個基于FPGA的串口通信控制器,具體技術(shù)要求如下:(1)實現(xiàn)與PC的雙向通信;(2)可以通過輸入模塊在開發(fā)板上定義向PC發(fā)送的數(shù)據(jù);(3)數(shù)據(jù)幀長度可調(diào)(6/7/8位);(4)通信波特率可調(diào);(5)在數(shù)碼管上實現(xiàn)波特率、輸入數(shù)據(jù)、接收數(shù)據(jù)的顯示。(6)按鍵A用于接收模式與輸入模式的選擇,按鍵B用于選擇輸入模式為波特率設(shè)置還就是發(fā)送數(shù)據(jù)設(shè)置,

3、按鍵C為發(fā)送確認鍵,按鍵D用于選擇數(shù)據(jù)幀長度,矩陣鍵盤(09)用于輸入波特率因子與發(fā)送數(shù)據(jù)(十六進制顯示);各種模式均有數(shù)碼管顯示相應(yīng)內(nèi)容淇中數(shù)據(jù)幀長度由四個LED燈表示。(7)操作流程:1、通信參數(shù)設(shè)置:在開發(fā)板上選擇數(shù)據(jù)幀長度、設(shè)置波特率、輸入發(fā)送數(shù)據(jù)幀;在PC端的串口通信助手中設(shè)置波特率與數(shù)據(jù)幀長度;2、數(shù)據(jù)發(fā)送:按下C鍵向PC發(fā)送數(shù)據(jù),在PC端確認接收的數(shù)據(jù);3、數(shù)據(jù)接收:由PC端向開發(fā)板發(fā)送數(shù)據(jù),在開發(fā)板上選擇數(shù)據(jù)接收模式即可顯示4、默認設(shè)置:UART控制器默認波特率為9600,默認發(fā)送數(shù)據(jù)為8'h18;(8)以上內(nèi)容均需在開發(fā)板上驗證;實驗截圖在本文第三部分給出。1、2開發(fā)

4、工具平臺(1)基于CycloneIIEP2C5Q208C8核心的MAGIC3200_EP2c5開發(fā)板,具有四位掃描式數(shù)碼管,RS232串口等外設(shè),時鐘CLK為50MHz;(2)開發(fā)軟件為QuartusII13sp;(3)串口通信助手;(4)基于LP2303的USB-UART轉(zhuǎn)接線,用于與筆記本電腦進行串口通信。MAGIC3200_EP2C5 開發(fā)板USB-UART轉(zhuǎn)接線RS232 串 口串口通信助手圖1、1開發(fā)平臺設(shè)備二模塊設(shè)計2、1輸入模塊設(shè)計輸入模塊采用了矩陣鍵盤與獨立按鍵,獨立按鍵用于模式選擇與發(fā)送確認,矩陣鍵盤用于數(shù)據(jù)的輸入。關(guān)于消抖部分,對于矩陣鍵盤來說只要設(shè)置合適的掃描頻率就可以實

5、現(xiàn)消抖的功能,而對于獨立按鍵來說就必須設(shè)計相應(yīng)的消抖模塊。2、2、1機械按鍵消抖模塊簡介機械按鍵按下時的機械抖動會產(chǎn)生很多個下降沿,而在邏輯上希望機械按鍵按下一次只產(chǎn)生一個下降沿,因此要進行按鍵消抖。按鍵防抖動其實就是通過延時判斷來做的,因為這種毛刺持續(xù)時間都在ms級,當(dāng)檢測到按鍵狀態(tài)有變化時,經(jīng)過一定延時后再次進行確認。消抖模塊如圖2、1所示,din為機械按鍵輸入,dout為消抖后的輸出。insl3圖2、1消抖模塊圖關(guān)鍵程序圖2、2為鍵盤消抖的狀態(tài)轉(zhuǎn)移圖,按鍵信號din按下時為低電平,平時為高電平。(1)狀態(tài)S0:輸入din信號產(chǎn)生跳變后,進入斗犬態(tài)S0o如果din為0,進入S1狀態(tài)。否則循

6、環(huán)檢測。(2)狀態(tài)S1:如果再次檢測到輸入信號為邏輯0信號,則表明有按鍵按下,dout為0。狀態(tài)機結(jié)束。狀態(tài)機激勵時鐘周期為0、1s,以此實現(xiàn)延時,即按鍵按下后0、1s檢測按鍵信號,若按鍵信號為低電平,則輸出低電平完成消抖。din=1din=0消抖程序如下:always(posedgekeyclk)狀態(tài)機激勵beginif(RESET=0)pre_s=s0;elsepre_s=next_s;endalways(pre_s,next_s,din)/檢查按鍵begincase(pre_s)50: begindout=1;if(din=0)next_s=s1;elsenext_s=s0;end51:

7、 begindout=1;if(din=0)dout=0;elsenext_s=s0;enddefault:next_s=s0;endcaseend2、2、2矩陣鍵盤掃描簡介及原理圖鍵盤掃描最大的優(yōu)點就就是能節(jié)約I/O。如果使用普通的方法,那么16個按鍵就需要16個I/O口,但通過掃描的方式來完成,卻只需要8個,按鍵越多它所顯現(xiàn)的優(yōu)勢也就越明顯。矩陣鍵盤原理電路如圖2、3。鍵盤掃描將使用彳T掃描法實現(xiàn),即逐行掃描查詢法。具體操作為:行線的初始狀態(tài)輸出都為0,只要有高電平出現(xiàn),表明有按鍵被按下。在確認有按鍵被按下的情況下,需要確定具體哪個按鍵被按下。以一定的掃描頻率依次將行線(key_out)電

8、平拉高,并檢測列線的輸入(key_in),確定具體哪個按鍵被按下。KLEY OUT網(wǎng) hJJNi2| KLEIai%LEY OIJTH) .Xspy cm”kfy amrr圖2、3矩陣鍵盤原理電路圖2、4鍵盤掃描模塊圖圖2、5鍵盤掃描模塊原理圖鍵盤掃描模塊如如圖2、4所示,輸入為reset信號,clk信號(50MHz時鐘),模式切換開關(guān)swith,列掃描信號key_in;輸出為行掃描信號key_out,波特率因子bote,鍵盤輸入值輸出Data0Data4,Data1、Data2、Data3、Data4為輸入模塊向顯示模塊的輸出,它們分別對應(yīng)四位數(shù)碼管千位、百位、十位、個位顯示的內(nèi)容。send

9、_data為發(fā)送數(shù)據(jù)幀寄存器,圖中給出的就是8位模式下的鍵盤掃描模塊,所以send_data位寬為8位,在7位與6位模式下掃描模塊send_data的位寬分別為7位與6位淇余部分與8位模式下的鍵盤掃描模塊基本一致。speaker為蜂鳴器信號,因為開發(fā)板設(shè)計上的一些問題,若不定義開發(fā)板的蜂鳴器管腳,蜂鳴器有時會響。關(guān)鍵程序其中掃描頻率由鍵盤掃描模塊內(nèi)置的分頻模塊實現(xiàn):always(posedgeclkornegedgereset)beginif(reset=0)time10ms<=0;/最初設(shè)計掃描時鐘周期為10ms,后來有改動elseif(timecnt=1200000)掃描頻率為20H

10、z(20ms)begintime10ms<=time10ms;timecnt<=0;endelsetimecnt<=timecnt+1;end行輪掃的主要程序如下:key_out<=scanvalue;輸出行掃描值cpy_scanvalue<=scanvalue;備份掃描值,用于進行列掃描case(scanvalue)/亍輪掃4'b0001:scanvalue<=4'b0010;4'b0010:scanvalue<=4'b0100;4'b0100:scanvalue<=4'b1000;4'b

11、1000:scanvalue<=4'b0001;default:scanvalue<=4'b0001;endcase將鍵盤掃描與數(shù)據(jù)輸入關(guān)聯(lián)的程序如下:case(key_in,cpy_scanvalue)8'b00010001:beginData0<=1;counter<=counter+1;end/對應(yīng)鍵盤"1"8'b00100001:beginData0<=2;counter<=counter+1;end/對應(yīng)鍵盤"2"8'b01000001:beginData0<=3

12、;counter<=counter+1;end/對應(yīng)鍵盤"3"8'b10000001:beginData0<=4;counter<=counter+1;end/未使用8'b00010010:beginData0<=4;counter<=counter+1;end/對應(yīng)鍵盤"4"8'b00100010:beginData0<=5;counter<=counter+1;end/對應(yīng)鍵盤"5"8'b01000010:beginData0<=6;counter&l

13、t;=counter+1;end/對應(yīng)鍵盤"6"8'b10000010:beginData0<=4;counter<=counter+1;end/未使用8'b00010100:beginData0<=7;counter<=counter+1;end/對應(yīng)鍵盤“7”8'b00100100:beginData0<=8;counter<=counter+1;end/對應(yīng)鍵盤“8”8'b01000100:beginData0<=9;counter<=counter+1;end/對應(yīng)鍵盤“9”8'

14、b10000100:beginData0<=4;counter<=counter+1;end/未使用8'b00011000:beginData0<=0;counter<=counter+1;end/對應(yīng)鍵盤“0”8'b00101000:beginData0<=2;counter<=counter+1;end/未使用8'b01001000:beginData0<=3;counter<=counter+1;end/未使用8'b10001000:beginData0<=4;counter<=counter+1

15、;end/未使用default:;/無鍵盤按下endcase如以上程序所示,每當(dāng)按下鍵盤對應(yīng)按鍵后,將有對應(yīng)數(shù)值寫入寄存器Data0中,寄存器counter為當(dāng)前輸入對應(yīng)的位數(shù)。2、2、3參量輸入及顯示輸入鍵盤輸入數(shù)值的存儲程序如下:switch1=0(控制信號下文將詳細介紹)時進入波特率設(shè)置模式,輸入的數(shù)值為波特率因子bote,bote為一個四位數(shù),此模式下可以通過矩陣鍵盤從千位到個位依次寫數(shù),將每次輸入的值依次寫入四位寄存器Data1、Data2、Data3、Data4中,最終組成一個完整的十進制四位數(shù),其中counter為位數(shù)標志位。Data1、Data2、Data3、Data4為輸入模

16、塊向顯示模塊的輸出,它們分別對應(yīng)四位數(shù)碼管千位、百位、十位、個位顯示的內(nèi)容。if(switch1=0)beginbote<=Data1*1000+Data2*100+Data3*10+Data4;case(counter)4'b0001:Data1<=Data0;4'b0010:Data2<=Data0;4'b0011:Data3<=Data0;4'b0100:Data4<=Data0;default:beginData1<=5;Data2<=2;Data3<=0;Data4<=8;endendcaseif(

17、counter=5)counter<=0;endswitch=1時進入發(fā)送數(shù)據(jù)設(shè)置模式,最終把鍵盤輸入值寫入send_data,發(fā)送寄存器send_data為一個68位(可設(shè)置)的二進制數(shù),用于存儲將要發(fā)送的數(shù)據(jù)幀。因為四個Data寄存器位寬為4位,所以send_data的內(nèi)容只需要由兩個寄存器的數(shù)據(jù)構(gòu)成。令Datal、Data2為10,意思為關(guān)閉千位、百位的數(shù)碼管,這在顯示模塊部分將會詳細介紹。elsebeginsend_data<=Data3,Data4;Data1<=10;Data2<=10;case(counter)4'b0001:Data3<=D

18、ata0;4'b0010:Data4<=Data0;default:beginData3<=8;Data4<=8;endendcaseif(counter>2)counter<=0;end仿真結(jié)果:pnmjw.wwwj|jmvijirtnjijujvuuijvwvvvvwunjuwwmj(曲工。4%???REIE一口口二-00_;,.1:-亡,xm13工EX.q!oyTio乂5Yw乂【。工一1U$wX3一X!Xu-g1K8<0|Mlizi襦£tafe注"jj':'j:jjJX01口?X血"X.用.1.M.

19、)一些X,叫X,叫<J印QEOQJX_.IOIW10CT.XOWOJPKIX.loroicxi.3rciet.IlatdDDa.1siIlfttk3riatWTfl3*d圖2、6鍵盤掃描模塊仿真為了方便觀察結(jié)果,仿真中加快了時鐘與一些分頻的頻率。從仿真圖像可以瞧出,行線掃描信號key_out以一定頻率掃描,當(dāng)列掃描信號key_in有所輸入時,輸入寄存器Data0、Data1、Data2、Data3、Data4都有相應(yīng)的變化。而且當(dāng)切換開關(guān)switch按下時,輸出信號bote與send_data都發(fā)生了相應(yīng)變化,這說明波特率設(shè)置模式與發(fā)送數(shù)據(jù)寫入模式的切換功能正常運行。仿真表明輸入模塊在功

20、能上就是可行的。2、2顯示模塊模塊簡介及原理圖顯示模塊用于驅(qū)動開發(fā)板上的四位數(shù)碼管顯示串口數(shù)據(jù),每個數(shù)碼管有八個控制位與一個片選位,還有一個用于顯示控制位。由于開發(fā)板只給出了13個引腳用于控制四個數(shù)碼管因此必須采用數(shù)碼管掃描的形式來進行顯示。因為人眼有視覺暫留的特性、一般說來,當(dāng)1秒鐘刷新24次以上,人眼就無法區(qū)分而認為四個數(shù)碼管就是一起亮的。掃描具有節(jié)約引腳的優(yōu)點,如果并行驅(qū)動四位數(shù)碼管,那么至少需要33個引腳,而掃描法只需要13個引腳就可以實現(xiàn)。使用的就是共陽數(shù)碼管,引腳電平為低時點亮。rDHJ6Eu1LED_AClkLEO.flDal:a113.j0LED/0LBR網(wǎng)3 QLED.ENI

21、DMa4|3 0皿豐L60.F3LED_G4LE3J/CC1LED.VCC2LEOVCC3LS3_VGG4LEjPQlrtMarst4J-l.圖2、7顯示模塊顯示模塊如圖2、6所示,輸入為reset信號,50Mhz時鐘信號clk,前文提到的Data1、Data2、Data3、Data4顯示內(nèi)容輸入,分別對應(yīng)四位數(shù)碼管千位、百位、十位、個位的顯示內(nèi)容。輸出信號中的LED_ALED_G、LED_Point、LED_PointTime均為顯示控制信號;LED_VCC1LED_VCC4為LED片選信號,高電平有效,LED_EN1為使能信號。關(guān)鍵程序以下為數(shù)碼管掃描的關(guān)鍵程序:always(posedg

22、eclk)beginif(reset='b0)count<=0;elseif(count=6000)設(shè)置數(shù)碼管掃描頻率begincount<=0;if(scancnt>3)scancnt<=0;elsescancnt<=scancnt+1;endelsecount<=count+1;end以上程序主要作用就是,使變量scancnt掃描頻率在03內(nèi)累加循環(huán),scancnt有0123共四個狀態(tài),通過scancnt控制數(shù)碼管片選信號,分別在四個數(shù)碼管上顯示內(nèi)容。譯碼部分見附錄??梢郧瞥鲭S著Data1與Data1的變化,LED控制信號與LED片選信號同時變化

23、,說明顯示模塊功能正常。2、3三態(tài)門控制模塊模塊簡介及原理圖在本任務(wù)頂層的設(shè)計中有些部分需要使用多輸入三態(tài)門來控制數(shù)據(jù)的傳輸,本部分將以任務(wù)中的一個多輸入三態(tài)門來介紹該模塊。模塊的原理圖與模塊圖如圖2、9所示圖2、9三態(tài)門模塊如圖所示,data1data4為輸入數(shù)據(jù),D1D4為輸出,若en=1則D1D4輸出data1data4的數(shù)據(jù),若en=0則D1D4輸出高阻。關(guān)鍵程序if(en=1)beginD1<=data1;D2<=data2;D3<=data3;D4<=data4;endelsebeginD1<=4'bzzzz;D2<=4'bzzz

24、z;D3<=4'bzzzz;D4<=4'bzzzz;end仿真結(jié)果鈔mIdE21X00j后三l±lKi(211此jAIU國D321田IS田D4kZZ.;52?2如田datalrID國idstaZcco和國熊c00詼5I±jc3fliiII圖2、10三態(tài)門仿真從仿真結(jié)果中可以瞧出,當(dāng)en為低電平時輸出為高阻,en為高電平時輸出等于輸入。這說明三態(tài)門模塊功能正確。2、4UART通信協(xié)議幀格式及波特率設(shè)置模塊簡介及原理圖基本的UART幀格式如圖所示。一個符M數(shù)據(jù)位停:tt 亡F*時枸 闈 船始世圖2、11URAT幀格式基本的UART幀格式包括起始位、數(shù)

25、據(jù)位、校驗位與停止位四部分。一個字符幀數(shù)據(jù)由四部分組成:一個起始位(邏輯為0),緊接著一個5位到8位可變的數(shù)據(jù)位D0-D7,一個奇偶校驗位(可選擇),最后就是停止位(邏輯1)。在沒有數(shù)據(jù)被傳輸時,串行數(shù)據(jù)線上一直就是邏輯高電平。本次任務(wù)未設(shè)置奇偶校驗。幀格式設(shè)置本次所設(shè)計的UART控制器支持長度6、7、8位的幀格式,實現(xiàn)方式將在下文系統(tǒng)介紹中敘述,各個模塊間相互的切換由一個控制模塊實現(xiàn),模塊圖形由下圖所示:controlfinalDDDc2.0CLKl&d3.DJRESETinatG圖2、12控制模塊圖如圖所示,模塊輸入為50MHz時鐘CLK、RESET復(fù)位信號,機械按鍵D對應(yīng)DDD信

26、號,輸出信號為數(shù)據(jù)幀長度控制信號c2、0,led3、0為數(shù)據(jù)幀長度指示信號用于控制開發(fā)板上的四個led燈。功能說明:每按下機械D,數(shù)據(jù)幀長度會以8-7-6-8順序改變一檔,而開發(fā)板上從左到右的四個led燈會以相應(yīng)的順序發(fā)光表示目前數(shù)據(jù)幀的長度;0111表示8位,1000表示7位,1001表木6位,系統(tǒng)默認8位模式;0表不亮,1表不滅。關(guān)鍵程序數(shù)據(jù)幀長度控制模塊由下列代碼實現(xiàn)/例化消抖模塊對機械按鍵 DDD消抖key5key5_1(CLK,RESET,DDD,DD);always(negedgeDD)/每按下機械按鍵D一次,狀態(tài)指示寄存器counter加1beginif(counter>2

27、)counter<=0;/counter大于2時清零elsecounter<=counter+1;endalways(posedgeDD)/ 8位模式/ 7位模式/ 6位模式/默認8位模式beginif(counter=0)beginc<=3'b001;led<=4'b0111;endelseif(counter=1)beginc<=3'b010;led<=4'b1000;endelseif(counter=2)beginc<=3'b100;led<=4'b1001;endc<=3'b

28、001; led<=4'b0000; endelsebeginEnd仿真結(jié)果口U心11111科1JefOCTO'Jmoino*m祿53(0011gx.L、廉圖2、13控制模塊仿真輸出隨輸入規(guī)律變化,可以瞧出模塊功能正常。波特率設(shè)置:波特率發(fā)生器為傳輸提供了串行移位時鐘。波特率表示數(shù)據(jù)的傳送速率,即每秒傳輸二進制的位數(shù)。波特率控制模塊實際上就是一個分頻器,產(chǎn)生相應(yīng)的符合RS232的波特率同步時鐘。因為開發(fā)板自帶時鐘為50MHz,因此:波特率=50M/bote;可見其中波特率就是由波特率因子bote決定若bote=5208,則波特率為9600。關(guān)鍵程序always(posed

29、geCLKornegedgeRESET)beginif(ClockCount=bote)beginClock9600<=1;ClockCount<=0;endelsebeginClock9600<=0;ClockCount<=ClockCount+1;endend波特率發(fā)生器本質(zhì)為一個分頻器,bote為之前鍵盤輸入模塊送來的設(shè)定值。仿真結(jié)果該模塊的仿真驗證將于下文中UART通信模塊的仿真中一并驗證。2、5UART通信模塊模塊介紹及原理圖基本的UART僅有RXD與TXD兩條信號線,接收與發(fā)送之間相互不存在干擾,即全雙工。由于UART就是異步通信,要求RXD接口與TXD發(fā)送

30、端制定相應(yīng)的規(guī)則,對數(shù)據(jù)進行同步,以使接收、發(fā)送之間協(xié)調(diào)一致。UART的工作原理就是將傳輸數(shù)據(jù)的每一個字符一位接一位地傳輸,以字符為單位從低位到高位逐位傳輸,一個字符表示一幀信息。如圖2、14所示,串口數(shù)據(jù)發(fā)送模塊與串口數(shù)據(jù)接收模塊以及相關(guān)分頻模塊都集成于同一個UART模塊中。輸入:CLK:50MHz時鐘;RESET:復(fù)位信號;UART0_RX:接收數(shù)據(jù)弓I腳;KEYA:對應(yīng)機械按鍵C,為發(fā)送確認鍵;bote14、0:由輸入模塊送來的波特率因子,用于設(shè)置波特率;SEND_DATA7、0:數(shù)據(jù)幀,在6位模式中位寬為6,在7位模式中位寬為7。輸出:UART0_TX:發(fā)送數(shù)據(jù)引腳;Data010、3

31、卜Data040、3:用于向顯示模塊傳遞接收的數(shù)據(jù)。uarlRESETUARTQ_TXCLKDataGip.OJ-UART0_RXOata0230'KEYADfita03pOJibcie|l4QSEND.DATAtr.ODataG430-inst?圖2、14UART模塊2、5、1串口數(shù)據(jù)發(fā)送模塊關(guān)鍵程序Clock9600為前文介紹的波特率發(fā)生器產(chǎn)生的波特率時鐘;always(posedgeClock9600orposedgeSend_en)beginif(Send_en=1)beginsend_count<=0;UART0_TX<=1;send_over<=1;end

32、串口清零elseif(Send_count=9)beginUART0_TX<=Send_data9;send_over<=0;end/發(fā)送完成elsebeginUART0_TX<=Send_dataSend_count;逐位由發(fā)送寄存器向串口寫數(shù)據(jù)Send_count<=Send_count+1;endalways(posedgedoutornegedgeRESET)發(fā)送數(shù)據(jù)beginif(RESET=0)beginsend_en<=1;Send_data<=10'b1000000000;endelsebeginSend_en<=0;Send_

33、data<=last,SEND_DATA,start;/寫入起始位與終止位if(Send_over=0)Send_en<=1;endend2、5、2串口數(shù)據(jù)接收模塊16個首先介紹采樣時鐘Clock3,它就是波特率的16倍,即串口上一個數(shù)據(jù)位長度會有Clock3周期,如果在每個數(shù)據(jù)位的第8個Clock3周期上采樣,即在每個數(shù)據(jù)位的中間進行取樣這樣可以使采樣值更加準確可靠。此原理如圖2、15所示。®®O00©O®»*-LrLrLrLRrtrLn_rLJLmfao 件止府起哈倒0:16 St:ChKk.i'同明CKkU 國期沖 T

34、聞期it tClvckJI冷個 ClwkJ 闿期圖2、15采樣原理關(guān)鍵程序接收采樣時鐘分頻模塊:always(posedgeCLKornegedgeRESET)beginif(ClockCount_UART0_RX=bote/16)/采樣頻率為波特率的16倍beginClock3<=1;ClockCount_UART0_RX<=0;endelsebeginClock3<=0;ClockCount_UART0_RX<=ClockCount_UART0_RX+1;endend檢測至ijUART0_RX出現(xiàn)下降沿時,令UART0_RX_Hold=1,啟動接收進程;case(m

35、)/8位數(shù)據(jù)幀采樣24:beginUART0_RX_Data0<=UART0_RX;m<=m+1;end40:beginUART0_RX_Data1<=UART0_RX;m<=m+1;end56:beginUART0_RX_Data2<=UART0_RX;m<=m+1;end72:beginUART0_RX_Data3<=UART0_RX;m<=m+1;end88:beginUART0_RX_Data4<=UART0_RX;m<=m+1;end104:beginUART0_RX_Data5<=UART0_RX;m<=m+1

36、;end120:beginUART0_RX_Data6<=UART0_RX;m<=m+1;end136:beginUART0_RX_Data7<=UART0_RX;m<=m+1;end152:beginUART0_RX_Valid<=1;m<=m+1;end標志串口數(shù)據(jù)接收完成168:beginm<=0;UART0_RX_Valid<=0;enddefault:m<=m+1;endcase接收數(shù)據(jù)輸出部分:(8位模式)Data01<=UART0_RX_Data3,UART0_RX_Data2,UART0_RX_Data1,UART0_

37、RX_Data0;Data02<=UART0_RX_Data7,UART0_RX_Data6,UART0_RX_Data5,UART0_RX_Data4;如果系統(tǒng)處于7位模式,那么Data01<=UART0_RX_Data3,UART0_RX_Data2,UART0_RX_Data1,UART0_RX_Data0;Data02<=start,UART0_RX_Data6,UART0_RX_Data5,UART0_RX_Data4;如果系統(tǒng)處于6位模式,那么Data01<=UART0_RX_Data3,UART0_RX_Data2,UART0_RX_Data1,UART0

38、_RX_Data0;Data02<=start,start,UART0_RX_Data5,UART0_RX_Data4;其中start=0。仿真結(jié)果圖2、16UART模塊仿真從仿真結(jié)果可以瞧出,波特率時鐘clock9600、采樣日鐘clock3均正常,UART0_TX有正確數(shù)據(jù)輸出,Data01與Data02正確反映了UART0_RX送來的數(shù)據(jù),因此UART通信模塊功能正確。三系統(tǒng)介紹3、1系統(tǒng)結(jié)構(gòu)介紹整個系統(tǒng)的結(jié)構(gòu)可以用以下框圖描述圖3、1系統(tǒng)框圖圖3、2操作流程接收數(shù)據(jù)選擇數(shù)據(jù)、1設(shè)置波特、廠輸入發(fā)送、|發(fā)送一可丁 幀長度尸率廠數(shù)據(jù)/I顯小,顯示頂層圖如下一三三言三二y 一3-直=i

39、:二三JX耍一一二二hfb, Lrs三二.三于-LrJ Mr從圖3、1中可以瞧出整個系統(tǒng)的功能即為實現(xiàn)幀格式、波特率可調(diào)的全雙工串口通信并顯示相關(guān)數(shù)據(jù)信息。具體的操作流程如圖3、2所示。I:初始化圖3、3頂層圖圖中部分1為數(shù)據(jù)位寬6位的通信子系統(tǒng),部分2為數(shù)據(jù)位寬8位的通信子系統(tǒng),部分3為數(shù)據(jù)位寬8位的通信子系統(tǒng)部分4為數(shù)據(jù)幀長度控制模塊,用于選擇哪一個系統(tǒng)運作。端口說明輸入:clk:50MHz時鐘;reset:復(fù)位信號;switch:用于控制波特率輸入模式與發(fā)送數(shù)據(jù)輸入模式間的切換key_in3、0:鍵盤列掃描信號;UART0_RX:接收數(shù)據(jù)弓I腳;B:機械按鍵,發(fā)送確認鍵;s1:機械按鍵,

40、按下后顯示接收的數(shù)據(jù),再按下退出;DDD:機械按鍵,切換數(shù)據(jù)位寬。輸出:led3、0:數(shù)據(jù)位寬指示燈;key_out3、0:鍵盤行掃描信號;speaker:蜂鳴器控制信號;LED_ALED_G:顯示控制信號;LED_Point,LED_PointTime:均為顯示控制信號;LED_VCC1LED_VCC4:LED片選信號;LED_EN1:使能彳t號;UART0_TX:發(fā)送數(shù)據(jù)引腳。3、2系統(tǒng)子模塊介紹因為三個通信子系統(tǒng)基本相似,所以本文僅介紹數(shù)據(jù)位寬6位的通信子系統(tǒng)。irgale.lnBkicM;優(yōu)$曰Resellreseti«y_ovl30|-SwWC-hhlkev_m(3.001

41、bDi-RxRKi-51311的-HtchLB3_Akey_n3'.01L3>_B1BLHJ_GUART0_RKLED_D141LH)_tMLm_ELHD_FLro_GLED_VCC1lLED_VCC2IED_VCC3LEDVCC4LED_Pamrt1L日七用力1UARID-TX2l>AlbBfcC12dlDIBElBffllEM11rF1gG1cicm亡NC21亡3C3.1£4C41poiitEePDnESimelpobnlPainntiIkien«7mist?,,圖3、4子系統(tǒng)圖3、4的子系統(tǒng)中左邊與右邊的模塊都就是多輸入三態(tài)門,其使能信號由數(shù)據(jù)幀長

42、度控制模塊控制,從而決定了在任何一時刻三個子系統(tǒng)只有一個系統(tǒng)處于工作狀態(tài)。該圖中間的模塊即為實現(xiàn)6位串口通信的功能模塊,其結(jié)構(gòu)如圖3、5所示。圖3、56位串口通信的功能模塊如圖3、5所示,串口通信模塊主要分為6個子模塊,各個子模塊在前文中都有介紹模塊說明:模塊1:UART通信模塊,用于數(shù)據(jù)的接收與傳送,將接收到的數(shù)據(jù)經(jīng)過三態(tài)門(模塊4)傳送到顯示模塊;模塊2:輸入模塊,用于輸入波特率、發(fā)送數(shù)據(jù),將用戶輸入的數(shù)據(jù)經(jīng)過三態(tài)門(模塊3)發(fā)送到顯示模塊;模塊3,模塊4:三態(tài)門模塊,用于保證任何時刻只有一組顯示數(shù)據(jù)輸入顯示模塊進行顯示;模塊5:顯示模塊,用于驅(qū)動數(shù)碼管;模塊6:三態(tài)門控制模塊;用于選擇數(shù)碼管顯示的內(nèi)容。端口說明輸如:clk:50MHz時鐘;reset:復(fù)位信號;switch:用于控制波特率輸入模式與發(fā)送數(shù)據(jù)輸入模式間的切換;key_in3、0:鍵盤列掃描信號;UART0_RX:接收數(shù)據(jù)弓I腳;B:機械按鍵,發(fā)送確認鍵;s1:機械按鍵,按下后顯示接收的數(shù)據(jù),再按下退出;輸出:key_out3、0:鍵盤行掃描信號;speaker:蜂鳴器控制信號;LED_ALED_G:顯示控制信號;LED_Point,LED_Poi

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論