ZYNQ进阶之路14--PS端uart串口接收不定长数据

  • 导语
  • ZYNQ串口简介
  • 实现步骤

导语

繁忙的博主又来了,本节我们实现一个比较简单的东西:串口。之前的章节中我们也有使用PS端的串口进行收发数据,但是都是接收固定长度的数据包,在实际的项目工程中是很不方便和不实用的。本章节我们来详细讲解ZYNQ中PS端串口接收的机制和实现接收不定长数据的原理。
本章节对应工程源码: ZYNQ进阶之路14工程 对应软件版本vivado2018.3

ZYNQ串口简介

ZYNQ PS端有两个串口,uart0和uart1。两个串口基本一样,只要学会了其中一个串口的配置,另一个串口也就照搬程序了。串口的硬件框图大致如下图所示:

如上图所展示的,一个串口有两个FIFO,接收和发送各用一个,FIFO的缓存能大大的提高串口的工作效率,并且减少CPU的干预。两个FIFO的宽度都为8bit,深度为64字节。当串口发送数据时,CPU/DMA通过总线将需要发送的数据写入TxFIFO中,硬件检测到FIFO中有数据或者数据到达一定数量就会往外发送数据直到TxFIFO为空。当串口接收数据时,硬件将数据缓存如RxFIFO中,当软件检测到RxFIFO有数据时,CPU/DMA就通过总线去读取RxFIFO直到RxFIFO为空。对于串口发送,我们一个字节一个字节发送便可,已经足够我们日常使用。本节我们主要讲解串口接收的原理,本节中我们使用两种中断实现串口接收不定长数据,第一种为RxFIFO阈值触发中断:这种中断首先是要给FIFO设置一个阈值,当RxFIFO中有效数据量大于等于阈值时,产生中断;第二种是接收数据超时(timeout)中断,使用过STM32的同学可能比较熟悉STM32中有一个串口的空闲中断,这里的接收数据超时中断和这个类似,如果在设定时间周期内没有接收到串口数据则产生超时中断。
同时使能以上两种中断便可以实现任意长度的串口数据接收了,接下来我们来看一下具体是如何实现的吧!

实现步骤

首先我们创建一个新的ZYNQ工程,具体工程创建流程参照 ZYNQ进阶之路5中的工程创建流程。工程创建后如下所示:

然后导入到SDK中,创建helloworld工程,输入如下代码实现本节功能:


上图中红框1为串口中断服务函数,
红框2读取中断类型
红框3中是读取FIFO数据代码,500为设置的读取数据长度,该值无论设置多大都无所谓,因为读取到FIFO为空后就不会再读数据了,而返回数值为实际读取到的数据数量。所以这里我们设置为500也是可以的。
红框4中为数据发送程序,将接收到的数据全部发送出去,并且只有接收到最后一个数据后发生超时中断才会触发数据发送。
红框5为串口初始化函数
红框6为设置超时中断的超时时间,超时时间=16个波特率时钟周期。其计算公式为:超时时间=n*4个波特率周期,本程序中n=4.
然后编译程序后,下载但芯片中,便可实现不定长数据接收了,其实际运行效果如下所示:

一次发送130个字节,发送一段时间后也不会出现丢数据的状况,还是相当稳定可靠的!好了本节内容就到此为止了,在下一节的内容中我们将讲解在ZYNQ中通过AXI stream接口+AXI DMA实现PS和PL的高速数据传输,有兴趣的博友可以持续关注本博主哦!博主邮箱:wanpengwork@163.com 博主微信技术公众号:鹏哥DIY。

ZYNQ进阶之路14--PS端uart串口接收不定长数据相关推荐

  1. stm32串口接收不定长数据_基于STM32之UART串口通信协议--接收

    一.前言 1.简介 回顾上一篇UART发送当中,已经讲解了如何实现UART的发送操作了,接下来这一篇将会继续讲解如何实现UART的接收操作. 2.UART简介 嵌入式开发中,UART串口通信协议是我们 ...

  2. ZYNQ UARTLite接收不定长数据

    UARTLite接收不定长数据 1. Vivado建立UARTLite的IP核工程 (不做介绍,过程略) 2. 创建SDK或vitis应用工程 (不做介绍,过程略) 3. 添加UARTLite官方例程 ...

  3. ZYNQ进阶之路13--自定义AXI-FULL IP实现PS和PL双向高速通讯

    ZYNQ进阶之路13--自定义AXI-FULL IP实现PS和PL双向高速通讯 导语 实现步骤 结语 导语 不好意思,这篇博文又来晚了,是繁忙阻碍了博主博客的更新,其实博主想要有好多关于技术的话要说, ...

  4. STM32从零到一,从标准库移植到HAL库,UART串口1以DMA模式收发不定长数据代码详解+常见问题 一文解析

    前言 本文的参考资料 感谢提供标准库版本的CSDN同学:这两篇文章至少是我看过的最详细的标准库配置DMA版本.而且代码实测稳定能用. STM32 | DMA配置和使用如此简单(超详细)_...| .. ...

  5. 【ZYNQ Ultrascale+ MPSOC FPGA教程】第二十一章 PS端UART读写控制

    原创声明: 本原创教程由芯驿电子科技(上海)有限公司(ALINX)创作,版权归本公司所有,如需转载,需授权并注明出处. 适用于板卡型号: AXU2CGA/AXU2CGB/AXU3EG/AXU4EV-E ...

  6. STM8S UART串口使用中断收发数据

    STM8S UART串口使用中断收发数据 原来调过STM8L的串口,逻辑简单,中断清晰,换成STM8S105K4后,虽然也是用STD库, 除去函数名.宏名等语言层面的差异以外,中断处理方面也有些不一样 ...

  7. Esp8266进阶之路14 esp8266的 FreeRtos系统学习的正确姿势,环境配置环境、烧录。(附带demo)

    本系列博客学习由非官方人员 半颗心脏 潜心所力所写,不做开发板.仅仅做个人技术交流分享,不做任何商业用途.如有不对之处,请留言,本人及时更改. 序号 SDK版本 内容 链接 1 nonos2.0 搭建 ...

  8. stm32h7 UART dma接收不到数据_【STM32H7】第4章 ThreadX GUIX上手之STM32H7 LTDC基础知识 - 安富莱电子...

    最新教程下载: 本章教程为大家讲解LTDC应用中最基本的汉字显示和2D图形显示功能实现. 初学者重要提示 LCD相关的基础支持 LCD硬件设计 LCD驱动设计 LCD板级支持包(和) LCD的驱动移植 ...

  9. Zynq7020_PS端 uart驱动编写及Vivadio-SDK配置

    刚接触 zynq 网上资料也很少,整起来也比较难受.ps.pl 还有SDK.这些东西第一次用都得了解.如果你是个arm工程师,PL部分可以不用怎么了解,只要学习简单的新建硬件流就可以了.主要学习使用的 ...

最新文章

  1. Android如何客制化adb shell进去后显示shell@xxxx的标识
  2. Hash函数及其应用
  3. js里规定输入的数值只能是数字
  4. movie计算机英语作文,一篇“Movie Review英语作文
  5. 并发编程——进程——进程的同步与数据共享
  6. Redis的存储(实现)原理
  7. vivado 综合报错 “ incorrect freePtr. Call out of sequence? “
  8. CANN 5.0硬核技术抢先看
  9. 用python玩转数据测试与作业_大学mooc用Python玩转数据章节测试答案
  10. jdbc 链接不了mysql_JDBC链接Mysql失败
  11. 《深入理解Java虚拟机》Java内存区域与内存溢出异常
  12. 优秀的弹窗插件 jquery.lightbox_me.js
  13. 浏览器Quirksmode(怪异模式)与CSScompat
  14. 长青藤cad_长青网
  15. xshell报initialize flexnet service failed error code 50003错误
  16. 百度网盘正版免费扩容教程
  17. STM8 捕获模式HS0038 红外遥控解码
  18. 发达国家如何布局大数据战略
  19. mermaid flowchart使用指南
  20. Kaggle数据集之电信客户流失数据分析(三)之决策树分类

热门文章

  1. 电气化铁路变电站自动化安全监控传输方案
  2. 新思路|保姆式智能化安防方案,开启全新商业管理模式
  3. 模式识别学习笔记(9)——非参数方法
  4. 程序员对接口与插件深入形象理解
  5. 从员工到总监:我所学到的,非常多人花十年也学不到
  6. 如何显示u盘的隐藏的文件
  7. 100+情人节卡通线条简笔图案矢量素材
  8. SuperVideo - H5视频播放插件
  9. vim 快速查找功能
  10. Mysql里的锁 -- 转载