FPGA实战篇(二)UART通信2

本文详细介绍了FPGA中的UART串口发送模块设计,包括如何确保发送时间略小于接收时间以避免数据丢失,以及如何通过tx_flag信号实现发送状态的监控。在发送过程中,tx_flag保持高电平,tx_cnt计数发送数据位,当计数到9时发送停止位。发送完成后,uart_tx_busy信号拉低,表明串口发送模块进入空闲状态,允许新的发送过程启动。
摘要由CSDN通过智能技术生成

FPGA基础程序学习

第二节 UART通信

串口发送模块

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在程序中,我们将 tx_flag 提前 1/16 个停止位拉低,确保发送模块发送数据的时间略小于接收模块接收数据的时间,否则当连续传输大量数据时,发送数据的时间会不断累积,最终导致在做串口环回实验时丢失数据。
尽管串口发送数据只是接收数据的反过程,理论上传输时间上一致,考虑到模块里计算波特率会有较小的偏差,且串口对端的通信设备(如电脑等)收发数据的波特率同样可能会出现较小偏差,因此为了确保环回实验的成功,将发送模块的停止位略微提前结束。
需要说明的是,较小偏差的波特率在串口通信时是允许的,同样可以保证数据可靠稳定的传输。另外我们在代码中将用于标志串口发送过程的 tx_flag 信号赋值给uart_tx_busy,并通过模块端口输出。这样其他模块可以通过检测 uart_tx_busy 信号是否为低电平,判断串口发送模块是否处于空闲状态。若 uart_tx_busy 为高,那么 uart_send 正在发送,外部模块需要等待发送过程结束后,才能通过 uart_en 信号的上升沿来启动新的发送过程。
我们使用开发板通过串口向上位机向发送 16 进制数55。串口发送使能信号 uart_en 的上升沿。在检测到 uart_en 的上升沿后,en_flag会拉高一个时钟周期,此时将 uart_din 端口上的待发送数据寄存到 tx_data 中,并进入串口发送过程。在整个发送过程中 tx_flag 保持高电平,tx_cnt 对串口数据进行计数,同时 tx_data 的各个数据位依次通过串口发送端 uart_txd 发送出去。当 tx_cnt 计数到9时,串口数据发送完成,开始发送停止位。在一个波特率周期的停止位发送完成后,串口发送过程结束,uart_tx_busy 信号拉低,表明串口发送模块进入空闲状态。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值