基于CPLD的RS-232串口通信实现

最新更新时间:2012-04-24来源: OFweek 关键字:CPLD  RS-232  串口通信 手机看文章 扫描二维码
随时随地手机看文章

  CPLD(Complex Programable Logic Device)是一种复杂的用户可编程逻辑器件。采用连续连接结构,延时可预测,从而使电路仿真更加准确。CPLD是标准的大规模集成电路产品,可用于各种数字逻辑系统的设计。开发工具Quartus II、ISE等功能强大,编程语言灵活多样,使设计开发缩短了周期。

  随着嵌入式的发展,对数据的传输和人机交互通信的要求越来越高。而串口通信因其资源消耗少、技术成熟而被广泛应用。系统中上位机与嵌入式芯片之间的交互通信可以通过专用集成芯片作为外设RS-232异步串行接口,如TI、EXAR、EPIC公司的550、452等系列UAWT集成电路,或在拥有Nios系统的FPGA上可以方便地嵌入UART模块。但是在设计中用户会提出自己的要求,如:数据加密或只使用UART部分功能等,即要求更灵活的UART.而且有时CPLD资源剩余,出于成本考虑也会要求设计一种模拟的UART.对于上述的两种情况,就可以在CPLD其丰富的资源上制作一款UART,实现PC机与嵌入式系统之间的数据交换。

  1 串口通信协议

  1.1 UART简介

  通用异步收发器(Universal AsynchrONous Receiver Transmitter,UART)。异步通信的特点:不要求收发双方时钟的严格一致,实现容易,设备开销较小。具有相关工业标准提供的标准的接口电平规范等优点,在工业控制领域被广泛采用。

  异步通信一帧字符信息由4部分组成:起始位、数据位、奇偶校验位和停止位。

  本设计基于RS-232的数据帧结构,设置数据帧结构如图1所示:1 bit起始位,8 bit数据位,1 bit停止位,无校验位。每帧实质上传送1 Byte数据。

 

  1.2 自定义数据包格式

  多个上文所描述的帧就可以组成一个数据包。串口通信是在RS-232数据帧结构的基础上定义的,传输以数据包为单位进行。包结构如图2所示。

 

  本文采用和校验的结构,一个数据包包含15 Byte.其中第1个字节是数据包头即握手字符。第2字节为控制字符,EE代表写命令,DD代表读命令。第3至第14为可利用数据。第15字节作为校验字符,理论上应等于这个数据包中数据字符串之和的后8bit.

  2 设计方案

  2.1 UART的设计结构

  笔者设计采用模块化设计,方案的UART主要由逻辑控制模块、波特率发生模块、发送模块和接收模块等组成。波特率发生模块可以建立精确的时钟,确保数据采样准确、工作时序顺畅。逻辑控制模块、波特率发生模块、发送模块和接收模块完成工作有:确定数据起始位、数据收发,串并转换、建立握手连接、判断命令、数据校验等功能。

  2.2 状态图

  利用串口通信在数据交互过程中涉及到了多种工作状态,情况比较多样,而利用程序设计中的有限状态机(FSM)理论进行编程设计,这个问题可以迎刃而解。

  有限状态机是由寄存器组和组合逻辑构成的硬件时序电路,有限状态机的状态(即由寄存器组各位的1和0的组合状态所构成的有限个状态)只能在同一时钟跳变沿的情况下才能从一个状态转向另一个状态。

  本设计的有限个状态编码使用独热码形式,即寄存器组每一个bit位代表一种状态(如“0100”,“1000”为四态机中的两种状态),这种状态码的好处是避免了状态混乱。状态机采用Mealy型有限状态机,这种状态机的下一个状态不但取决于各个输入值,还取决于当前所在状态,符合UART的工作原理。

  逻辑控制模块、数据接收模块和发送模块的设计都使用到了状态机,其中以逻辑状态机为主状态机,其余两个为从状态机。确定各种工作状态和工作流程后便可构建出状态图,方便直观地进行后续设计。

  通过状态图可以方便、准确地得到程序设计框图如图4所示。

 

  能得到较好的实验数据。

  3 各模块设计

  3.1 波特率发生器

  串口通信必须要设定波特率,本设计采用的波特率为9 600 bit/s.产生波特率的时钟频率是越高越好,这样才可产生较高且精确的波特率。设计选用50M主频率要产生9600bit/s波特率,每传送一位数据需要5 208.33个时钟周期。取一个最接近的数是5 208,则波特率为9 600.61,其误差约为0.006%,误码率很低可以确保通信正常。

  波特率发生器要解决的另一个关键性问题是确保准确地捕获起始位“0”。即时准确地捕获起始位不仅决定通信是否顺畅开始,而且还影响后续的数据采样过程可靠地进行。方案采取了16分频的波特率发生器,即通过对50 M总时钟源分频,得到一个9 600x16 Hz的时钟进行数据传输,这样每16个时钟信号采样1 bit数据。在Rxd数据接收端口接收到从空闲高电平“1”跳变为起始位低电平“0”信号后,连续8个分频周期确认是否是起始位。若是连续的低电平则捕获起始位,自此之后每16个时钟周期读取1 bit数据。这种方法不仅确保了起始位的准确捕获,而且使数据采样点处于了数据的正中央保证了数据的准确。

  3.2 接收器

  在波特率发生器捕获起始位并启动后,接收器将开始工作。其主要工作是接收每一位数据,将串行数据移位存入缓冲寄存器,并在接收完一字节数据后将数据存入锁存器完成串并转换,同时发出char_ok信号通知逻辑控制模块一个字节的数据已经接收完毕。

  接收器的部分程序如下所示:

  

  3.3 逻辑处理模块

  逻辑处理模块是模拟UART的决策模块。它主要完成PC机与CPLD的握手、数据处理和数据校验、状态分析与给收发模块提供决策。

  PC机要向CPLD发数据时,先向串口发送FF,FF表示PC机要与CPLD建立联系。CPLD收到这个信息后,由逻辑模块的talk信号通知发射模块握手情况,发送器通过串口给PC机反馈信息,DD表示CPLD收到了PC机的要求并同意建立联系,CC表示握手不成功PC机可以再次发出请求。握手成功后,PC机要向CPLD发出命令字符,E1表示写,E2表示读。

  随后进入数据接收或发送状态,每个数据包接收完毕后逻辑处理模块进入下一状态--数据校验状态。根据上文提到的本设计的数据校验采用和校验,数据校验完后逻辑处理模块会根据校验结果给出信号check,通知发送模块Txd发送反馈信息给PC机。

  逻辑控制模块的部分程序如下所示:

  

  在逻辑接收模块中的重点是握手环节,它体现了PC机与CPLD相互对话的关键,后面两者的互相通信都是基于此而建立的。应用上述思路设计的握手环节时序仿真如图5所示。

 

图5 仿真时序

  如图所示当char接收寄存器通过Rxd接收到一个字符信息后发出char_ok信号,经逻辑控制模块得知是握手信息FF后,触发握手成功talk信号,并在下一时钟上升沿Txd从空闲状态的高电平“1”变为起始位“0”准备发送反馈信息给PC机。

  3.4 发送器

  发送器在接收逻辑处理模块给出的命令后发送相应的数据给PC机。发送内容主要包括:数据正确或握手成功信息DD,示意PC机继续下一步操作;数据重发或握手失败CC,示意PC机重新发送数据;以及PC机欲从嵌入式系统中读出的数据。

  

  4 实验验证

  工程设计的某嵌入式系统要求PC机向CPLD发送数据。CPLD选用ATREL公司的MAX7000系列芯片EPM7128SLC84-15.芯片拥有2 500个可使用门阵列、128个宏单元、8个逻辑阵列块、84个用户I/O接口。CPLD的IO操作电平是TTL电平,通过MAX232电平转换芯片将PC机串口电平转换为TTL电平,就建立起了串口通信的电气基础。PC机上拥有VC++编写的数据下载程序,波特率为9600 bit/s,每个数据帧含1位起始位,8位数据位,无校验位,1位停止位。通信数据格式用上文提到的和校验数据格式,以数据包为单位发送,如图6所示。

 

图6 数据下载

  从实验结果可看到PC机每发送一个完整的15 Byte数据包,CPLD回复握手成功和数据校验正确,表明设计可行。

  5 结束语

  本文从工程设计实际出发,没有选取通用的UART芯片,通过分析异步通信中UART的结构特点,运用CPLD的丰富资源和一些工程技术制作了自定义通信数据包格式的串口通信模块。通过与PC机上数据传输程序联试,实现了信息的传输和人机互动,证明设计方案的正确。如今嵌入式技术应用十分广泛而且市场需求很广阔,PC机与嵌入式系统的通信实现了人机互动使系统功能更加强大。研究对增强嵌入式系统操作性有重要意义。

关键字:CPLD  RS-232  串口通信 编辑:探路者 引用地址:基于CPLD的RS-232串口通信实现

上一篇:如何处理高di/dt负载瞬态(下)
下一篇:接收机高频头微波振荡器的稳频技术

推荐阅读最新更新时间:2023-10-18 16:40

STM32f4---串口通信实验代码(02)
介绍完了这两个函数,我们回到main.c,对于main.c前面引入的头文件为了篇幅考虑,我们后面的实验不再列出,详情请参考我们实验代码即可。主函数代码如下: int main(void) { u8 t,len; u16 times=0; NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置系统中断优先级分组2 delay_init(168); //延时初始化 uart_init(115200); //串口初始化波特率为115200 LED_Init(); //初始化与 LED连接的硬件接口 LED0=0; //先点亮红灯 wh
[单片机]
单片机脉冲信号源的CPLD实现方案
  单片机产生的脉冲信号源由于是靠软件实现的,所以输出频率及步进受单片机时钟频率、指令数和指令执行周期的限制。文中介绍了一种以CPLD为核心的脉冲信号源,脉冲信号源的参数(频率、占空比)由工控机通过I/O板卡设置,设定的参数由数码管显示,这种脉冲信号源与其它脉冲信号发生电路相比具有输出频率高、步进小(通过选用高速CPLD可提高频率及缩小步进)、精度高、参数调节方便、易于修改等优点。    1 系统组成及工作原理   脉冲信号源电路核心采用一片可编程逻辑器件EPM7128SLC84—10,它属于Ahera公司MAX7000系列产品,MAX7000系列产品是高密度、高性能的CMOS EPLD,是工业界速度最快的可编程逻辑器件系列
[单片机]
单片机脉冲信号源的<font color='red'>CPLD</font>实现方案
基于ARM和CPLD的可重构检测系统设计
引言 检测系统的可重构设计是检测技术的发展方向。可重构设计是指利用可重用的软硬件资源,根据不同的应用需求,灵活地改变自身体系结构的设计方法。对于检测系统而言,可重构可以分为软件可重构和硬件可重构。采用硬件可重构技术设计的检测系统具有硬件普适性,通过更换各个硬件模块或配置不同的软件代码,即可实现不同功能的检测,从而减少硬件和软件开发上的投入、缩短产品开发周期。 本文提出了一种基于ARM嵌入式微处理器和复杂可编程逻辑器件( CPLD) 的检测系统硬件可重构设计方法。这种结构检测系统既具有ARM微控制器体积小、集成度高、运算速度快、存储器容量大、功耗低等特点; 又具有CPLD强大的高速逻辑处理能力和方便灵活的动态可重构性,将两者
[单片机]
基于ARM和<font color='red'>CPLD</font>的可重构检测系统设计
串口通信_MSP430串口通信(入门级)
MSP430F5529实现双板间串口通信 年轻人,不要一上来就急着敲代码,串口通信用到的的13个寄存器,快来看看你都会了吗? 哈哈哈~~,可千万不要被这些牛鬼蛇神吓住啊,这次我们讲的是入门级的,不会设置这么多寄存器的(但也不少呦)。 准备好了吗?下面我们开讲了! 1.数据格式 (1)ST:起始位(低电平启动串口) 因为串口待机时处于长期高电平状态,当检测到有低电平时,就会启动准备接收数据。 (2)D0~D7:数据位(可以7位,也可以8位) 1对应高定平,0对应低电平(这应该都清楚吧) (3)AD:地址位:(双板通信用不到) 当多机通信时(例如一个设备发送,多个设备接收) 需要添加地址位
[单片机]
<font color='red'>串口通信</font>_MSP430<font color='red'>串口通信</font>(入门级)
基于CPLD的LED显示屏控制电路设计
  引言   近年来,随着计算机技术和集成电路技术的飞速发展,得到广泛应用的大屏幕显示系统当属视频LED显示系统。在LED显示技术中,由于红色、绿色发光二极管的亮度、光效色差等性能也得到了很大的提高,加之计算机多媒体制作软件的发展,现在伪彩视频LED显示系统的制造成本大大降低,应用领域不断增加。这种伪彩色视频LED显示系统采用了计算机多媒体技术,全同步动态显示视频图像,图像清晰,亮度高,无拼缝,每种颜色的视频灰度等级已经由早期的16级灰度上升现在的256灰度,随着大规模集成电路和专用元器件的发展,256级灰度的全彩色视频LED显示系统随时都可能实现。   LED电子显示技术发展迅速,已成为当今平板显示领域的主导之一。本文着重介
[电源管理]
基于<font color='red'>CPLD</font>的LED显示屏控制电路设计
基于VB6.0的MSP430单片机与PC机串口通信设计
  串行通信已经成为计算机与其他设备进行数据交换最广泛的通信手段。主要介绍了利用MSP430 单片机的串口通信模块和VB6.0 提供的串行通信控件MSComm 实现PC 机与MSP430 单片机的串行通信,并着重阐述了在VB6.0 环境下实现的主要过程。   1 引言   随着计算机技术的不断发展,计算机应用在其发展过程中逐步形成两大分支,一是通用计算机,PC 机为代表,着眼于高速数值运算和数据处理,但实时测控能力较弱。二是嵌入式微机,以单片机为代表,着重发展测控技术,但其数值运算和数据处理能力较弱。目前,在 工业控制 以及数据采集和数据处理的大型系统中,由于PC 机软件资源丰富,人机交互方便等优点。以PC 机作为上位
[单片机]
基于VB6.0的MSP430单片机与PC机<font color='red'>串口通信</font>设计
基于CPLD/FPGA的多功能分频器的设计与实现
   引言   分频器在CPLD/FPGA设计中使用频率比较高,尽管目前大部分设计中采用芯片厂家集成的锁相环资源 ,但是对于要求奇数倍分频(如3、5等)、小数倍(如2.5、3.5等)分频、占空比50%的应用场合却往往不能满足要求。硬件工程师希望有一种灵活的设计方法,根据需要,在实验室就能设计分频器并马上投入使用,更改频率时无需改动原器件或电路板,只需重新编程,在数分钟内即可完成。为此本文基于 CPLD/FPGA用原理图和VHDL语言混合设计实现了一多功能通用分频器。    分频原理   偶数倍(2N)分频   使用一模N计数器模块即可实现,即每当模N计数器上升沿从0开始计数至N时,输出时钟进行翻转,同时给计
[嵌入式]
基于<font color='red'>CPLD</font>/FPGA的多功能分频器的设计与实现
STM32串口通信的重要性
刚开始学单片机的你,是不是会因用程序把LED点亮而感到高兴,会因用程序把数码管点亮而感到高兴。这是好事,这也是想继续学习下去的动力。 但是数据相关的实验是学习单片机和STM32的一道坎,此时就需要用好本文要说的串口这个调试工具。 串口通信介绍 关于串口通信的介绍,也可以点击阅读之前发的一篇文章。 STM32串口通信基本原理 串口通信是指外设和计算机间,通过数据信号线 、地线、控制线等,按位进行传输数据的一种通讯方式。..。..这种太过理论了,看似懂了,但又不懂。还是用我笔者自己的话来说吧。 串口通信就是可以把程序在单片机或者STM32芯片中运行的结果发送到电脑的一种通信方式。 如何使用串口通讯,你需要知道的几个重要的知识点
[单片机]
小广播
最新电源管理文章
换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved