【ZYNQ Ultrascale+ MPSOC FPGA教程】第二十一章 PS端UART讀寫控制

原創聲明:

本原創教程由芯驛電子科技(上海)有限公司(ALINX)創做,版權歸本公司全部,如需轉載,需受權並註明出處。緩存

適用於板卡型號:

AXU2CGA/AXU2CGB/AXU3EG/AXU4EV-E/AXU4EV-P/AXU5EV-E/AXU5EV-P /AXU9EG/AXU15EG函數

 

vivado工程目錄爲「ps_hello/vivado」工具

vitis工程目錄爲「ps_uart/vitis」oop

軟件工程師工做內容學習

如下爲軟件工程師負責內容。測試

在前面的實驗中,你們或多或少會發現有打印信息的狀況,主要是調用」xil_printf」或」printf」,可是經過什麼打印信息呢?咱們還記得打印信息以前設置了串口,是的,確實是串口,但這些函數是如何調用串口呢?其實咱們能夠在」xil_printf」函數定義中看到,注意outbyte函數就是調用UART打印的。3d

再進入outbye的函數,便可看到調用了PS端UART的函數,得以在串口中顯示。指針

除了打印信息以外,若是咱們想用UART進行數據傳輸呢?本章便來介紹PS端UART的讀寫控制,實驗中,每隔1S向外發送一串字符,若是收到數據,產生中斷,並將收到的數據再發送出去。調試

1.UART模塊介紹

如下是UART模塊的結構圖,TxFIFO和RxFIFO都爲64字節。orm

下圖爲UART的四種模式

能夠用remote loopback mode測試物理電路是否正常,使用API函數XUartPs_SetOperMode

2. Vitis程序開發

1) 本實驗流程以下:

主程序流程:

UART初始化設置UART模式設置數據格式設置中斷髮送UART數據檢查是否收到數據若是收到,發送收到的數據,若是沒有,等待1秒鐘,繼續發數據

中斷程序流程:

中斷初始化設置接收FIFO trigger中斷寄存器,設置爲1,即收到一個數據就中斷打開接收trigger中斷REMPTY及接收FIFO空中斷RTRIG

中斷服務程序:

判斷狀態寄存器是trigger仍是empty清除相應中斷trigger狀態讀取RxFIFO數據,empty狀態將接收標誌ReceivedFlag置1

2) 在main函數中進行模式的設置,能夠直接調用函數,設置爲正常模式,數據格式設置爲波特率115200,數據8bit,無校驗位,1bit中止位。UartFormat定義在uart_parameter.h中。

3) 中斷控制器程序初始化可參考按鍵中斷方式,用法相似。

4) 在main函數中將trigger level設置爲1,打開trigger和empty中斷。

5) 數據的發送和接收函數參考了UARTPS的XUartPs_Send和XUartPs_Rev函數,但它們會打開某些中斷,不符合預期,所以作了修改。

在接收緩存中設置了最大2000字節的緩衝,能夠根據須要修改。

6) 在中斷服務程序中,將ReceivedBufferPtr指針地址和ReceivedByteNum加上接收到的個數,若是FIFO空了,將ReceivedFlag置爲1。同時向中斷狀態寄存器寫數據,清除中斷。

Ug1085 UART清除中斷

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

8) Uart發送函數中,判斷TxFIFO是否滿,不然繼續發送,直到計數達到NumBytes

9) Uart接收函數中,判斷接收RxFIFO是否爲空,不然繼續讀數據,NumBytes爲須要讀取的數據個數,但若是接收的FIFO空了,計數沒有達到這個值,也會結束此函數。

10) 除了本身寫程序外,還能夠從system.mss中導入模塊的例子,參考Xilinx提供的程序,方便學習。

3. 板上驗證

1) 接下來下載程序

2) 打開工程目錄下的串口調試工具

3) 設置好參數以下,打開串口,便可看到打印信息。

4) 在發送區填入數據,點擊手動發送,便可看到接收區的數據。

4. 總結

本章學習了UART的發送與接收,以及中斷的使用,但願你們能養成良好的習慣,多看文檔,理解原理,能對系統的認識有很大提升。

相關文章
相關標籤/搜索