基于MSP430和FPGA的三线串行接口测试仪的设计

2013-12-07 06:18杨亭粘伟
电子技术应用 2013年2期
关键词:状态机寄存器时序

杨亭,粘伟

(北京空间机电研究所,北京 100076)

三线串行接口是一种广泛应用在航天工程领域的简单串行通信接口,是航天单机产品遥测遥控通信链路的重要环节。三线串行接口具有电路简单、时序便于实现、波特率可调等诸多优点[1]。

传统三线串行接口的设计一般是采用数字电路搭接而成,虽然能满足工程设计要求,但是体积较大,耗费资源过多,而且灵活性欠佳。为了对三线串行接口电路进行优化,同时对三线串行通信进行测试,本设计采用FPGA技术设计了三线串行接口的时序电路,将三线时序功能集成到单片FPGA中,大大减小了电路单元体积。同时,采用单片机MSP430来控制FPGA中产生的三线串行时序,单片机通过RS232C通信方式与PC进行通信,进而在上位机软件中直接配置三线串行接口的时序参数和通信数据,使得测试三线串行接口通信的方便性和灵活性大大增强。

1 三线串行通信原理

三线串行接口通信是一种主从同步串行通信,其数据发送端和接收端有共同的时钟源,数据接收端采用光耦隔离,一般时钟频率在100 kHz~1 MHz之间。三线串行接口有门控信号EN、时钟信号CLK、串行数据信号DATA三根信号线。三线串行接口包括发送和接收两种工作模式,图1给出了三线串行通信发送模式的一种时序图。

门控信号EN的下降沿表明一次数据传输的开始,之后保持低电平有效,数据在时钟信号的下降沿采样,每个时钟周期接收或者发送一位串行数据,直到数据发送完成。在数据发送或接收的整个过程中,门控信号一直处于低电平不变[2]。

2 三线串行接口测试仪的总体方案设计

图2 三线串行接口测试系统组成框图

本设计将三线串行接口测试仪划分为三大功能单元:FPGA时序产生单元、MSP430控制单元、上位机软件单元。图2是三线串行接口测试仪的总体方案设计框图。

FPGA时序单元主要用于产生三线串行时序,选用Xilinx公司的Spartan-3A系列FPGA,其上电配置由一片PROM来实现。FPGA时序单元通过Verilog语言编写的有限状态机来实现各种时序,有限状态机属于一种时序逻辑电路,是协调相关信号动作、完成特定操作的控制中心[3]。有限状态机一般由三部分组成:当前状态、下一状态和输出逻辑。本设计采用摩尔型有限状态机来实现各种模式的三线接口时序,所谓摩尔型状态机指输出值与当前的状态有关,与当前的输入无关。

MSP430控制单元主要用于对FPGA的各种功能模块进行控制,通过APB总线的方式访问FPGA内部的寄存器来实现。单片机通过C语言编程的方式灵活地修改各个时序参数,并和上位机软件进行通信。

上位机软件采用微软公司的VC++集成开发环境开发,本设计将软件划分成几个小功能模块,并将部分模块做成动态链接库的形式供主程序调用。上位机软件主要包括主接收程序、数据发送程序、三线串行接口配置程序、RS232通信动态链接库。

此外,电路中用到了多组电源,FPGA供电电压为1.2 V,单片机供电电压为3.3 V,三线串行接口的数据接收端一般需要光耦隔离,本设计选用的是5 V供电的光耦,RS232通信芯片也是5 V供电,所有这些电压都由相应的电源芯片直接产生。

3 三线串行接口测试仪设计方案的实现

3.1 三线串行接口时序产生单元的FPGA实现

设计的三线串行接口电路要求能够实现三线串行时序,同时要求具备时序参数(比如时钟频率、采样方式等)可调、数据收发等功能,根据上述目标,本设计将FPGA时序产生单元划分成以下几个模块:three-wire register interface(三线寄存器接口模块)、three-wire send(三线发送模块)、three-wire receive(三线接收模块)和three-wire clock(三线时钟产生模块)。

Three-wire register interface:该模块主要用于FPGA与单片机MSP430的通信。本设计将FPGA当作一个外部设备挂接在MSP430的I/O端口,MSP430控制 I/O端口通过特定的总线时序来访问FPGA内部的配置寄存器。总线时序采用APB总线时序。APB总线是ARM体系结构里片内芯片互联的一种高性能总线,其控制信号线包括:复位信号RST、系统时钟SYSCLK、读信号READ、写信号 WRITE、片选信号 PSEL、使能信号 PEN,另外还包括一个8位的地址总线ADDR[7:0]和8位数据总线DATA[7:0][4]。图3给出了三线寄存器接口APB总线连接图。

Three-wire send:该模块主要用于三线串行接口发送数据时的时序产生,三线发送模块时序采用摩尔型状态机实现,该状态机共有7个状态:IDLE状态、START状态、DELAY1状态、SEND状态、DELAY2状态、END状态和DELAY3状态,各个具体状态转换如图4所示。

图3 三线寄存器接口APB总线连接图

图4 FPGA三线串行接口时序控制软件状态机转换图

每个状态都有一个状态指示控制信号,以SEND状态为例,其指示控制信号为send_run。当状态机进入SEND状态后,send_run变为1,然后SEND状态的电路开始工作。当该电路执行完毕后会将send_run变为0时,表明退出SEND状态,状态机进入下一状态。其余状态类似。各状态定义如下:

IDLE状态,为空闲等待状态,即系统上电后的状态机的初始状态,当系统完成初始化或者完成一次完整的时序功能后状态机都会返回IDLE状态。

START状态,表示三线串行通信开始,在检测到三线串行接口的使能数据线EN有效后状态机进入到START状态。

DELAY1状态,表示三线串行通信数据使能后,时钟信号相对使能信号的延迟时间,该状态实际上起到一个延时的作用。

SEND状态,表示三线串行通信数据开始发送,该状态下三线串行数据将开始移位发送。

DELAY2状态,表示三线串行通信数据发送完一个字节后的间隔时间,该状态实际上起到一个延时的作用。

END状态,这是表示三线串行通信数据发送结束。

DELAY3状态,这是表示三线串行通信数据发送结束后,使能信号变成无效后相对最后一个时钟触发沿的延迟时间。

Three-wire receive:当三线串行接口的使能信号线有效后(高电平有效或低电平有效),在同步时钟的触发下(上升沿或下降沿)对数据信号线进行采样,采样得到的数据位经过一个8位移位寄存器实现串/并转换,转换后的8位并行数据存放到接收FIFO中。接收FIFO的大小为128 B,接收FIFO的使用使得三线串行接口具备了数据缓存功能,不必担心单片机和FPGA接口速度匹配问题导致的数据丢失。当三线串行接口的使能信号由有效变成无效时,接收模块向系统发送“三线数据接收结束”中断,该中断信号直接与单片机的外部中断连接,从而单片机可以快速响应该中断通过APB总线读取接收FIFO中的数据。图5是三线接收模块的构成框图。

Three-wire clock三线时钟模块:该模块实际上是一个时钟分频模块。由于FPGA系统采用的系统时钟频率为50 MHz,本设计需要的三线串行模块的时钟频率是由系统时钟频率经分频得到[5]。为了实现可调的三线时钟频率,要求分频系数可调。分频系数存储于一个32 bit的分频寄存器中,通过三线串行接口模块中的寄存器配置能修改该分频系数。

图5 三线接收模块的构成框图

通过ISE自带的ISim仿真器对三线串行接口时序产生单元做了功能仿真,仿真图如图6所示。

3.2 单片机控制三线串行接口寄存器

图6 三线串行接口时序产生单元的仿真图

MSP430单片机在测试仪中起到控制和配置三线串行通信参数的作用,这是通过单片机读写APB总线上挂接的三线串行接口配置寄存器组来实现的。本设计自行定义了配置寄存器的地址和功能。以三线串行接口LINE1寄存器组为例来介绍配置寄存器:LINE1寄存器组包括了发送相关的7个寄存器,分别用于控制三线串行接口的发送参数。如表1所示,LINE1_CLK寄存器是一个32位的寄存器,其访问地址为0x14,属于LINE1寄存器组,通过配置LINE1_CLK寄存器可以很容易调整三线串行接口的时钟频率,其调整范围可以从0~1 MHz,这可以通过调整分频系数寄存器来计算。

表1 三线串行接口LINE1寄存器组

3.3 上位机软件设计

上位机软件主要划分成几个模块:数据收发单元、配置文件、RS232通信动态链接库、图形用户接口。其中图形用户接口是软件的主程序,在该程序中可以调用其他程序[6]。比如可以调用数据发送程序来发送三线串行数据,也可以调用配置程序来配置三线串行接口的通信参数等。图7是上位机软件的系统架构图。

三线串行接口配置软件功能包括调整三线串行总线频率 f、调整三线时序中的 t1、t2、t3以及总线信息设置等。三线发送软件功能包括数据发送的模式和方式,如手动发送、自动发送等模式,以ASCII或HEX方式发送等。

本文通过介绍三线串行接口通信原理,给出了三线串行通信接口测试仪的硬件电路和软件设计。针对传统三线串行接口电路资源占用过多且不够灵活的缺点,构建了基于MSP430单片机和FPGA的三线串行通信测试仪,详述了其组成模块及工作方式。本方案设计合理可行,优点突出,满足了实际应用要求。目前,此测试仪已研制出样机并成功应用于某航天型号项目的通信测试平台中。

图7 三线串行接口软件系统架构图

[1]杨承富,徐志军.SPI总线接口的FPGA设计与实现[J].现代电子技术,2004,27(2):73-74.

[2]冯春阳,张遂南,王玮,等.基于 FPGA的三线制同步串行通信控制器设计[J].电子技术应用,2009,35(9):54-56.

[3]田耘,徐文波.Xilinx FPGA开发实用教程[M].北京:清华大学出版社,2008.

[4]MAXIM Corp.SPI/I2C Bus Lines Control Multiple Peripherals[EB/OL].http://www.maxim-ic.com/an4042.2007.

[5]HUANG R W,HUANG H W.Development of real time monitoring system using controller area network[J].Materials Science Forum,2006(1):505-507.

[6]夏宇闻.Verilog数字系统设计教程[M].北京:北京航空航天大学出版社,2003.

猜你喜欢
状态机寄存器时序
清明
STM32和51单片机寄存器映射原理异同分析
Lite寄存器模型的设计与实现
基于不同建设时序的地铁互联互通方案分析
基于有限状态机的交会对接飞行任务规划方法
基于FPGA 的时序信号光纤传输系统
基于模体演化的时序链路预测方法
双口RAM读写正确性自动测试的有限状态机控制器设计方法
高速数模转换器AD9779/AD9788的应用
基于反熔丝FPGA的有限状态机加固设计