




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
./電子科技大學(xué)可編程邏輯器件原理、應(yīng)用與實(shí)驗(yàn)課程實(shí)驗(yàn)報(bào)告實(shí)驗(yàn)名稱UART控制器設(shè)計(jì)及驗(yàn)證成績(jī)研究生院學(xué)院代培生班成績(jī)學(xué)號(hào)同作者實(shí)驗(yàn)日期2017年4月23日指導(dǎo)教師評(píng)語:指導(dǎo)教師:年月日實(shí)驗(yàn)報(bào)告容基本要求及參考格式一、實(shí)驗(yàn)?zāi)康亩?、?shí)驗(yàn)所用儀器〔或?qū)嶒?yàn)環(huán)境三、實(shí)驗(yàn)基本原理及步驟〔或方案設(shè)計(jì)及理論計(jì)算四、實(shí)驗(yàn)數(shù)據(jù)記錄〔或仿真及軟件設(shè)計(jì)五、實(shí)驗(yàn)結(jié)果分析及回答問題〔或測(cè)試環(huán)境及測(cè)試結(jié)果.目錄TOC\o"1-3"\h\u一任務(wù)簡(jiǎn)介 11.1實(shí)驗(yàn)?zāi)康?1.2開發(fā)工具平臺(tái) 1二模塊設(shè)計(jì) 22.1輸入模塊設(shè)計(jì) 22.1.1機(jī)械按鍵消抖 22.1.2矩陣鍵盤掃描 32.1.3參量輸入及顯示輸入 52.2顯示模塊 62.3三態(tài)門控制模塊 82.4UART通信協(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ā)板實(shí)驗(yàn)結(jié)果 17四總結(jié) 20.一任務(wù)簡(jiǎn)介1.1實(shí)驗(yàn)?zāi)康谋敬稳蝿?wù)的目標(biāo)為設(shè)計(jì)一個(gè)基于FPGA的串口通信控制器,具體技術(shù)要求如下:<1>實(shí)現(xiàn)與PC的雙向通信;<2>可以通過輸入模塊在開發(fā)板上定義向PC發(fā)送的數(shù)據(jù);<3>數(shù)據(jù)幀長(zhǎng)度可調(diào)<6/7/8位>;<4>通信波特率可調(diào);<5>在數(shù)碼管上實(shí)現(xiàn)波特率、輸入數(shù)據(jù)、接收數(shù)據(jù)的顯示。<6>按鍵A用于接收模式和輸入模式的選擇,按鍵B用于選擇輸入模式為波特率設(shè)置還是發(fā)送數(shù)據(jù)設(shè)置,按鍵C為發(fā)送確認(rèn)鍵,按鍵D用于選擇數(shù)據(jù)幀長(zhǎng)度,矩陣鍵盤<0~9>用于輸入波特率因子和發(fā)送數(shù)據(jù)<十六進(jìn)制顯示>;各種模式均有數(shù)碼管顯示相應(yīng)容,其中數(shù)據(jù)幀長(zhǎng)度由四個(gè)LED燈表示。<7>操作流程:1.通信參數(shù)設(shè)置:在開發(fā)板上選擇數(shù)據(jù)幀長(zhǎng)度、設(shè)置波特率、輸入發(fā)送數(shù)據(jù)幀;在PC端的串口通信助手中設(shè)置波特率和數(shù)據(jù)幀長(zhǎng)度;2.數(shù)據(jù)發(fā)送:按下C鍵向PC發(fā)送數(shù)據(jù),在PC端確認(rèn)接收的數(shù)據(jù);3.數(shù)據(jù)接收:由PC端向開發(fā)板發(fā)送數(shù)據(jù),在開發(fā)板上選擇數(shù)據(jù)接收模式即可顯示;4.默認(rèn)設(shè)置:UART控制器默認(rèn)波特率為9600,默認(rèn)發(fā)送數(shù)據(jù)為8’h18;<8>以上容均需在開發(fā)板上驗(yàn)證;實(shí)驗(yàn)截圖在本文第三部分給出。1.2開發(fā)工具平臺(tái)基于CycloneIIEP2C5Q208C8核心的MAGIC3200_EP2C5開發(fā)板,具有四位掃描式數(shù)碼管,RS232串口等外設(shè),時(shí)鐘CLK為50MHz;開發(fā)軟件為QuartusII13sp;串口通信助手;基于LP2303的USB-UART轉(zhuǎn)接線,用于與筆記本電腦進(jìn)行串口通信。MAGIC3200_EP2C5開發(fā)板USB-UART轉(zhuǎn)接線RS232串口串口通信助手圖1.1開發(fā)平臺(tái)設(shè)備二模塊設(shè)計(jì)2.1輸入模塊設(shè)計(jì)輸入模塊采用了矩陣鍵盤和獨(dú)立按鍵,獨(dú)立按鍵用于模式選擇和發(fā)送確認(rèn),矩陣鍵盤用于數(shù)據(jù)的輸入。關(guān)于消抖部分,對(duì)于矩陣鍵盤來說只要設(shè)置合適的掃描頻率就可以實(shí)現(xiàn)消抖的功能,而對(duì)于獨(dú)立按鍵來說就必須設(shè)計(jì)相應(yīng)的消抖模塊。2.2.1機(jī)械按鍵消抖模塊簡(jiǎn)介機(jī)械按鍵按下時(shí)的機(jī)械抖動(dòng)會(huì)產(chǎn)生很多個(gè)下降沿,而在邏輯上希望機(jī)械按鍵按下一次只產(chǎn)生一個(gè)下降沿,因此要進(jìn)行按鍵消抖。按鍵防抖動(dòng)其實(shí)是通過延時(shí)判斷來做的,因?yàn)檫@種毛刺持續(xù)時(shí)間都在ms級(jí),當(dāng)檢測(cè)到按鍵狀態(tài)有變化時(shí),經(jīng)過一定延時(shí)后再次進(jìn)行確認(rèn)。消抖模塊如圖2.1所示,din為機(jī)械按鍵輸入,dout為消抖后的輸出。圖2.1消抖模塊圖關(guān)鍵程序圖2.2為鍵盤消抖的狀態(tài)轉(zhuǎn)移圖,按鍵信號(hào)din按下時(shí)為低電平,平時(shí)為高電平。<1>狀態(tài)S0:輸入din信號(hào)產(chǎn)生跳變后,進(jìn)入狀態(tài)S0。如果din為0,進(jìn)入S1狀態(tài)。否則循環(huán)檢測(cè)。<2>狀態(tài)S1:如果再次檢測(cè)到輸入信號(hào)為邏輯0信號(hào),則表明有按鍵按下,dout為0。狀態(tài)機(jī)結(jié)束。狀態(tài)機(jī)激勵(lì)時(shí)鐘周期為0.1s,以此實(shí)現(xiàn)延時(shí),即按鍵按下后0.1s檢測(cè)按鍵信號(hào),若按鍵信號(hào)為低電平,則輸出低電平完成消抖。圖2.2消抖狀態(tài)機(jī)消抖程序如下:always<posedgekeyclk>//狀態(tài)機(jī)激勵(lì)begin if<RESET==0>pre_s=s0; elsepre_s=next_s;endalways<pre_s,next_s,din>//檢查按鍵begin case<pre_s>s0:begindout=1;if<din==0>next_s=s1;elsenext_s=s0;end s1:begindout=1;if<din==0>dout=0;elsenext_s=s0;end default:next_s=s0; endcaseend2.2.2矩陣鍵盤掃描簡(jiǎn)介及原理圖鍵盤掃描最大的優(yōu)點(diǎn)就是能節(jié)約I/O口。如果使用普通的方法,那么16個(gè)按鍵就需要16個(gè)I/O口,但通過掃描的方式來完成,卻只需要8個(gè),按鍵越多它所顯現(xiàn)的優(yōu)勢(shì)也就越明顯。矩陣鍵盤原理電路如圖2.3。鍵盤掃描將使用行掃描法實(shí)現(xiàn),即逐行掃描查詢法。具體操作為:行線的初始狀態(tài)輸出都為0,只要有高電平出現(xiàn),表明有按鍵被按下。在確認(rèn)有按鍵被按下的情況下,需要確定具體哪個(gè)按鍵被按下。以一定的掃描頻率依次將行線<key_out>電平拉高,并檢測(cè)列線的輸入<key_in>,確定具體哪個(gè)按鍵被按下。圖2.3矩陣鍵盤原理電路圖2.4鍵盤掃描模塊圖圖2.5鍵盤掃描模塊原理圖鍵盤掃描模塊如如圖2.4所示,輸入為reset信號(hào),clk信號(hào)<50MHz時(shí)鐘>,模式切換開關(guān)swith,列掃描信號(hào)key_in;輸出為行掃描信號(hào)key_out,波特率因子bote,鍵盤輸入值輸出Data0~Data4,Data1、Data2、Data3、Data4為輸入模塊向顯示模塊的輸出,它們分別對(duì)應(yīng)四位數(shù)碼管千位、百位、十位、個(gè)位顯示的容。send_data為發(fā)送數(shù)據(jù)幀寄存器,圖中給出的是8位模式下的鍵盤掃描模塊,所以send_data位寬為8位,在7位和6位模式下掃描模塊send_data的位寬分別為7位和6位,其余部分與8位模式下的鍵盤掃描模塊基本一致。speaker為蜂鳴器信號(hào),因?yàn)殚_發(fā)板設(shè)計(jì)上的一些問題,若不定義開發(fā)板的蜂鳴器管腳,蜂鳴器有時(shí)會(huì)響。關(guān)鍵程序其中掃描頻率由鍵盤掃描模塊置的分頻模塊實(shí)現(xiàn):always<posedgeclkornegedgereset>begin if<reset==0>time10ms<=0;//最初設(shè)計(jì)掃描時(shí)鐘周期為10ms,后來有改動(dòng) elseif<timecnt==1200000>//掃描頻率為20Hz<20ms> begintime10ms<=~time10ms;timecnt<=0;end elsetimecnt<=timecnt+1;end行輪掃的主要程序如下: key_out<=scanvalue; //輸出行掃描值 cpy_scanvalue<=scanvalue;//備份掃描值,用于進(jìn)行列掃描 case<scanvalue>//行輪掃 4'b0001:scanvalue<=4'b0010; 4'b0010:scanvalue<=4'b0100; 4'b0100:scanvalue<=4'b1000; 4'b1000: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//對(duì)應(yīng)鍵盤"1" 8'b00100001:beginData0<=2;counter<=counter+1;end//對(duì)應(yīng)鍵盤"2" 8'b01000001:beginData0<=3;counter<=counter+1;end//對(duì)應(yīng)鍵盤"3" 8'b10000001:beginData0<=4;counter<=counter+1;end//未使用 8'b00010010:beginData0<=4;counter<=counter+1;end//對(duì)應(yīng)鍵盤"4" 8'b00100010:beginData0<=5;counter<=counter+1;end//對(duì)應(yīng)鍵盤"5" 8'b01000010:beginData0<=6;counter<=counter+1;end//對(duì)應(yīng)鍵盤"6" 8'b10000010:beginData0<=4;counter<=counter+1;end//未使用 8'b00010100:beginData0<=7;counter<=counter+1;end//對(duì)應(yīng)鍵盤"7" 8'b00100100:beginData0<=8;counter<=counter+1;end//對(duì)應(yīng)鍵盤"8" 8'b01000100:beginData0<=9;counter<=counter+1;end//對(duì)應(yīng)鍵盤"9" 8'b10000100:beginData0<=4;counter<=counter+1;end//未使用 8'b00011000:beginData0<=0;counter<=counter+1;end//對(duì)應(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;end//未使用 default: ;//無鍵盤按下 endcase如以上程序所示,每當(dāng)按下鍵盤對(duì)應(yīng)按鍵后,將有對(duì)應(yīng)數(shù)值寫入寄存器Data0中,寄存器counter為當(dāng)前輸入對(duì)應(yīng)的位數(shù)。2.2.3參量輸入及顯示輸入鍵盤輸入數(shù)值的存儲(chǔ)程序如下:switch1==0<控制信號(hào)下文將詳細(xì)介紹>時(shí)進(jìn)入波特率設(shè)置模式,輸入的數(shù)值為波特率因子bote,bote為一個(gè)四位數(shù),此模式下可以通過矩陣鍵盤從千位到個(gè)位依次寫數(shù),將每次輸入的值依次寫入四位寄存器Data1、Data2、Data3、Data4中,最終組成一個(gè)完整的十進(jìn)制四位數(shù),其中counter為位數(shù)標(biāo)志位。Data1、Data2、Data3、Data4為輸入模塊向顯示模塊的輸出,它們分別對(duì)應(yīng)四位數(shù)碼管千位、百位、十位、個(gè)位顯示的容。if<switch1==0>begin bote<=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;end endcase if<counter==5>counter<=0; endswitch==1時(shí)進(jìn)入發(fā)送數(shù)據(jù)設(shè)置模式,最終把鍵盤輸入值寫入send_data,發(fā)送寄存器send_data為一個(gè)6~8位<可設(shè)置>的二進(jìn)制數(shù),用于存儲(chǔ)將要發(fā)送的數(shù)據(jù)幀。因?yàn)樗膫€(gè)Data寄存器位寬為4位,所以send_data的容只需要由兩個(gè)寄存器的數(shù)據(jù)構(gòu)成。令Data1、Data2為10,意思為關(guān)閉千位、百位的數(shù)碼管,這在顯示模塊部分將會(huì)詳細(xì)介紹。elsebeginsend_data<={Data3,Data4}; Data1<=10; Data2<=10; case<counter> 4'b0001:Data3<=Data0; 4'b0010:Data4<=Data0; default:beginData3<=8;Data4<=8;end endcase if<counter>2>counter<=0;end 仿真結(jié)果:圖2.6鍵盤掃描模塊仿真為了方便觀察結(jié)果,仿真中加快了時(shí)鐘和一些分頻的頻率。從仿真圖像可以看出,行線掃描信號(hào)key_out以一定頻率掃描,當(dāng)列掃描信號(hào)key_in有所輸入時(shí),輸入寄存器Data0、Data1、Data2、Data3、Data4都有相應(yīng)的變化。而且當(dāng)切換開關(guān)switch按下時(shí),輸出信號(hào)bote和send_data都發(fā)生了相應(yīng)變化,這說明波特率設(shè)置模式和發(fā)送數(shù)據(jù)寫入模式的切換功能正常運(yùn)行。仿真表明輸入模塊在功能上是可行的。2.2顯示模塊模塊簡(jiǎn)介及原理圖顯示模塊用于驅(qū)動(dòng)開發(fā)板上的四位數(shù)碼管顯示串口數(shù)據(jù),每個(gè)數(shù)碼管有八個(gè)控制位和一個(gè)片選位,還有一個(gè)用于顯示‘:’控制位。由于開發(fā)板只給出了13個(gè)引腳用于控制四個(gè)數(shù)碼管,因此必須采用數(shù)碼管掃描的形式來進(jìn)行顯示。因?yàn)槿搜塾幸曈X暫留的特性.一般說來,當(dāng)1秒鐘刷新24次以上,人眼就無法區(qū)分而認(rèn)為四個(gè)數(shù)碼管是一起亮的。掃描具有節(jié)約引腳的優(yōu)點(diǎn),如果并行驅(qū)動(dòng)四位數(shù)碼管,那么至少需要33個(gè)引腳,而掃描法只需要13個(gè)引腳就可以實(shí)現(xiàn)。使用的是共陽數(shù)碼管,引腳電平為低時(shí)點(diǎn)亮。圖2.7顯示模塊顯示模塊如圖2.6所示,輸入為reset信號(hào),50Mhz時(shí)鐘信號(hào)clk,前文提到的Data1、Data2、Data3、Data4顯示容輸入,分別對(duì)應(yīng)四位數(shù)碼管千位、百位、十位、個(gè)位的顯示容。輸出信號(hào)中的LED_A~LED_G、LED_Point、LED_PointTime均為顯示控制信號(hào);LED_VCC1~LED_VCC4為L(zhǎng)ED片選信號(hào),高電平有效,LED_EN1為使能信號(hào)。關(guān)鍵程序以下為數(shù)碼管掃描的關(guān)鍵程序:always<posedgeclk>begin if<reset=='b0> count<=0; elseif<count==6000> //設(shè)置數(shù)碼管掃描頻率 begin count<=0; if<scancnt>3>scancnt<=0; elsescancnt<=scancnt+1; end elsecount<=count+1;end以上程序主要作用是,使變量scancnt掃描頻率在0~3累加循環(huán),scancnt有0123共四個(gè)狀態(tài),通過scancnt控制數(shù)碼管片選信號(hào),分別在四個(gè)數(shù)碼管上顯示容。譯碼部分見附錄。仿真結(jié)果圖2.8顯示模塊仿真結(jié)果可以看出隨著Data1和Data1的變化,LED控制信號(hào)和LED片選信號(hào)同時(shí)變化,說明顯示模塊功能正常。2.3三態(tài)門控制模塊模塊簡(jiǎn)介及原理圖在本任務(wù)頂層的設(shè)計(jì)中有些部分需要使用多輸入三態(tài)門來控制數(shù)據(jù)的傳輸,本部分將以任務(wù)中的一個(gè)多輸入三態(tài)門來介紹該模塊。模塊的原理圖和模塊圖如圖2.9所示圖2.9三態(tài)門模塊如圖所示,data1~data4為輸入數(shù)據(jù),D1~D4為輸出,若en=1則D1~D4輸出data1~data4的數(shù)據(jù),若en=0則D1~D4輸出高阻。關(guān)鍵程序if<en==1> beginD1<=data1;D2<=data2;D3<=data3;D4<=data4;end else beginD1<=4'bzzzz;D2<=4'bzzzz;D3<=4'bzzzz;D4<=4'bzzzz;end仿真結(jié)果圖2.10三態(tài)門仿真從仿真結(jié)果中可以看出,當(dāng)en為低電平時(shí)輸出為高阻,en為高電平時(shí)輸出等于輸入。這說明三態(tài)門模塊功能正確。2.4UART通信協(xié)議幀格式及波特率設(shè)置模塊簡(jiǎn)介及原理圖基本的UART幀格式如圖所示。圖2.11URAT幀格式基本的UART幀格式包括起始位、數(shù)據(jù)位、校驗(yàn)位和停止位四部分。一個(gè)字符幀數(shù)據(jù)由四部分組成:一個(gè)起始位〔邏輯為0,緊接著一個(gè)5位到8位可變的數(shù)據(jù)位D0-D7,一個(gè)奇偶校驗(yàn)位〔可選擇,最后是停止位〔邏輯1。在沒有數(shù)據(jù)被傳輸時(shí),串行數(shù)據(jù)線上一直是邏輯高電平。本次任務(wù)未設(shè)置奇偶校驗(yàn)。幀格式設(shè)置本次所設(shè)計(jì)的UART控制器支持長(zhǎng)度6、7、8位的幀格式,實(shí)現(xiàn)方式將在下文系統(tǒng)介紹中敘述,各個(gè)模塊間相互的切換由一個(gè)控制模塊實(shí)現(xiàn),模塊圖形由下圖所示:圖2.12控制模塊圖如圖所示,模塊輸入為50MHz時(shí)鐘CLK、RESET復(fù)位信號(hào),機(jī)械按鍵D對(duì)應(yīng)DDD信號(hào),輸出信號(hào)為數(shù)據(jù)幀長(zhǎng)度控制信號(hào)c[2..0],led[3..0]為數(shù)據(jù)幀長(zhǎng)度指示信號(hào)用于控制開發(fā)板上的四個(gè)led燈。功能說明:每按下機(jī)械D,數(shù)據(jù)幀長(zhǎng)度會(huì)以8-7-6-8順序改變一檔,而開發(fā)板上從左到右的四個(gè)led燈會(huì)以相應(yīng)的順序發(fā)光表示目前數(shù)據(jù)幀的長(zhǎng)度;0111表示8位,1000表示7位,1001表示6位,系統(tǒng)默認(rèn)8位模式;0表示亮,1表示滅。關(guān)鍵程序數(shù)據(jù)幀長(zhǎng)度控制模塊由下列代碼實(shí)現(xiàn):key5key5_1<CLK,RESET,DDD,DD>;//例化消抖模塊對(duì)機(jī)械按鍵DDD消抖always<negedgeDD>//每按下機(jī)械按鍵D一次,狀態(tài)指示寄存器counter加1beginif<counter>2>counter<=0;//counter大于2時(shí)清零elsecounter<=counter+1;endalways<posedgeDD>beginif<counter==0>beginc<=3'b001;led<=4'b0111;end//8位模式elseif<counter==1>beginc<=3'b010;led<=4'b1000;end//7位模式elseif<counter==2>beginc<=3'b100;led<=4'b1001;end//6位模式elsebeginc<=3'b001;led<=4'b0000;end//默認(rèn)8位模式End仿真結(jié)果圖2.13控制模塊仿真輸出隨輸入規(guī)律變化,可以看出模塊功能正常。波特率設(shè)置:波特率發(fā)生器為傳輸提供了串行移位時(shí)鐘。波特率表示數(shù)據(jù)的傳送速率,即每秒傳輸二進(jìn)制的位數(shù)。波特率控制模塊實(shí)際上是一個(gè)分頻器,產(chǎn)生相應(yīng)的符合RS232的波特率同步時(shí)鐘。因?yàn)殚_發(fā)板自帶時(shí)鐘為50MHz,因此:波特率=50M/bote;可見其中波特率是由波特率因子bote決定,若bote=5208,則波特率為9600。關(guān)鍵程序always<posedgeCLKornegedgeRESET>begin if<ClockCount==bote>beginClock9600<=1;ClockCount<=0;end else beginClock9600<=0;ClockCount<=ClockCount+1;endend波特率發(fā)生器本質(zhì)為一個(gè)分頻器,bote為之前鍵盤輸入模塊送來的設(shè)定值。仿真結(jié)果該模塊的仿真驗(yàn)證將于下文中UART通信模塊的仿真中一并驗(yàn)證。2.5UART通信模塊模塊介紹及原理圖基本的UART僅有RXD和TXD兩條信號(hào)線,接收和發(fā)送之間相互不存在干擾,即全雙工。由于UART是異步通信,要求RXD接口和TXD發(fā)送端制定相應(yīng)的規(guī)則,對(duì)數(shù)據(jù)進(jìn)行同步,以使接收、發(fā)送之間協(xié)調(diào)一致。UART的工作原理是將傳輸數(shù)據(jù)的每一個(gè)字符一位接一位地傳輸,以字符為單位從低位到高位逐位傳輸,一個(gè)字符表示一幀信息。如圖2.14所示,串口數(shù)據(jù)發(fā)送模塊和串口數(shù)據(jù)接收模塊以及相關(guān)分頻模塊都集成于同一個(gè)UART模塊中。輸入:CLK:50MHz時(shí)鐘;RESET:復(fù)位信號(hào);UART0_RX:接收數(shù)據(jù)引腳;KEYA:對(duì)應(yīng)機(jī)械按鍵C,為發(fā)送確認(rèn)鍵;bote[14..0]:由輸入模塊送來的波特率因子,用于設(shè)置波特率;SEND_DATA[7..0]:數(shù)據(jù)幀,在6位模式中位寬為6,在7位模式中位寬為7。輸出:UART0_TX:發(fā)送數(shù)據(jù)引腳;Data01[0..3]~Data04[0..3]:用于向顯示模塊傳遞接收的數(shù)據(jù)。圖2.14UART模塊2.5.1串口數(shù)據(jù)發(fā)送模塊關(guān)鍵程序Clock9600為前文介紹的波特率發(fā)生器產(chǎn)生的波特率時(shí)鐘;always<posedgeClock9600orposedgeSend_en>beginif<Send_en==1>beginsend_count<=0;UART0_TX<=1;send_over<=1;end//串口清零elseif<Send_count==9>beginUART0_TX<=Send_data[9];send_over<=0;end//發(fā)送完成elsebeginUART0_TX<=Send_data[Send_count];//逐位由發(fā)送寄存器向串口寫數(shù)據(jù)Send_count<=Send_count+1;endalways<posedgedoutornegedgeRESET>//發(fā)送數(shù)據(jù)begin if<RESET==0>beginsend_en<=1;Send_data<=10'b1000000000;end else begin Send_en<=0; Send_data<={last,SEND_DATA,start};//寫入起始位和終止位 if<Send_over==0>Send_en<=1; endend2.5.2串口數(shù)據(jù)接收模塊首先介紹采樣時(shí)鐘Clock3,它是波特率的16倍,即串口上一個(gè)數(shù)據(jù)位長(zhǎng)度會(huì)有16個(gè)Clock3周期,如果在每個(gè)數(shù)據(jù)位的第8個(gè)Clock3周期上采樣,即在每個(gè)數(shù)據(jù)位的中間進(jìn)行取樣,這樣可以使采樣值更加準(zhǔn)確可靠。此原理如圖2.15所示。圖2.15采樣原理關(guān)鍵程序接收采樣時(shí)鐘分頻模塊:always<posedgeCLKornegedgeRESET>begin if<ClockCount_UART0_RX==bote/16>//采樣頻率為波特率的16倍beginClock3<=1;ClockCount_UART0_RX<=0;end elsebeginClock3<=0;ClockCount_UART0_RX<=ClockCount_UART0_RX+1;endend檢測(cè)到UART0_RX出現(xiàn)下降沿時(shí),令UART0_RX_Hold=1,啟動(dòng)接收進(jìn)程; case<m> //8位數(shù)據(jù)幀采樣 24: beginUART0_RX_Data[0]<=UART0_RX;m<=m+1;end 40: beginUART0_RX_Data[1]<=UART0_RX;m<=m+1;end 56: beginUART0_RX_Data[2]<=UART0_RX;m<=m+1;end 72: beginUART0_RX_Data[3]<=UART0_RX;m<=m+1;end 88: beginUART0_RX_Data[4]<=UART0_RX;m<=m+1;end 104:beginUART0_RX_Data[5]<=UART0_RX;m<=m+1;end 120:beginUART0_RX_Data[6]<=UART0_RX;m<=m+1;end 136:beginUART0_RX_Data[7]<=UART0_RX;m<=m+1;end 152:beginUART0_RX_Valid<=1;m<=m+1;end//標(biāo)志串口數(shù)據(jù)接收完成 168:beginm<=0;UART0_RX_Valid<=0;end default:m<=m+1; endcase接收數(shù)據(jù)輸出部分:<8位模式>Data01<={UART0_RX_Data[3],UART0_RX_Data[2],UART0_RX_Data[1],UART0_RX_Data[0]};Data02<={UART0_RX_Data[7],UART0_RX_Data[6],UART0_RX_Data[5],UART0_RX_Data[4]};如果系統(tǒng)處于7位模式,那么Data01<={UART0_RX_Data[3],UART0_RX_Data[2],UART0_RX_Data[1],UART0_RX_Data[0]};Data02<={start,UART0_RX_Data[6],UART0_RX_Data[5],UART0_RX_Data[4]};如果系統(tǒng)處于6位模式,那么Data01<={UART0_RX_Data[3],UART0_RX_Data[2],UART0_RX_Data[1],UART0_RX_Data[0]};Data02<={start,start,UART0_RX_Data[5],UART0_RX_Data[4]};其中start=0。仿真結(jié)果圖2.16UART模塊仿真從仿真結(jié)果可以看出,波特率時(shí)鐘clock9600、采樣時(shí)鐘clock3均正常,UART0_TX有正確數(shù)據(jù)輸出,Data01和Data02正確反映了UART0_RX送來的數(shù)據(jù),因此UART通信模塊功能正確。三系統(tǒng)介紹3.1系統(tǒng)結(jié)構(gòu)介紹整個(gè)系統(tǒng)的結(jié)構(gòu)可以用以下框圖描述:圖3.1系統(tǒng)框圖從圖3.1中可以看出整個(gè)系統(tǒng)的功能即為實(shí)現(xiàn)幀格式、波特率可調(diào)的全雙工串口通信,并顯示相關(guān)數(shù)據(jù)信息。具體的操作流程如圖3.2所示。圖3.2操作流程頂層圖如下:圖3.3頂層圖圖中部分1為數(shù)據(jù)位寬6位的通信子系統(tǒng),部分2為數(shù)據(jù)位寬8位的通信子系統(tǒng),部分3為數(shù)據(jù)位寬8位的通信子系統(tǒng),部分4為數(shù)據(jù)幀長(zhǎng)度控制模塊,用于選擇哪一個(gè)系統(tǒng)運(yùn)作。端口說明輸入:clk:50MHz時(shí)鐘;reset:復(fù)位信號(hào);switch:用于控制波特率輸入模式和發(fā)送數(shù)據(jù)輸入模式間的切換;key_in[3..0]:鍵盤列掃描信號(hào);UART0_RX:接收數(shù)據(jù)引腳;B:機(jī)械按鍵,發(fā)送確認(rèn)鍵;s1:機(jī)械按鍵,按下后顯示接收的數(shù)據(jù),再按下退出;DDD:機(jī)械按鍵,切換數(shù)據(jù)位寬。輸出:led[3..0]:數(shù)據(jù)位寬指示燈;key_out[3..0]:鍵盤行掃描信號(hào);speaker:蜂鳴器控制信號(hào);LED_A~LED_G:顯示控制信號(hào);LED_Point,LED_PointTime:均為顯示控制信號(hào);LED_VCC1~LED_VCC4:LED片選信號(hào);LED_EN1:使能信號(hào);UART0_TX:發(fā)送數(shù)據(jù)引腳。3.2系統(tǒng)子模塊介紹因?yàn)槿齻€(gè)通信子系統(tǒng)基本相似,所以本文僅介紹數(shù)據(jù)位寬6位的通信子系統(tǒng)。圖3.4子系統(tǒng)圖3.4的子系統(tǒng)中左邊和右邊的模塊都是多輸入三態(tài)門,其使能信號(hào)由數(shù)據(jù)幀長(zhǎng)度控制模塊控制,從而決定了在任何一時(shí)刻三個(gè)子系統(tǒng)只有一個(gè)系統(tǒng)處于工作狀態(tài)。該圖中間的模塊即為實(shí)現(xiàn)6位串口通信的功能模塊,其結(jié)構(gòu)如圖3.5所示。圖3.56位串口通信的功能模塊如圖3.5所示,串口通信模塊主要分為6個(gè)子模塊,各個(gè)子模塊在前文中都有介紹;模塊說明:模塊1:UART通信模塊,用于數(shù)據(jù)的接收和傳送,將接收到的數(shù)據(jù)經(jīng)過三態(tài)門<模塊傳送到顯示模塊;模塊2:輸入模塊,用于輸入波特率、發(fā)送數(shù)據(jù),將用戶輸入的數(shù)據(jù)經(jīng)過三態(tài)門<模塊發(fā)送到顯示模塊;模塊3,模塊4:三態(tài)門模塊,用于保證任何時(shí)刻只有一組顯示數(shù)據(jù)輸入顯示模塊進(jìn)行顯示;模塊5:顯示模塊,用于驅(qū)動(dòng)數(shù)碼管;模塊6:三態(tài)門控制模塊;用于選擇數(shù)碼管顯示的容。端口說明輸如:clk:50MHz時(shí)鐘;reset:復(fù)位信號(hào);switch:用于控制波特率輸入模式和發(fā)送數(shù)據(jù)輸入模式間的切換;key_in[3..0]:鍵盤列掃描信號(hào);UART0_RX:接收數(shù)據(jù)引腳;B:機(jī)械按鍵,發(fā)送確認(rèn)鍵;s1:機(jī)械按鍵,按下后顯示接收的數(shù)據(jù),再按下退出;輸出:key_out[3..0]:鍵盤行掃描信號(hào);speaker:蜂鳴器控制信號(hào);LED_A~LED_G:顯示控制信號(hào);LED_Point,LED_PointTime:均為顯示控制信號(hào);LED_VCC1~LED_VCC4:LED片選信號(hào);LED_EN1:使能信號(hào);UART0_TX:發(fā)送數(shù)據(jù)引腳。3.3開發(fā)板實(shí)驗(yàn)結(jié)果實(shí)驗(yàn)條件:數(shù)據(jù)位寬:6位;波特率/波特率因子:38400/1304;發(fā)送數(shù)據(jù):2’h18;接收數(shù)據(jù):2’h32;圖
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025至2030年五菱汽車電噴項(xiàng)目投資價(jià)值分析報(bào)告
- 2025年漁用單絲繩索項(xiàng)目可行性研究報(bào)告
- 2025年度電力行業(yè)安全培訓(xùn)勞務(wù)合同范本
- 2024-2025學(xué)年高中數(shù)學(xué)課時(shí)分層作業(yè)17概率的基本性質(zhì)含解析新人教A版必修3
- 2024-2025學(xué)年高中生物第五章第一二節(jié)人類影響環(huán)境創(chuàng)造人與自然的和諧知能演練輕巧奪冠含解析蘇教版必修3
- 關(guān)于舟山嵊泗列島導(dǎo)游詞(12篇)
- 中國(guó)聚丙烯絲網(wǎng)項(xiàng)目投資可行性研究報(bào)告
- Unit 3 welcome to our school welcome to the unit 教學(xué)設(shè)計(jì) 2024-2025學(xué)年譯林版(2024)七年級(jí)英語上冊(cè)
- 東海污水處理廠改擴(kuò)建工程可行性研究報(bào)告
- 2025年全銅升降式洗衣機(jī)水嘴項(xiàng)目投資可行性研究分析報(bào)告
- 成人住院患者跌倒風(fēng)險(xiǎn)評(píng)估及預(yù)防,中華護(hù)理學(xué)會(huì)團(tuán)體標(biāo)準(zhǔn)
- 陰式子宮全切術(shù)-手術(shù)室護(hù)理查房
- 職業(yè)健康檢查流程圖
- 提高電費(fèi)回收率(QC)
- EIM Book 1 Unit 7 Learning languages單元知識(shí)要點(diǎn)
- 呼吸系統(tǒng)疾病與麻醉(薛張剛)
- WOMAC骨性關(guān)節(jié)炎指數(shù)評(píng)分表
- CRPS電源設(shè)計(jì)向?qū)?CRPS Design Guide r-2017
- SH/T 1627.1-1996工業(yè)用乙腈
- GB/T 5534-2008動(dòng)植物油脂皂化值的測(cè)定
- GB/T 30797-2014食品用洗滌劑試驗(yàn)方法總砷的測(cè)定
評(píng)論
0/150
提交評(píng)論