ZYNQ UARTLite接收不定长数据
UARTLite接收不定長數據
1. Vivado建立UARTLite的IP核工程
(不做介紹,過程略)
2. 創建SDK或vitis應用工程
(不做介紹,過程略)
3. 添加UARTLite官方例程xuartlite_intr_example
(不做介紹,過程略)
4. 編譯、燒寫,驗證硬件是否OK
5. 分析官方例程
官方例程xuartlite_intr_example是打開中斷,將發送引腳與接收引腳短接,如果接收的數據長度等于發送的數據長度,且接收數據等于發送數據,則例程運行正常。
例程中沒有給出中斷處理函數,而是給出了將自定義封裝到發送完成或接收完成中斷的函數。
尋找XUartLite_SetRecvHandler函數聲明的位置,在xuartlite_intr.c中,
這個函數將用戶函數送入了結構體中的RecvHandler中,在xuartlite_intr.c中尋找調用RecvHandler的函數,找到ReceiveDataHandler函數。
我們再看看誰調用了ReceiveDataHandler函數,原來是XUartLite_InterruptHandler函數,它應該就是xUARTLite的中斷函數本尊了。
這個函數很簡單,就是發生發動或接收中斷,就調用對應的函數。接下來我們回到ReceiveDataHandler函數。
這個函數可以分為三部分:
第一部分,判斷接收緩存剩余要接收的字節數是否為0(也就是是否接收到指定字節長度的數據)。
如果還沒有達到指定長度,會跳到XUartLite_ReceiveBuffer函數,接收剩余字節,直到接收FIFO為空。(不管是否接收完畢)。
第二部分,判斷接收數據緩存是否為0,如果為零,則調用用戶自定義的中斷函數RecvHandler,并將回調函數和已經接收到的字節長度發送到該中斷函數。
第三部分,記錄中斷次數。
7. 修改官方源文件xuartlite_intr.c。
經過前邊的介紹,我們可以知道只要修改ReceiveDataHandler函數的第二部分即可實現不定長數據的接收。修改方法為,將剩余字節數的判斷去掉,直接執行用戶中斷函數RecvHandler的調用。
對于例程中給出的自定義函數,我們可以增加一個接收標志的置位,
8. 編譯、燒寫,測試功能。
總結
以上是生活随笔為你收集整理的ZYNQ UARTLite接收不定长数据的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: xil_printf打印遇到的问题
- 下一篇: 第2章 信号、接口和引脚(XIlinx