串口通用化应用

时间:2022-10-19 11:21:21

串口通用化应用

摘要本文基于FPGA的硬件平台,通过VHDL硬件描述语言设计一个方便调试、方便使用的串口通信模块,通过简单的设置之后就能满足于大部分设计需求的串口通用化模块。

【关键词】FPGAVHDL串口通信UART

1 串口通信简介

串口是串行接口(serial port)的简称。串口通信是指采用串行通信协议将数据逐个发送出去。

串口通信的两种基本串行通信方式包括同步通信和异步通信。

2 串口通信协议

所谓通信协议是指通信双方的一种约定。约定包括比特率、数据位、停止位和奇偶校验位。其中,奇偶校验位有四种检错方式:偶、奇、高和低。当然没有校验位也是可以的。

3 软件设计

3.1 波特率发生器

波特率发生器需要产生FPGA串口模块所需的波特率时钟信号,包括串口接收波特率时钟信号和串口发送波特率时钟信号,此处的串口接收波特率时钟信号为16倍的串口波特率时钟,串口发送波特率时钟信号为1倍的串口波特率时钟。波特率发生器使用计数器方式对输入的时钟信号进行分频,根据来自串口配置模块的“接收波特率时钟控制字”来具体实现,具体的实现方法如下:

当计数器等于“接收波特率时钟控制字”的一半时串口接收波特率时钟信号输出高电平,当计数器等于“接收波特率时钟控制字”时串口接收波特率时钟信号输出低电平;串口发送波特率时钟信号的产生方法同上。

3.2 串口接收

(1)接收起始位。为了起始位的正确接收,本设计采用16倍的串口波特率时钟信号(即串口接收波特率时钟信号)进行接收,当串口线出现低电平时计数器COUNT开始连续计数,当串口线出现低电平时计数器COUNT_L加1,否则计数器COUNT_L保持。当计数器COUNT开始判断同时将两个计数器清零,如果计数器COUNT_L大于10则起始位有效,并开始采集数据位。

另外,当RX等于0时计数器COUNT_H清零,否则计数器加1,当计数器COUNT_H的值大于32时表示串口线已无数据,即一帧数据接收完毕。

(2)接收数据位。接收数据位的原理与接收起始位的原理相同,不同的是数据位接收的位数较多,而且,当计数器COUNT等于15,计数器COUNT_L大于8时则表示数据位为0,如果计数器COUNT_L小于8则数据位为1,当接收到的数据位数等于串口配置模块的“接收数据位控制字”时则结束对数据位的接收,如果有校验位的话则转去接收校验位,否则转去接收停止位。

(3)接收校验位。接收校验位的原理与接收起始位的原理相同,当计数器COUNT等于15,计数器COUNT_L大于8时则表示校验位为0,如果计数器COUNT_L小于8则校验位为1,同时对所接收的所有数据位进行异或操作。如果串口通信的校验为偶校验且异或操作的结果等于接收的校验位的值,则表示所接收的串口数据正确,否则表示所接收的串口数据错误;。如果串口通信的校验为奇校验且异或操作的结果不等于接收的校验位的值,则表示所接收的串口数据正确,否则表示所接收的串口数据错误。校验为接收完毕之后转去接收停止位。

(4)接收停止位。当到了停止位的接收时表示一个字节数据接收完毕,此时即可对所接收的数据进行处理。如果校验位错误时则丢弃该个字节数据,否则在计数器COUNT的值处于1至5期间对数据进行存储,即将接收到的数据存入双扣RAM中,在计数器COUNT的值等于6时存储地址加1,同时转去接收下一个字节的起始位。

3.3 串口发送

串口发送较串口接收要简单得多。当接收到串口发送指令时,首先读取串口配置模块的参数,之后读取需要发送的数据并以串口发送波特率时钟信号按照串口协议将数据发送出去。

串口发送过程如下:

(1)发送1位起始位,读取“发送数据源控制字”,并根据“发送数据源控制字”读取数据源;

(2)发送数据位,如果发送的数据位的个数等于“发送数据位控制字”的值则数据位的发送结束,同时读地址加1;

(3)读取“发送校验位控制字”,并根据“发送校验位控制字”发送校验位;

(4)读取“发送停止位控制字”,并根据“发送停止位控制字”发送校验位。

3.4 串口配置

串口配置为串口通信模块的移植提供了一个简洁而又快速的设置窗口。串口配置的设置如下:

(1)接收波特率时钟控制字:16倍串口波特率时钟信号的分频倍数;

(2)发送波特率时钟控制字串口波特率时钟信号的分频倍数;

(3)接收数据位控制字:接收数据位控制字为一个字节的有效数据位数;

(4)发送数据位控制字:发送数据位控制字为发送一个字节数据的数据位数;

(5)接收校验位控制字:当串口通信校验为奇校验时接收校验位控制字等于“11”; 当串口通信校验为偶校验时接收校验位控制字等于“00”; 当串口通信无校验时接收校验位控制字等于“01”;

(6)发送校验位控制字:当串口通信校验为奇校验时发送校验位控制字等于“11”; 当串口通信校验为偶校验时发送校验位控制字等于“00”; 当串口通信无校验时发送校验位控制字等于“01”;

(7)发送停止位控制字:如果串口通信停止位为1位则发送停止位控制字等于1;如果串口通信停止位为1.5位则发送停止位控制字等于2;如果串口通信停止位为2位则发送停止位控制字等于2;

(8)发送数据源控制字:当串口发送模块需要发送双扣RAM模块的数据时,发送数据源控制字等于1,否则发送数据源控制字等于0;

(9)发送数据量控制字;发送数据量控制字等于发送一帧数据的数据个数。

4 结论

本文首先介绍了串口通信的协议以及串口通信原理,之后通过对串口通信模块进行分解,进而实现串口通信模块的模块化设计,同时对各个模块的具体实现进行了详细设计,并最终实现了移植性较强的串口通信模块。

最后,将本设计应用开发板中进行了相关的实验验证,验证结果满足了应用需求,同时也达到了设计的目的。

参考文献

[1]刘韬,楼兴华.FPGA数字电子系统设计[M].北京:人民邮电出版社,2005:1-11.

[2]方喜波.基于FPGA串口通信的开发[J].计算机与信息技术,1999.21(7)112-130.

[3]韩佩富等.基于FPGA的串口通信设计[J].北京电子科技学院学报,2006,3(4):74-78.

作者单位

贵州航天电子科技有限公司贵州省贵阳市550000

上一篇:基于以太网和OPC技术的异构网络系统设计与实现 下一篇:对目前传输故障快速定位系统的应用分析