本文主要是介绍万变不离其宗之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串口介绍的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!