特性
大部分lpc2000系列微控制器具有两个硬件spi接口(lpc2104/lpc2105/lpc2106只有一个),它们具有如下特性:
完全独立的spi控制器;
遵循同步串行接口(spi)规范;
全双工数据通信;
可配置为spi主机或从机;
最大数据位速率为外设时钟fpclk的1/8。
spi简介
spi是一种全双工的同步串行接口,一个spi总线可以连接多个主机和多个从机。在同一时刻只允许一个主机操作总线,并且同时只能和一个从机通信。
串行时钟由主机产生,当主机发送一字节数据(通过mosi)的同时,从机返回一字节数据(通过miso)。
spi电气连接
使用spi通信需要4个引脚,分别为:
spi传输时序
spi工作模式
lpc2000在spi通信中可作为从机也可以作为主机,这取决于硬件设计和软件设置。
当器件作为主机时,使用一个io引脚拉低相应从机的选择引脚(ssel),传输的起始由主机发送数据来启动,时钟(sck)信号由主机产生。通过mosi发送数据,同时通过miso引脚接收从机发出的数据。
当器件作为从机时,传输在从机选择引脚(ssel)被主机拉低后开始,接收主机输出的时钟信号,在读取主机数据的同时通过miso引脚输出数据。
spi接口内部结构
spi寄存器描述
spi寄存器描述
——spi控制寄存器
spcr寄存器包含一些可编程位来控制spi功能模块的功能,该寄存器必须在数据传输之前进行设定。
cpol:时钟极性控制。
1:sck为低有效;
0:sck为高有效;
cpol:主模式控制。
1:spi处于主模式;
0:spi处于从模式;
lsbf:字节移动方向控制。
1:每字节数据从低位(lsb)开始传输;
0:每字节数据从高位(msb)开始传输;
spie:spi中断使能。
1:每次spif或modf置位时都会产生硬件中断;
0:spi中断被禁止;
spi寄存器描述
——spi状态寄存器
spsr寄存器为只读寄存器,用于监视spi功能模块的状态,包括一般性功能和异常状况。
读溢出:当spi功能模块内部读缓冲区包含没有读出的数据,而新的传输已经完成,就会发生读溢出。如果spif位置位 (读缓冲区已满),新接收到的数据将会丢失,而状态寄存器的读溢出(rovr)位将置位。
写冲突:在spi数据传输过程当中不应向spi数据寄存器写入数据。不能向spi数据寄存器写入数据的时间从传输启动时开始,直到spif置位时读取状态寄存器为止。如果在这段时间内写spi数据寄存器,写入的数据将会丢失,状态寄存器中的写冲突位(wcol)置位。
模式错误:ssel信号在spi功能模块为主机时必须无效,不能用作gpio。当spi功能模块为主机时,如果ssel信号被激活(将ssel变为低电平),表示有另外一个主机将该器件选择为从机。这种状态称为模式错误。
从机中止:如果ssel信号在传输结束之前变为高电平,从传输将被认为中止。此时,正在处理的发送或接收数据都将丢失,状态寄存器的从机中止(abrt)位置位。
spi寄存器描述
——spi数据寄存器
spdr寄存器为spi提供数据的发送和接收。处于主模式时,向该寄存器写入数据,将启动spi数据传输。从数据传输开始到spif状态位置位并且没有读取状态寄存器的这段时间内不能对该寄存器执行写操作。
spi寄存器描述
——spi时钟计数寄存器
作为主机时,spccr寄存器控制sck的频率。寄存器的值为一位sck时钟所占用的pclk周期数。该寄存器的值必须为偶数,并且必须不小于8。如果寄存器的值不符合以上条件,可能会导致产生不可预测的动作。
spi速率 = fpclk / spccr
spi寄存器描述
——spi中断寄存器
该寄存器包含spi接口的中断标志。
使用spi接口的注意要点
作主机时,ssel引脚必须接上拉电阻,不能作为io口使用;
作主机时,在发送一字节数据的同时接收一字节数据;
spi时钟分频值必须大于或等于8;
数据寄存器与内部移位寄存器之间没有缓冲区,写spdr会使数据直接进入移位寄存器。因此数据只能在上一次数据发送完成后写入spdr寄存器。
spi应用示例
——作为主机
spi应用示例
——作为从机