DSP

F28027第九课---SPI操作解读

2019-07-13 18:46发布

这周又是忙碌的一周,经常加班到一两点,又荒废了将近一周,都不好意思了,所以今天把事情做完后,匆忙吃晚饭就回来了。
今天我们要学习的是SPI(Serial Peripheral Interface)串行外设接口。
先来看个总图:
SPI
从上面大概可以知道,SPI主要有三部分组成:数据写入读出、SPI使能和时钟、中断。分解后就比较好理解SPI整体的工作原理了:首先设置好使能和时钟,写好中断服务子程序,然后开始数据的传输,当完成一个字节单位数据的读入读出时,产生中断。
了解了概念后,我们现在来具体学习SPI。
我把整个英文文档看完后,认为归纳为两部分:4线操作模式和3线操作模式。其中4线模式是基础,所以我们先从4线模式开始学习。
所谓的四线也就是:SPISOMI、SPISIMO、SPISTE、SPICLK。具体解释如下:
SPISOMI:SPI 从模式的输出引脚,或者主模式的输入引脚;
SPISIMO:SPI 从模式的输入引脚,或者主模式的输出引脚;
SPISTE:SPI 从模式的发送使能引脚;
SPICLK:SPI 串行时钟引脚;
看了上面的四线解释,现在又引出了一个话题,什么是主模式/从模式?
简单的说就是主机和从机的区别,主机提供时钟。
SPI
上面这张图就是一个初步的总结了。
下面我们就要开始学习SPI操作的相关知识了。既然要学习操作,肯定要对寄存器有个大概的初步认识,我先来一张总表:
SPI
寄存器的作用相信大家看名称大概就知道就干嘛的了,我们就不浪费时间在英语解读上面了。
SPI
上面这种图是非常典型的主从控制器组网连接方式。
主控制器通过发送SPICLK时钟信号来启动数据传输。不管主模式还是从模式,数据都是通过时钟信号控制移位寄存器写入读出。有个比较重要的一点就是:主控制器能在任何时候进行数据传输,因为它控制着时钟信号。
贴个图,简单介绍下移位的意思:
移位
主从模式怎么设定呢?它是通过SPICTL.2位的设置来限定的。
那我们下面来具体说说主模式/从模式。
首先是主模式,也就是SPICTL.2=1,提供整个串行网络的时钟,数据从SPISIMO引脚输出,从SPISOMI引脚读入。另外还有一个寄存器–SPIBRR,波特率寄存器,能够提供125种不同的传输速率。
波特率选择和计算如下:
SPIBRR
主模式具体的工作过程如下:
MASTER
看完了主模式,现在来说从模式,SPICTL.2=0,数据从SPISOMI引脚输出,从SPISIMO引脚读入,从外部网络获取的SPICLK信号被用作串行移位时钟信号。传输速率由时钟信号控制,该时钟信号不能超过LSPCLK/4。
slave 说完了数据部分,我们现在来看看中断部分。
主要有五个控制器位用来初始化中断:
SPI INT ENA bit (SPICTL.0)—中断使能位;
SPI INT FLAG bit (SPISTS.6)—中断标志位;
OVERRUN INT ENA bit (SPICTL.4)—超限中断使能位;
RECEIVER OVERRUN FLAG(SPISTS.7)—接收器超限中断标志位;
SPI PRIORITY(SPIPRI.6)—中断优先级选择位; 看完了中断,我们再来看下时钟。
SPI有四种时钟模式,模式选择由CLOCK POLARITY bit (SPICCR.6) 和 CLOCK PHASE bit (SPICTL.3)控制。其中CLOCK POLARITY bit选择有效的时钟跳变沿,时钟上升沿或者下降沿;CLOCK PHASE bit控制时延半个时钟周期。直接给大家上一幅图,大家就明白了:
CLK
CLK 看完了中断和时钟,我们再来学习下初始化。
当系统复位后,默认配置如下:
1、MASTER/SLAVE = 0,默认配置为从模式;
2、TALK = 0,传输能力禁止;
3、在时钟下降沿进行数据的锁存;
4、传输长度为一位;
5、SPI中断禁止;
6、SPIDAT数据为0000h;
7、SPI四线配置为普通IO模式;
我们需要的SPI配置是:
1、SPI SW RESET bit (SPICCR.7)清空,强制SPI处于复位状态;
2、初始化SPI的配置、模式、比特率和引脚;
3、SPI SW RESET bit (SPICCR.7)置1,将SPI从复位状态释放;
4、写数据到SPIDAT or SPITXBUF;
5、当传输完成后,也就是SPISTS.6 = 1,从SPIRXBUF读出有用数据; 下面来看个五位长数据主从控制器传输的例子:
示例
示例 看完例子,来看四线最后一个内容:SPI FIFO
FIFO很好理解,就是first in,first out 先进先出。那主要有什么特点呢?
FIFO
FIFO
最后一点,可编程中断级别,来看看中断
FIFO
FIFO
FIFO 到这里四线就讲完了,现在来看看三线模式。
3线
四线和三线主要的变化就是那两个输入缓存寄存器变成一个了。但同时也有一个问题,就是发送和接收相当于连接在一起了,在进行数据的读写时,都要非常小心。
在三线模式中,TALK bit (SPICTL.1)这一位很重要,这位在传输数据时必须置1,在读数据的时候之前必须清零。在主模式中,为了启动读数据,在TALK位清零读数据之前,必须先写一个假数据到SPIDAT or SPIRXBUF寄存器。
三线控制如下:
3线
来看看三线主从模式的几个例子。
首先是3线主模式传输:
主模式传输
然后是主模式接收:
主模式接收
接着是从模式传输:
从模式传输
最后是从模式接收:
从模式接收 好了,SPI的理论知识到这里就讲完了,又是两个半小时过去了,我们抓紧时间,今晚把实践课也讲完。
F28027菜鸟交流qq群107691092