|
Xilinx FPGA入門連載42:UART loopback測(cè)試 特權(quán)同學(xué),版權(quán)所有 配套例程和更多資料下載鏈接: http://pan.baidu.com/s/1jGjAhEm
UART(Universal Asynchronous Receiver/Transmitter),即通用異步收發(fā),它的數(shù)據(jù)傳輸不需要時(shí)鐘,只要兩條信號(hào)線分別進(jìn)行數(shù)據(jù)收發(fā)。既然沒(méi)有時(shí)鐘,那么他們是如何保證數(shù)據(jù)收發(fā)的準(zhǔn)確性的?很簡(jiǎn)單,收發(fā)雙方首先需要做到知己知彼,約定好數(shù)據(jù)傳輸?shù)乃俾剩ê?jiǎn)單的講就是約定好一個(gè)數(shù)據(jù)位傳輸?shù)臅r(shí)間)和幀格式(即一幀的長(zhǎng)短,一幀由哪些位組成,他們的功能都是什么)。 我們看看UART的一個(gè)幀定義。簡(jiǎn)單的串口幀格式如圖所示,它由1個(gè)起始位(必須為0)、8個(gè)數(shù)據(jù)位(用戶數(shù)據(jù))、1個(gè)奇偶校驗(yàn)位(用于簡(jiǎn)單的糾錯(cuò)以保證傳輸可靠性)和1或2個(gè)停止位(必須為1)組成。除了奇偶校驗(yàn)位,其他三個(gè)部分都是必須的。當(dāng)信號(hào)線空閑時(shí),必須為高電平。要發(fā)起數(shù)據(jù)傳輸時(shí),1個(gè)低電平的脈沖表示起始位,然后連續(xù)傳輸8個(gè)數(shù)據(jù)位和若干個(gè)高電平的停止位,這樣便完成一次傳輸。
該實(shí)驗(yàn)要實(shí)現(xiàn)的功能是FPGA實(shí)時(shí)監(jiān)測(cè)uart_rx信號(hào)是否有數(shù)據(jù),若接收到數(shù)據(jù),則把接收到的數(shù)據(jù)通過(guò)uart_tx發(fā)回給對(duì)方。PC機(jī)使用一個(gè)串口調(diào)試助手進(jìn)行通信。 在代碼設(shè)計(jì)中,speed_setting.v模塊里可以修改收發(fā)數(shù)據(jù)的波特率,如9600bps,19200bps,38400bps,57600bps或115200bps等。發(fā)送的數(shù)據(jù)幀格式為:1bit起始位,8bit數(shù)據(jù),無(wú)校驗(yàn)位,1bit停止位。 該實(shí)例的內(nèi)部功能如圖所示。
該工程實(shí)例的設(shè)計(jì)模塊層次如圖所示。
my_uart_rx.v模塊主要是完成數(shù)據(jù)的接收,speed_setting.v(speed_rx)模塊主要響應(yīng)my_uart_rx.v模塊發(fā)出的使能信號(hào)進(jìn)行波特率控制,并且回送一個(gè)數(shù)據(jù)采樣使能信號(hào)。my_uart_tx.v模塊在my_uart_rx.v模塊接收好一個(gè)完整的數(shù)據(jù)幀后啟動(dòng)運(yùn)行,將接收到的數(shù)據(jù)作為發(fā)送數(shù)據(jù)返回給PC端,它的波特率控制是由speed_setting.v(speed_tx)模塊產(chǎn)生。 連接好下載線,給SP6開發(fā)板供電(供電的同時(shí)也連接好了UART)。 打開ISE,進(jìn)入iMPACT下載界面,將本實(shí)例工程下的sp6.bit文件燒錄到FPGA中在線運(yùn)行。 雙擊如圖所示的“串口調(diào)試器”,。
如圖6.109所示,打開串口調(diào)試器后,選擇串口為COM10(我們前面在硬件管理器中新識(shí)別到的COM口,實(shí)驗(yàn)者應(yīng)以自己電腦識(shí)別到的COM口為準(zhǔn)),設(shè)置波特率為9600,數(shù)據(jù)位為8,校驗(yàn)位為None,停止位為1。點(diǎn)擊“打開串口”。
如圖所示,當(dāng)我們點(diǎn)擊完“打開串口”,其顯示字符就變成了“關(guān)閉串口”;輸入需要發(fā)送的數(shù)據(jù)“55aa”,然后勾選上“自動(dòng)發(fā)送”,我們就可以看到接收字符下面的空白區(qū)域每隔一會(huì)就打印一組我們發(fā)送的字符串。這說(shuō)明我們的實(shí)驗(yàn)成功了。大家可以更改代碼中的波特率再進(jìn)行測(cè)試,也可以將返回的數(shù)據(jù)做一些更改,如將接收的數(shù)據(jù)取反后返回,最后在串口調(diào)試助手上再做些調(diào)試,看看是否達(dá)到預(yù)定的功能。
|