串口接收(FPGA异步串行通信—modelsim)

本文详细介绍了串口如何接收数据,以数据55为例,描述了1个起始位,8个数据位,0校验位,1停止位的数据帧格式。在接收过程中,通过检测rx线的下降沿启动波特率计数,并在每个波特率计数器中间时刻取样,将串行数据转化为并行存储。同时解释了波特率计数器的计算方式,如9600bps时,每秒传输9600个比特,计算出每个比特对应的时钟周期数。
摘要由CSDN通过智能技术生成

以数据55为例,描述串口是如何接收55这个数据
对于串口接收而言,rx体现在硬件上之后一根线,数据以高低电平的方式在这个线上传输;根据异步串行通信协议来说,空闲状态是高电平,开始位是以低电平开始的,如下图所示

在这里我们选取数据帧的格式位1个起始位,8个数据位,0校验位,1停止位(1+8+0+1)

在串口的接收模块中,由于数据帧的定义格式,我们需要完整的8个数据位首先存储一下,因为我们只有一根线rx,这里我们在模块内要串行数据转换为并行数据暂时存储

55(H) = 0101 0101(B),先传低位的数据1,然后是0,然后是1,依此类推。

当我们传送55的低位的1的时候,也就是8h80(1000 0000),然后传送第二,此时的8位存储器变为8h40(0100 0000),然后是低位第三位1,此时存储器变为了8ha0(1010 0000),依次类推,这里用了一个移位的模式;

-1.首先当我们检测到rx出现下降沿的时候(通过边沿检测电路)我们拉高一个flag信号(rx-flag),当flag信号拉高的时候我们要开始波特率计数(传送一个比特需要多少个时钟周期),当完成一个比特传送的时候,我们对比特率计数器加1,标志信号flag拉低的的标识是我们传送完毕数据位和停止位

2.我们选择在每个波特率计数器到中间的时候取样,将这个信号存储在8位reg中,这里体现的是每个bit-flag都在rx中间计数,并且在bit-flag之后的8位reg的rx-data也会变化,依次80——40——a0——50——a8——54——aa——55,最后55表示传送完毕,还要加上后面rx为高电平表示进入空闲状态,此时将rx-flag拉低,为后面的数据传输做准备

parameter CLK_FREQ = 50_000_000;
parameter UART_BPS = 9600;
localparam BPS_CNT = CLK_FREQ / UART_BPS;

怎么理解波特率计数器?
当我们选择9600bps的时候,表示每一秒传送9600个比特的数据,——(9600bit/s),那么传送一个比特需要1/9600秒;当时钟周期是50Mhz的时候,我 可以得到一个时钟周期所占用的时间是1/50_000_000秒(20纳秒);1/9600秒中有多少个1/50_000_000秒就表示传送一个比特需要多少个时钟周期,也就是(1/9600)➗(1/50_000_000)————————》即为CLK_FREQ / UART_BPS。
————————————————
版权声明:本文为CSDN博主「cyzbz」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/cyzbz/article/details/113665159

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值