1、第15章 串行外设接口SPI,15.1 SPI模块的通用知识,SPI是Serial Peripheral Interface的缩写,翻译成中文就是串行外围设备接口。SPI是一种高速的同步串行输入输出接口,允许116位的数据流在设备与设备之间进行交换,通常用于DSP与外围设备或者DSP与其他控制器之间进行通信。,SPI和SCI的区别,SCI 串行通信接口 低速异步串行通信 SPI 串行外设接口 高速同步串行通信 同步通信时,通信双方的设备必须拥有相同的时钟脉冲,以相同的步调进行数据传输,就像国庆阅兵时,队伍中的官兵在统一的口令下齐步前进,整齐划一。 异步通信时,通信双方的设备可以拥有各自独立的时
2、钟脉冲,可以独自进行数据传输,就像是两个人在散步,可以各走各的。,SPI的总线系统,SPI的总线系统可以直接与各个厂家生产的多标准外围器件直接接口,SPI接口一般使用四条线。当然,并不是所有的SPI接口都是采用四线制的,有的SPI接口带有中断信号线INT,而有的SPI接口没有主机输出/从机输入线MOSI。在X281X中SPI接口采用的是四线制。,SPI的环形总线结构,SPI是一个环形总线结构,其时序其实比较简单,主要是在时钟脉冲SCK的控制下,两个双向移位寄存器SPIDAT进行数据交换。,SPIDAT数据传输示例,15.2 F2812 SPI模块的概述,SPI模块的特点,具有4个外部引脚 。
3、有两种工作模式可以选择:主工作模式和从工作模式。 波特率:具有125种可编程的波特率。能够使用的最大波特率受到I/O缓冲器最大缓存速度的限制,这些缓冲器是使用在SPI引脚上的I/O缓冲器,而最高的波特率不能超过LSPCLK/4。,SPI模块的特点,单次发送的数据字的长度为116位,可以通过寄存器设定。 可选择的四种脉冲时钟配置方案 。 接收和发送可以同步操作,也就是说可以实现全双工通信。 和SCI相同,发送和接收都能通过查询或者中断方式来实现。,SPI模块的特点,具有6个控制寄存器、3个数据寄存器和3个FIFO寄存器。值得注意的是,SPI所有的控制寄存器都是8位的,当寄存器被访问时,数据位于低
4、8位,而高8位为0,因此把数据写入SPI这6个控制寄存器的高8位是无效的。 X281X的SPI也具有2个16级的FIFO,一个用于发送数据,一个用于接收数据。 在标准的SPI模式(非FIFO模式)下,发送中断和接收中断都使用SPIINT/RXINT。在FIFO模式中,接收中断使用SPIINT/RXINT,而发送中断使用的是SPITXINT。,SPI的信号总结,SPI模块的结构框图,SPI主从工作模式,主机模式,问: 如何设置SPI成为主机,就像图15-6中的处理器1?答:通过设置SPI工作控制寄存器SPICTL的MASTER/SLAVE位为1来使得SPI工作于主机模式。编程的语句为:SpiaR
5、egs.SPICTL.bit.MASTER_SLAVE=1 。,主机模式,问:整个SPI的通信网络中的时钟和波特率是由主机来提供的吗?答:是的。从字面上理解,主机就是在系统中占主导地位的设备,关乎到整个系统的运行。主机通过SPICLK引脚为整个通信网络提供时钟脉冲信号。由于每经过一个时钟脉冲,SPI就完成一位数据的发送,因此时钟脉冲的频率就是通常所说的波特率,其值由主机的SPIBBR寄存器来决定。通过对SPIBBR寄存器的编程,SPI能够实现125种不同的波特率,最大波特率为LSPCLK/4。,主机模式,问:主机的数据是如何发送和接收的呢?答:主机通过SPISIMO引脚来发送数据,而通过SPI
6、SOMI引脚输入数据。如图15-6所示,当数据写到移位寄存器SPIDAT或者写到串行发送缓冲器SPITXBUF的时候,就会启动SPISIMO引脚开始发送数据,首先发送的是SPIDAT的最高位,接着将剩余的数据左移1位,然后将接收到得数据通过SPISOMI引脚移入SPIDAT的最低有效位。,主机模式,问:在数据传输过程和传输完成两种状态时,主机的SPISTE引脚有何变化?答:从前面的学习已经知道,引脚SPISTE是从机使能信号,这是一个低电平有效的信号,也就是说当主机需要给从机发送数据的时候,引脚SPISTE就被置为低电平,当主机发送完需要发送的数据后,引脚SPISTE重新被置为高电平。片选信号
7、的存在使得系统能够同时拥有多个从机,但是在同一时刻,只能有一个从机起作用。,从机模式,问:SPI从机的时钟是由随决定的? 答:前面已经讲到过,SPI系统通信的时钟是由主机来决定的,也就说从机通过SPICLK引脚来接受主机提供的串行移位时钟。从机SPICLK引脚的输入频率应不大于LSPCLK/4。,从机模式,问:SPI从机的时钟是由随决定的?答:前面已经讲到过,SPI系统通信的时钟是由主机来决定的,也就说从机通过SPICLK引脚来接受主机提供的串行移位时钟。从机SPICLK引脚的输入频率应不大于LSPCLK/4。,从机模式,问:从机的数据是如何接收和发送的呢?答:这个和主机的数据传输机制其实是类
8、似的,首先,从机数据是通过SPISOMI引脚来发送的,而通过SPISIMO引脚来接收的。当从机接收到来自于主机脉冲信号的边沿时,就可以启动数据的发送和接收了。当数据写入SPIDAT或者SPITXBUF后,SPIDAT就开始将数据的最高位移出,同时左移剩下的数据,然后将接收到的数据移入SPIDAT的最低位。,从机模式,问:由于从机通常是接收功能用的比较多,那如何禁止SPI的发送功能?答:可以通过设置SPICTL寄存器的TALK位来禁止SPI的发送功能,编程语句为:SpiaRegs.SPICTL.bit.TALK=0。,SPI数据格式,X281X的SPI通过对配置控制寄存器SPICCR的第3位至第0位的选择,可以实现116位数据的传输。当每次传输的数据少于16位时,需要注意以下几点: 当数据写入SPITXBUF和SPIDAT寄存器时,必须左对齐; 当数据从SPIRXBUF寄存器读取时,必须右对齐; SPIRXBUF寄存器中存放的是最新接收到的数据,数据采用右对齐方式,再加上前面移位到左边后留下的位。,SPIDAT和SPIRXBUF寄存器数据移动方式,SPI波特率,SPI通过对寄存器SPIBRR的配置,可以实现125种不同的波特率,计算公式如下:当SPIBRR=0,1,2时:,当SPIBRR=3127时:,SPI时钟配置,SPI的中断,