1.1设计简介
目前控制系统微型化的要求越来越高,为了使数字处理系统微型化,必须舍弃常用的并行总线接口方案,采用只需少量引脚线的串行总线接口方案。SPI接口的英文全称是Serial Peripheral Interface,可以翻译为串行外围设备接口。因为它是同步串行通讯的,通常称为同步串口。SPI总线是一种三线同步总线,因其硬件能力很强,与SPI有关的软件就相当简单,使CPU有更多的时间处理其它事务,因此得到广泛应用。SPI实际上是一种串行总线标准,它是一种真正的同步方式,两台设备在同一个时钟下工作,因此传输速率高达几十兆。现在与SPI总线兼容的芯片越来越多,因此,SPI为控制系统的设计带来了很大方便。例如,SPI接口提供了单片机和外围期间短距离高速通讯的接口,主模式下最高速度可以达到系统时钟的二分之一。很多器件是SPI接口的从设备比如一些EEPROM,比如AT25128;有些LCD,比如PG12864-N;有的FLASH芯片也是SPI接口的。SPI接口也可以作为CPU之间通讯的方式。该接口一般使用4条线:串行时钟线(SCK)、主机输入/从机输出数据线MISO、主机输出/从机输入数据线MOST和低电平有效的从机选择线SS。SPI有主、从两种工作模式,SPI的结构通过两类寄存器来体现:数据类寄存器和控制类寄存器。在使用SPI工作方式之前必须对含有SPI接口的模块做初始化的工作,主要是在SSPCON寄存器和SSPTAT寄存器中设置相关的标志位。
2 SPI原理简介
2.1 SPI的概述
SPI(Serial Peripheral Interface--串行外设接口)总线系统是一种同步串行外设接口,它可以使MCU与各种外围设备以串行方式进行通信以交换信息。外围设置FLASHRAM、网络控制器、LCD显示驱动器、A/D转换器和MCU等。SPI总线系统可直接与各个厂家生产的多种标准外围器件直接接口,该接口一般使用4条线:串行时钟线(SCK)、主机输入/从机输出数据线MISO、主机输出/从机输入数据线MOST和低电平有效的从机选择线SS(有的SPI接口芯片带有中断信号线INT或INT、有的SPI接口芯片没有主机输出/从机输入数据线MOSI)。由于SPI系统总线一共只需3~4位数据线和控制即可实现与具有SPI总线接口功能的各种I/O器件进。行接口,而扩展并行总线则需要8根数据线、8~16位地址线、2~3位控制线,因此,采用SPI总线接口可以简化电路设计,节省很多常规电路中的接口器件和I/O口线,提高设计的可靠性。
2.2 SPI总线的组成
SDI引脚-—串行数据输入(Serial Data Input)
SDO引脚--串行数据输出(Serial Data Output)
SCK引脚――串行时钟(Serial Clock)
SS引脚――从动选择(Slave Select)
2.3 SPI主控方式
由于控制时钟SCK的输出,主控模式可以在任何时候开始数据的传输。主控模式通过软件协议控制从动模式数据输出。
在主控模式,一旦SSPBUF寄存器写入,数据就会发送或接收。如果SPI模式只考虑接收,可以禁止SDO工作(软件设置为输入)。在接收数据时,SSPSR寄存器按照时钟速率移位,一旦接收到一个字节,数据就传输到SSPBUF,同时中断标志位和状态标志位置位。
2.4 SPI从动模式
在SPI从动模式,数据的发送和接收依靠SCK引脚上输入的外时钟脉冲,当最后一位被锁存后,中断标志位SSPIF(PIPI的D3)置位。
在休眠模式,从动,模式仍可以发送和接收数据。一旦接收到数据,芯片就从休眠中唤醒。
如果采用SS控制的从动模式,当SS引脚接到时SPI模式复位。如果采用CKE=1
3应用程序
3.1 流程图
设计流程图如图1所示
3.2基本程序
SPI
图1 设计流程图
(1)复位设置
process(reset,write,e)
begin
c<=write;
ckp<= 1;
cke<='1';
if(reset='0')then
bit_cnt<='0000';
loadh<='1';
b<='0';
else
if (c='1')then
b<=e;
elsif(c='0')then
(2) 寄存器及时钟上升下降沿的设置
case ckp is
when 0 =>b<='0';
if(cke='1')then
a<='1' ;
else a<='0' ;
end if;
when 1 => b<='1';
if(cke='1')then
a<='0' ;
else a<='1' ;
end if;
end case;
end if;
if (a='1')then
if(e'event and e='1') then
if (bit_cnt='1011')then
bit_cnt<='0000';
loadh<=not loadh;
if(loadh='1')then
shift_reg<=dac_high;
else
shift_reg<=dac_low;
end if;
else
bit_cnt<=bit_cnt+1;
end if;
end if;
elsif(e'event and e='0') then
if (bit_cnt='1011')then
bit_cnt<='0000';
loadh<=not loadh;
if(loadh='1')then
shift_reg<=dac_high;
else
shift_reg<=dac_low;
end if;
3.3 软件仿真(运用SignalTap II嵌入逻辑分析仪)
嵌入式逻辑分析仪可以随设计文件一并下载于目标芯片中,用以捕捉目标芯片内部,设计者感兴趣的信号节点处的信号,而又不影响愿硬件系统的正常工作。
使用SignalTapⅡ后,系统设计将要占用部分RAM,因为在实际监测中,将测得的样本信号暂存于目标器件中的嵌入式RAM中,然后通过期间的JTAG端口和ByteBlasterⅡ下载线将采得的信息传出,送于计算机进行分析。对本设计完整程序运用SignalTapⅡ嵌入式逻辑分析仪得到的仿真波形图如图2所示。
SPI
图2 运用SignalTapⅡ嵌入式逻辑分析仪得到仿真波形图。
4、 硬件调试
当程序进行仿真且结果正确后,我们便将程序下载到实验板上进行硬件测试。使用的是Mars-EDA Cyclone PFGA开发板进行调试。我们将用实验板上的Mars-EDA Cyclone核心板上的主芯片 EP1C3T144来模拟SPI的主器件由它发数据给从器件;将带有SPI接口的TLC5615芯片作为从器件进行数据的接收。在这,将一个并行数据发送给主芯片,在其内部进行并串的转化,输出给从器件。从器件将收到的数据存储移位后在DOUT端输出,同时进行数模转化,并将转化后的结果在OUT端输出。故我们可将DOUT端口用作反馈数据的输出送给主器件。
5 结论
本设计采用VHDL语言来设计SPI的IP核,实现了SPI的基本功能。从程序设计方面来看,主要是将时钟信号与移位控制结合起来以实现两个SPI接口之间的的基本通信的。在完成了基本的通信之后,便结合SPI接口通信时的状态和模式设计了模式和时钟频率的选择。由于在设计中并没有涉及到如何使用一个SPI主器件来控制多个从器件,也没有涉及到数据同步的问题,所以还有许多技术问题没有涉及和解决。因此,在后续设计中,应进一步完善设计,以解决更多的技术上,实际中的问题,更好地实现SPI总线时序电路的模拟。
登录 | 立即注册