1 引 言
串行通信实际上就是两台电子设备之间一位一位地发送和接收数据,它分为同步通信和异步通信两类。异步串行通信无需数据时钟、帧同步时钟等时钟信号,数据的发送和接收是自同步的,完全依靠收发双方约定的传输波特率和数据线自身的电平变化来正确地收发数据位流,而且又因为它连线简单,可以直接与PC机等带异步串口的设备相连,同时它又采用RS 232电平,传输的距离要比同步通信的长。正因为有上述的优点,异步串行通信被广泛应用在要进行远距离遥测遥控的航天电子工程中。
但是,一般的处理器芯片都带有同步串行接口,只有少数韵处理器,如TMS320F2XX、TMS320F24XX带有速度相对较低的异步串口。为了实现那些没有带有异步串行接口的处理器能够与其他设备进行异步串行通信,可以采用复杂可编程逻辑器件CPLD技术,并结合异步串行通信的协议,对异步串行通信接口电路进行设计与实现,该方法开发周期短,并且CPLD的时序严格,速度较快,可编程性好,还可以用于完成电子系统的其他逻辑功能的设计,如实现系统的译码和专门的缓冲电路。这样一块电路板上的外围元器件数量就大大减少,系统的灵活性更好,调试也变得简单的多了,同时,系统的功能模块完成后可以先通过计算机进行仿真,再实际投入使用,降低了使用风险性。
2异步串行通信的原理
异步串行通信方式是把一个字符看作一个独立的信息单元,并且字符出现在数据流中的相对时间是任意的,而每一个字符中的各位是以固定的时间传送。因此这种方式在同一字符内部是同步的,而字符间是异步的。
异步通信的主要特点是字符帧的传输格式,这样就使得发送方可以在字符之间可根据实际的需要插入不同的时间问隔,即每一个字符的发送是随机的。异步串行通信是以数据帧的格式传送的,1个字符开始传输前,输出线必须在逻辑上处于‘1’状态,这称为标识态。传输一开始,输出线由标识态变为‘0’状态,从而作为起始位。起始位后面为5~8个信息位,信息位由低到高排列,即第1位为字符的位,在同一传输系统中,信息位的数目是固定的。信息位后面为校验位,校验位可以按奇校验设置,也可以按偶校验设置,不过,校验位也可以不设置。的数位为‘1’,它作为停止位,停止位可为1位、1.5位或者2位。如果传输完1个字符以后,立即传输下一个字符,那么,后一个字符的起始位便紧挨着前一个字符的停止位了,否则,输出线又会立即进入标识态,即逻辑上处于‘1’。图1是两个字节0XA0和0X67被传输的帧的格式。
在通信中发送方和接收方之间允许没有共同的时钟,所以在异步通信中,收发双方取得同步的方法是采用在字符格式中设置起始位和停止位的办法。每一个字符传输前,信号线上始终为高电平,一旦开始传送就要先传送一个低电平的起始位,这样接收方就开始接收数据,从而与发送方保持同步(格式上的同步)。通信双方可按使用需要随时改变通信协议,即改变数据位、奇偶校验位和停止位长度和数据传输率。
3异步串行通讯控制器的结构设计
异步串行通讯控制器的内部结构可分为控制逻辑电路和寄存器组两大部分。在控制逻辑电路中,包括波特率控制电路、读写控制逻辑电路、发送控制电路、接收控制电路、调制解调器控制逻辑电路、中断控制逻辑电路和内部总线控制逻辑电路。寄存器组分为模式寄存器、控制寄存器和状态寄存器。结构框图如图2所示。
该异步串行通讯控制器提供的模式寄存器和控制寄存器,用来设定奇偶校验、传输速率、握手机制以及中断。在这个设计中,提供了3种奇偶校验选择:不采用、奇校验或偶校验。传输速率的设定是通过向模式寄存器中设置特定的数值,来选择波特率因子,再结合外部连入的时钟信号就可以得出传输的波特率了。它们之间的关系是:时钟频率=波特率因子×波特率。
3.1发送数据模块
串行异步通信的发送器的实现要比接收器简单很多。没有数据要发送时,发送数据寄存器为空,发送器处于空闲状态;当检测到发送数据寄存器满信号后,发送器开始发送起始位,同时8个数据位被并行装入发送移位寄存器,停止位紧接着数据位指示数据帧结束。只有发送数据寄存器为空时,待发送的数据才能被装入,在设计中用一个TxE信号来告诉CPU此时控制器的发送寄存器为空。程序中使用计数器来保证发送数据时时钟的正确。这里使用一个状态机描述发送过程,图3是发送器状态机状态转换示意图。
3.2接收数据模块
串行数据帧与接收时钟是异步的,所以接收器功能实现中的关键是接收器时钟与每个接收字符的同步。一个有效的方法是接收器采用高速率时钟对串行数据进行采样,通常采样频率是位时钟频率的整数倍,也就是选择比较高的波特率因子。理论上倍数越高接收数据各位的分辨率越高,实际中一般选择16倍。
接收器应该尽可能地在靠近每个数据位周期的中心处进行采样。如果接收器能很好地预测起始位的开始,那么它可在起始位的下降沿到来之后,等待半个位周期再采样数据位。此后,接收器每等待一个位周期采样一个数据位,直至收到一位为止。
接收过程主要由一个3位状态机实现,其状态有空闲状态、接收起始位、接收数据位、接收奇偶校验位以及接收停止位。每一个状态表明了当前正在接收到数据属于哪一种字符,并且根据当前接收字符的状态驱动其他部件进行合适的操作。状态转换机的转换图如图4所示。
4基于CPLD的实现和仿真
可编程逻辑器件(PLD)是在20世纪80年代迅速发展起来的一种新型集成电路,随着大规模集成电路的进一步发展,出现了PAL和GAL逻辑器件,而复杂可编程逻辑器件CPLD是在此逻辑器件基础上发展起来的,它是由大量逻辑宏单元构成的。通过配置,可以将这些逻辑宏单元形成不同的硬件结构,从而构成不同的电子系统,完成不同的功能。正是CPLD的这种硬件重构的灵活性,使得设计者能够将用硬件描述语言(如VHDL或者Veritog HDL)描述的电路在CPLD中实现。这样一来,同一块CPLD能实现许多完全不同的电路结构和功能。同时也大大简化了系统的调试,从而能极大地缩短系统的研发周期。
于是我们在验证这一环节中,采用Xilinx公司的XC9500系列的XC95108 CPLD来验证该方案的合理性。在用VHDL语言实现图2的功能时,采用自顶向下的设计方法,先设计一个TOP顶层模块,它里面包括了接口控制电路模块,调制解调模块,发送模块和接收模块。其中接口控制电路模块包含了图2中的波特率控制逻辑电路,数据总线缓冲器和读写控制逻辑电路。设计实现中比较复杂的部分就是接口控制电路的实现。在接口控制电路模块中,设计了接收缓冲寄存器(RBR),发送保持寄存器(THR),中断使能寄存器(IER),中断标识寄存器(IIR),模式选择控制寄存器(LCR),调制解调控制寄存器(MCR),接收发送状态寄存器(LSR),调制解调状态寄存器(MSR),它们的存储器映射地址分别设置为000~110,因为该设计中把控制器设计为不能同时接收和发送,所以接收缓冲寄存器(RBR)和发送保持寄存器(THR)共用一个地址。其中,模式选择控制寄存器(LCR)用来设置,要发送数据的位数(从低到高发送),奇偶校验位的位数和停止位的位数。
采用Xilinx公司的ISE工具发送和对接收这两个关键模块分别进行仿真,发送模块的时序波形图如图5所示,接收数据模块的时序波形图如图6所示。
在发送模块的仿真测试程序中,让CPU的数据总线连续发送55H,AAH,5AH,A5H,并在控制器的模式控制寄存器中设置发送的数据位5位,1个奇偶校验位(偶校验),1个停止位。在TxRDYn信号变低的时候,开始发送一帧新的数据。根据图5中数据输出信号Sout上信号变化的情况可以验证该模块设计是正确的。
在接收模块仿真波形图中,Sin信号是负责接收串行数据的信号线,RBR是该控制器内部的缓冲寄存器,负责存储经过串并转换后的数据,RxRDYn是控制器的外部信号,用来告诉CPU,控制器已经转换完一帧数据,CPU可以把数据从缓冲寄存器中取出。中断信号INTR会在数据传输完后,产生一个正脉冲。在测试接收数据模块的文件中,使产生一个连续的AAH和56H的串行数据,在图6中可以看到在Sin信号每接收完一个数据帧后,数据便存入RBR寄存器,RBR寄存器的数据位AAH和56H,并且在AAH传完后,RxRDYn立即变为低电平。
5 结语
本文在对异步串行通信协议进行分析的基础上,根据实际工程的需要,对异步串行通信控制器进行了详细设计,并结合CPLD器件,采用VHDL语言,对设计方案进行了实现和验证,通过时序仿真的波形图得出了设计方案的正确,而且加载了该设计程序的CPLD在实际工程中能够很好地与处理器进行连接来收发数据,从而为那些没有串行异步接口的处理器提供一个比较理想的设计方案。(李洪威,张遂南)
[1]. CPLD datasheet https://www.dzsc.com/datasheet/CPLD_1136600.html.
[2]. XC9500 datasheet https://www.dzsc.com/datasheet/XC9500_727404.html.
免责声明: 凡注明来源本网的所有作品,均为本网合法拥有版权或有权使用的作品,欢迎转载,注明出处。非本网作品均来自互联网,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。