集成电路技术分享

 找回密码
 我要注册

QQ登录

只需一步,快速开始

搜索
查看: 828|回复: 1

UART通信接口实现原理

[复制链接]
小舍YZ 发表于 2017-8-26 17:12:05 | 显示全部楼层 |阅读模式
UART通信接口实现原理

串口发送数据格式:1位起始位(‘0’),8位数据位,1位停止位(‘1’),空闲位(‘1’)。

接收数据: 按照串口传输协议,检测起始位,为防止因干扰或其它因素引起的电平跳动,以波特率16倍的频率检测,一旦检测到起始位,就开始接收数据,要保证在数据位的中间取样。

对于异步接收器而言,同步的实现就是靠寻找起始位来作为一帧数据的开始。通常的做法是产生一个16倍(或32倍)于波特率的时钟信号clkl6x,当 clkl6x的前后两个脉冲沿检测到串行输入信号从高到低的跳变时,即表明一帧数据的开始,然后再经过8个clkl6x周期,以该时刻点为基准,每隔16个。1k16x周期(即串行通信周期),就将该时刻收到的串行数据移入移位寄存器rsr中,当8位数据(假设数据长度为8位)均移入寄存器后,再将rsr的内容移入二级缓冲rbr,设置数据准备好信号dataready,去控制数据的并行输出。同时,用dataready信号上升沿对接收帧数进行计数。本设计中协议规定文件以一个十六进制00数据作为结束,因此检测到帧数据为00时将RX_ done信号置高,表明文件接收完毕。如需要给出出错信号,可以判断奇偶校验位,如有错,设置校验错信号parityerror;再判断其后的停止位,如有错,则设置帧错误信号framingerrorarxd为串行输入信号,clkl6x可以根据实际的波特率由高频时钟信号分频得到。dout是并行输出信号。

发送数据: 串口数据发送相对接收较为简单,只需要依次发送起始位,数据位,停止位即可,注意波特率的计算。

由于实际用的板子的晶振是50MHz的,所以调用了分频子模块counter,以得到9600Hz的16倍的clkl6x的时钟。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?我要注册

x
zhangyukun 发表于 2017-8-27 08:29:57 | 显示全部楼层
谢谢楼主分享
您需要登录后才可以回帖 登录 | 我要注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

QQ|小黑屋|手机版|Archiver|fpga论坛|fpga设计论坛 ( 京ICP备20003123号-1 )

GMT+8, 2025-4-20 09:22 , Processed in 0.066495 second(s), 21 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表