万变不离其宗之ZYNQ串口介绍

2024-08-31 08:58

本文主要是介绍万变不离其宗之ZYNQ串口介绍,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

导语

    串口是我们在设计程序中最常用的接口,串口是硬件系统运行状态的忠实打印者,可以完成数据的传输、log输出等功能。

1.串口介绍

          通信的两种方式:串行通信、并行通信

          串行通信方式分为:同步通信、异步通信

         关于传输方向:单工、半双工、全双工

UART(异步串行通信)

  

  

     ZYNQ的串口模块是一个全双工的异步接收和发送器,支持宽范围广的软件可编程模块,支持编程配置波特率和数据格式,同时提供自动的奇偶校验和错误检测方案,此外,还为APU提供了接收和发送FIFO。

      ZYNQ有两个UART器件,具有以下特性:

1.    可编程波特率发送器;
2.    64个字节接收和发送FIFO;
3.    数据位6,7或者8个比特位;
4.    奇,偶,空格,标记或者没有校验;
5.    1,1.5或者2个停止位;
6.    支持校验,帧和超限错误检测;
7.    支持自动回应,本地环路和远程环路通道模式;
8.    支持产生中断;
9.    在EMIO上,可以使用调制解调器控制信号CTS,RTS,DSR,DTR,RI和DCD;

2.系统框图

3.  ZYNQ串口简介


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

如上图所展示的,一个串口有两个FIFO,接收和发送各用一个,FIFO的缓存能大大的提高串口的工作效率,并且减少CPU的干预。两个FIFO的宽度都为8bit,深度为64字节。

        当串口发送数据时,CPU/DMA通过总线将需要发送的数据写入TxFIFO中,硬件检测到FIFO中有数据或者数据到达一定数量就会往外发送数据直到TxFIFO为空。

        当串口接收数据时,硬件将数据缓存如RxFIFO中,当软件检测到RxFIFO有数据时CPU/DMA就通过总线去读取RxFIFO直到RxFIFO为空。对于串口发送,我们一个字节一个字节发送便可,已经足够我们日常使用。

这部分内容介绍比较少,请参考UG585文档

该应用笔记示例:中断实现串口接收不定长数

      接收的原理:中断实现串口接收不定长数

      第一种为RxFIFO阈值触发中断:这种中断首先是要给FIFO设置一个阈值,当RxFIFO中有效数据量大于等于阈值时,产生中断;

      第二种是接收数据超时(timeout)中断,使用过STM32的同学可能比较熟悉STM32中有一个串口的空闲中断,这里的接收数据超时中断和这个类似,如果在设定时间周期内没有接收到串口数据则产生超时中断。
 

  

这篇关于万变不离其宗之ZYNQ串口介绍的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1123446

相关文章

MySQL中慢SQL优化的不同方式介绍

《MySQL中慢SQL优化的不同方式介绍》慢SQL的优化,主要从两个方面考虑,SQL语句本身的优化,以及数据库设计的优化,下面小编就来给大家介绍一下有哪些方式可以优化慢SQL吧... 目录避免不必要的列分页优化索引优化JOIN 的优化排序优化UNION 优化慢 SQL 的优化,主要从两个方面考虑,SQL 语

C++中函数模板与类模板的简单使用及区别介绍

《C++中函数模板与类模板的简单使用及区别介绍》这篇文章介绍了C++中的模板机制,包括函数模板和类模板的概念、语法和实际应用,函数模板通过类型参数实现泛型操作,而类模板允许创建可处理多种数据类型的类,... 目录一、函数模板定义语法真实示例二、类模板三、关键区别四、注意事项 ‌在C++中,模板是实现泛型编程

Python实现html转png的完美方案介绍

《Python实现html转png的完美方案介绍》这篇文章主要为大家详细介绍了如何使用Python实现html转png功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 1.增强稳定性与错误处理建议使用三层异常捕获结构:try: with sync_playwright(

Java使用多线程处理未知任务数的方案介绍

《Java使用多线程处理未知任务数的方案介绍》这篇文章主要为大家详细介绍了Java如何使用多线程实现处理未知任务数,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 知道任务个数,你可以定义好线程数规则,生成线程数去跑代码说明:1.虚拟线程池:使用 Executors.newVir

如何使用C#串口通讯实现数据的发送和接收

《如何使用C#串口通讯实现数据的发送和接收》本文详细介绍了如何使用C#实现基于串口通讯的数据发送和接收,通过SerialPort类,我们可以轻松实现串口通讯,并结合事件机制实现数据的传递和处理,感兴趣... 目录1. 概述2. 关键技术点2.1 SerialPort类2.2 异步接收数据2.3 数据解析2.

JAVA SE包装类和泛型详细介绍及说明方法

《JAVASE包装类和泛型详细介绍及说明方法》:本文主要介绍JAVASE包装类和泛型的相关资料,包括基本数据类型与包装类的对应关系,以及装箱和拆箱的概念,并重点讲解了自动装箱和自动拆箱的机制,文... 目录1. 包装类1.1 基本数据类型和对应的包装类1.2 装箱和拆箱1.3 自动装箱和自动拆箱2. 泛型2

四种Flutter子页面向父组件传递数据的方法介绍

《四种Flutter子页面向父组件传递数据的方法介绍》在Flutter中,如果父组件需要调用子组件的方法,可以通过常用的四种方式实现,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录方法 1:使用 GlobalKey 和 State 调用子组件方法方法 2:通过回调函数(Callb

Python进阶之Excel基本操作介绍

《Python进阶之Excel基本操作介绍》在现实中,很多工作都需要与数据打交道,Excel作为常用的数据处理工具,一直备受人们的青睐,本文主要为大家介绍了一些Python中Excel的基本操作,希望... 目录概述写入使用 xlwt使用 XlsxWriter读取修改概述在现实中,很多工作都需要与数据打交

java脚本使用不同版本jdk的说明介绍

《java脚本使用不同版本jdk的说明介绍》本文介绍了在Java中执行JavaScript脚本的几种方式,包括使用ScriptEngine、Nashorn和GraalVM,ScriptEngine适用... 目录Java脚本使用不同版本jdk的说明1.使用ScriptEngine执行javascript2.

Python实现NLP的完整流程介绍

《Python实现NLP的完整流程介绍》这篇文章主要为大家详细介绍了Python实现NLP的完整流程,文中的示例代码讲解详细,具有一定的借鉴价值,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1. 编程安装和导入必要的库2. 文本数据准备3. 文本预处理3.1 小写化3.2 分词(Tokenizatio