利用UART传输数据
时间:10-02
整理:3721RD
点击:
小梅哥AC620开发板试用体验继续 最近在准备电赛,在做数字频率计相关的题目时恰好有FPGA相关的应用。考虑到其高速运算性能,在数字频率计这样的高速运用中有很大的用武之地,因此今天学习一下如何利用FPGA进行收发数据。为了保证电子系统中的上位机、下位机正确通信传输数据,我们需要为它们编写通信协议。
目前常用的通信协议有I2C,SPI,UART等等,考虑到UART电路结构简单且大部分人都有基础涉猎,因此我决定先从UART开始学起。
UART通信在使用前需要做多项设置,最常见的设置包括数据位数、波特率大小、奇偶校验类型和停止位数。而对这些参数设置的过程,即是我们所谓的编写协议。下面,我分别就发送端与接收端进行简要的试用介绍
============================分割线===========================
一、波特率设定
有过单片机开发经验的朋友们都知道,为了实现不同波特率的传输,我们通常利用查找表的思想,对板载计数器分别赋以不同的初始计数值,本模块的设计需要同时保证复用性,当需要不同波特率时,只置不同计数器的起始值即可。具体代码实现如下:
- always@(posedge Clk or negedge Rst_n)
- if(!Rst_n)
- bps_DR 2)))
- uart_state <= 1'b0;
- else
- uart_state <= uart_state;
另外,这里我们定义的r_data_byte可以参考为C语言中的二维数组,是一个存储器型变量。在这里,他是一个有8位寻址地址的3位存储器。实际上,我们传输的数据即是在某一个八位地址之下,经过数据判决(是否为1)之后的这个三维存储器的值。关于存储器型变量的定义大家可以参照Verilog相关教材,小梅哥的教学视频中也介绍得比较充分。
至此,数据接收模块基本设置完成,接下来对其进行测试验证。
三、模块的测试验证
与发送模块类似,我们依旧利用ISSP进行例化,此时,同样利用串口猎人,我们在串口猎人处发送数据。其结果如下所示:
================================分割线=================================
上面就是我这次对AC620的串口数据发送、接收模块的使用体验。除了再次熟悉了电子系统中上下位机交换数据的必要步骤之外,更加深了对FPGA工程应用体验的认识。在此再次对小梅哥无比坚实的资源支持进行感谢!学习过程中遇到的模块理解问题,在小梅哥配套学习笔记中都有着非常详细的讲解。小梅哥AC620开发板及学习套件组绝对是入手FPGA工程开发的良心利器。
学无止境,希望大家都能加油!材料支持如此丰厚,不怕你不会,就怕你不学。