原創(chuàng)聲明:
本原創(chuàng)教程由芯驛電子科技(上海)有限公司(ALINX)創(chuàng)作,版權(quán)歸本公司所有,如需轉(zhuǎn)載,需授權(quán)并注明出處。
適用于板卡型號:
AXU2CGA/AXU2CGB/AXU3EG/AXU4EV-E/AXU4EV-P/AXU5EV-E/AXU5EV-P /AXU9EG/AXU15EG
vivado工程目錄為“ps_hello/vivado”
軟件工程師工作內(nèi)容
以下為軟件工程師負(fù)責(zé)內(nèi)容。
在前面的實驗中,大家或多或少會發(fā)現(xiàn)有打印信息的情況,主要是調(diào)用”xil_printf”或”printf”,但是通過什么打印信息呢?我們還記得打印信息之前設(shè)置了串口,是的,確實是串口,但這些函數(shù)是如何調(diào)用串口呢?其實我們可以在”xil_printf”函數(shù)定義中看到,注意outbyte函數(shù)就是調(diào)用UART打印的。
再進入outbye的函數(shù),即可看到調(diào)用了PS端UART的函數(shù),得以在串口中顯示。
除了打印信息之外,如果我們想用UART進行數(shù)據(jù)傳輸呢?本章便來介紹PS端UART的讀寫控制,實驗中,每隔1S向外發(fā)送一串字符,如果收到數(shù)據(jù),產(chǎn)生中斷,并將收到的數(shù)據(jù)再發(fā)送出去。
1.UART模塊介紹
以下是UART模塊的結(jié)構(gòu)圖,TxFIFO和RxFIFO都為64字節(jié)。
下圖為UART的四種模式
可以用remote loopback mode測試物理電路是否正常,使用API函數(shù)XUartPs_SetOperMode
2. Vitis程序開發(fā)
1) 本實驗流程如下:
主程序流程:
UART初始化設(shè)置UART模式設(shè)置數(shù)據(jù)格式設(shè)置中斷發(fā)送UART數(shù)據(jù)檢查是否收到數(shù)據(jù)如果收到,發(fā)送收到的數(shù)據(jù),如果沒有,等待1秒鐘,繼續(xù)發(fā)數(shù)據(jù)
中斷程序流程:
中斷初始化設(shè)置接收FIFO trigger中斷寄存器,設(shè)置為1,即收到一個數(shù)據(jù)就中斷打開接收trigger中斷REMPTY及接收FIFO空中斷RTRIG
中斷服務(wù)程序:
判斷狀態(tài)寄存器是trigger還是empty清除相應(yīng)中斷trigger狀態(tài)讀取RxFIFO數(shù)據(jù),empty狀態(tài)將接收標(biāo)志ReceivedFlag置1
2) 在main函數(shù)中進行模式的設(shè)置,可以直接調(diào)用函數(shù),設(shè)置為正常模式,數(shù)據(jù)格式設(shè)置為波特率115200,數(shù)據(jù)8bit,無校驗位,1bit停止位。UartFormat定義在uart_parameter.h中。
3) 中斷控制器程序初始化可參考按鍵中斷方式,用法類似。
4) 在main函數(shù)中將trigger level設(shè)置為1,打開trigger和empty中斷。
5) 數(shù)據(jù)的發(fā)送和接收函數(shù)參考了UARTPS的XUartPs_Send和XUartPs_Rev函數(shù),但它們會打開某些中斷,不符合預(yù)期,因此做了修改。
在接收緩存中設(shè)置了最大2000字節(jié)的緩沖,可以根據(jù)需要修改。
6) 在中斷服務(wù)程序中,將ReceivedBufferPtr指針地址和ReceivedByteNum加上接收到的個數(shù),如果FIFO空了,將ReceivedFlag置為1。同時向中斷狀態(tài)寄存器寫數(shù)據(jù),清除中斷。
Ug1085 UART清除中斷
7) 在main函數(shù)中,將ReceivedFlag和ReceivedByteNum清零,ReceivedBufferPtr指針復(fù)位。
8) Uart發(fā)送函數(shù)中,判斷TxFIFO是否滿,否則繼續(xù)發(fā)送,直到計數(shù)達(dá)到NumBytes
9) Uart接收函數(shù)中,判斷接收RxFIFO是否為空,否則繼續(xù)讀數(shù)據(jù),NumBytes為需要讀取的數(shù)據(jù)個數(shù),但如果接收的FIFO空了,計數(shù)沒有達(dá)到這個值,也會結(jié)束此函數(shù)。
10) 除了自己寫程序外,還可以從system.mss中導(dǎo)入模塊的例子,參考Xilinx提供的程序,方便學(xué)習(xí)。
3. 板上驗證
1) 接下來下載程序
2) 打開工程目錄下的串口調(diào)試工具
3) 設(shè)置好參數(shù)如下,打開串口,即可看到打印信息。
4) 在發(fā)送區(qū)填入數(shù)據(jù),點擊手動發(fā)送,即可看到接收區(qū)的數(shù)據(jù)。
4. 總結(jié)
本章學(xué)習(xí)了UART的發(fā)送與接收,以及中斷的使用,希望大家能養(yǎng)成良好的習(xí)慣,多看文檔,理解原理,能對系統(tǒng)的認(rèn)識有很大提高。
-
FPGA
+關(guān)注
關(guān)注
1630文章
21777瀏覽量
604769 -
串口
+關(guān)注
關(guān)注
14文章
1557瀏覽量
76765 -
uart
+關(guān)注
關(guān)注
22文章
1243瀏覽量
101561 -
Zynq
+關(guān)注
關(guān)注
10文章
610瀏覽量
47231 -
MPSoC
+關(guān)注
關(guān)注
0文章
199瀏覽量
24302
發(fā)布評論請先 登錄
相關(guān)推薦
評論