原创 fpga学习日记23,代码阅读之UART时序分析

2013-9-3 21:22 1361 15 15 分类: FPGA/CPLD 文集: 数电,FPGA学习
 
 
本文是在前两篇介绍UART收发文章的基础上的进一步分析

前两篇文章为

fpga学习日记14,实现UART发送

http://bbs.ednchina.com/BLOG_ARTICLE_3014710.HTM

fpga学习日记22,代码阅读之实现UART

http://bbs.ednchina.com/BLOG_ARTICLE_3014817.HTM

 

本篇主要分析UART 的接收和发送以及signal tap 的一些知识

先看下上篇文章生成的uart RTL图形

 01.jpg

首先时钟问题:

无论是UART通信还是IIC通信我们都需要在通信时钟的基础上倍频出来一个信号

用来在接收中捕捉 数据 在发送中获取数据(IIC可参考日记15)

 

222.jpg

然后就是起始信号和结束信号的捕捉 uart的开头可以采用滤波法排除干扰

IIC的开始信号很明显只要在数据的下降沿发现时钟是高电平即为开始信号

UART的开始信号就是从空闲的高电平变低 捕捉到下降沿切在短时间内没跳变即为开始信号

 

第二部分就是数据的接收和发送了

假如我们发送的每位数据需要500us那么我们需要一个250us的时钟来卡时间

扑捉到两位的中间开始改变数据  或在接受中捕捉每位数的中点来读取数据

接收数据:在发现起始信号之后 进入case语句依次接收N位数据(IIC接收后应答ack)

发送数据:起始信号发送完成后 进入case语句依次发送N位数据

 

第三部分就是要考虑数据缓存FIFO和标志位

比如发送完成标志

FIFO为空标志

接收到数据标志

总线忙等标志为编程提供方便

 

下面贴一个uart时序的例子 使用signal tap II捕捉的

 signal tap II设置情况

 2.jpg

捕捉以及深度

3.jpg

4.jpg

最后我们观察下最后这个图 uart接收时序收到的数据是0000 0001  低位在前

即收到的第一位有效数据应该为1

1,rx引脚信号的下降沿 为uart的起始信号   即时间1976所在列的下降沿,

2,此时收到的数据位数为num=0

3,上面的bps时钟接收时钟信号  明显可以看到是数据位时间单位的两倍 便于在数据位中间时刻获取信号有效值

4,在时间点1977--1978为uart收到的第一位有效数据

1111.jpg

在下一个bps的高电平依次读取后面的每一位数据 即可 预留一位时间等待总线结束

5,发送的思想和接收是很类似的  开始和结束信号发送比较简单  

发送时注意在两位数据时间的交叉点变化数据即可

 

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
15
关闭 站长推荐上一条 /1 下一条