欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

ZYNQ UARTLite接收不定长数据

发布时间:2024/10/14 编程问答 55 豆豆
生活随笔 收集整理的这篇文章主要介绍了 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接收不定长数据的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。