原創(chuàng)聲明:
本原創(chuàng)教程由芯驛電子科技(上海)有限公司(ALINX)創(chuàng)作,版權(quán)歸本公司所有,如需轉(zhuǎn)載,需授權(quán)并注明出處。
適用于板卡型號(hào):
AXU2CGA/AXU2CGB/AXU3EG/AXU4EV-E/AXU4EV-P/AXU5EV-E/AXU5EV-P /AXU9EG/AXU15EG
vivado工程目錄為“ps_hello/vivado”
軟件工程師工作內(nèi)容
以下為軟件工程師負(fù)責(zé)內(nèi)容。
在前面的實(shí)驗(yàn)中,大家或多或少會(huì)發(fā)現(xiàn)有打印信息的情況,主要是調(diào)用”xil_printf”或”printf”,但是通過(guò)什么打印信息呢?我們還記得打印信息之前設(shè)置了串口,是的,確實(shí)是串口,但這些函數(shù)是如何調(diào)用串口呢?其實(shí)我們可以在”xil_printf”函數(shù)定義中看到,注意outbyte函數(shù)就是調(diào)用UART打印的。

再進(jìn)入outbye的函數(shù),即可看到調(diào)用了PS端UART的函數(shù),得以在串口中顯示。

除了打印信息之外,如果我們想用UART進(jìn)行數(shù)據(jù)傳輸呢?本章便來(lái)介紹PS端UART的讀寫控制,實(shí)驗(yàn)中,每隔1S向外發(fā)送一串字符,如果收到數(shù)據(jù),產(chǎn)生中斷,并將收到的數(shù)據(jù)再發(fā)送出去。
1.UART模塊介紹
以下是UART模塊的結(jié)構(gòu)圖,TxFIFO和RxFIFO都為64字節(jié)。

下圖為UART的四種模式

可以用remote loopback mode測(cè)試物理電路是否正常,使用API函數(shù)XUartPs_SetOperMode

2. Vitis程序開發(fā)
1) 本實(shí)驗(yàn)流程如下:
主程序流程:
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,即收到一個(gè)數(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ù)中進(jìn)行模式的設(shè)置,可以直接調(diào)用函數(shù),設(shè)置為正常模式,數(shù)據(jù)格式設(shè)置為波特率115200,數(shù)據(jù)8bit,無(wú)校驗(yàn)位,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ù),但它們會(huì)打開某些中斷,不符合預(yù)期,因此做了修改。

在接收緩存中設(shè)置了最大2000字節(jié)的緩沖,可以根據(jù)需要修改。


6) 在中斷服務(wù)程序中,將ReceivedBufferPtr指針地址和ReceivedByteNum加上接收到的個(gè)數(shù),如果FIFO空了,將ReceivedFlag置為1。同時(shí)向中斷狀態(tài)寄存器寫數(shù)據(jù),清除中斷。


7) 在main函數(shù)中,將ReceivedFlag和ReceivedByteNum清零,ReceivedBufferPtr指針復(fù)位。

8) Uart發(fā)送函數(shù)中,判斷TxFIFO是否滿,否則繼續(xù)發(fā)送,直到計(jì)數(shù)達(dá)到NumBytes

9) Uart接收函數(shù)中,判斷接收RxFIFO是否為空,否則繼續(xù)讀數(shù)據(jù),NumBytes為需要讀取的數(shù)據(jù)個(gè)數(shù),但如果接收的FIFO空了,計(jì)數(shù)沒有達(dá)到這個(gè)值,也會(huì)結(jié)束此函數(shù)。

10) 除了自己寫程序外,還可以從system.mss中導(dǎo)入模塊的例子,參考Xilinx提供的程序,方便學(xué)習(xí)。

3. 板上驗(yàn)證
1) 接下來(lái)下載程序

2) 打開工程目錄下的串口調(diào)試工具

3) 設(shè)置好參數(shù)如下,打開串口,即可看到打印信息。

4) 在發(fā)送區(qū)填入數(shù)據(jù),點(diǎn)擊手動(dòng)發(fā)送,即可看到接收區(qū)的數(shù)據(jù)。

4. 總結(jié)
本章學(xué)習(xí)了UART的發(fā)送與接收,以及中斷的使用,希望大家能養(yǎng)成良好的習(xí)慣,多看文檔,理解原理,能對(duì)系統(tǒng)的認(rèn)識(shí)有很大提高。
-
FPGA
+關(guān)注
關(guān)注
1645文章
22050瀏覽量
618732 -
串口
+關(guān)注
關(guān)注
15文章
1588瀏覽量
79978 -
uart
+關(guān)注
關(guān)注
22文章
1276瀏覽量
103996 -
Zynq
+關(guān)注
關(guān)注
10文章
615瀏覽量
48262 -
MPSoC
+關(guān)注
關(guān)注
0文章
201瀏覽量
24757
發(fā)布評(píng)論請(qǐng)先 登錄
明德?lián)P視頻分享點(diǎn)撥FPGA課程--第二十一章 ?矩陣鍵盤工程
如何調(diào)試Zynq UltraScale+ MPSoC VCU DDR控制器
如何調(diào)試Zynq UltraScale+ MPSoC VCU DDR控制器
第二十一講 組合邏輯電路中的競(jìng)爭(zhēng)冒險(xiǎn)

模擬電路網(wǎng)絡(luò)課件 第二十一節(jié):場(chǎng)效應(yīng)管與BJT放大電路的比較

閑話Zynq UltraScale+ MPSoC(連載1)

閑話Zynq UltraScale+ MPSoC(連載5)

Zynq UltraScale+ MPSoC的發(fā)售消息
米爾科技Zynq UltraScale+ MPSoC技術(shù)參考手冊(cè)介紹

【ZYNQ Ultrascale+ MPSOC FPGA教程】第一章 MPSoC芯片介紹

如何調(diào)試 Zynq UltraScale+ MPSoC VCU DDR 控制器?

ZYNQ Ultrascale+ MPSoC系列FPGA芯片設(shè)計(jì)
Zynq UltraScale+ MPSoC的隔離設(shè)計(jì)示例

評(píng)論