3 工作机制
主模式(master mode) 在主模式下,移位时钟scK由SPI模块产生。在寄存器P_SPI_CtrlO中有两个分别控制时钟相位(SCKPHA)和极性(SCKPoL)的控制位。当向P_SPI_TX_Data寄存器写入数据时,发送立即开始。另外如果用户想要接收从机数据,SDI引脚(PC2)可以设置为悬浮输入状态。SPMc65系列单片机支持SPI模块的接收和发送中断。在寄存器P_SPl_Status中将SPllEN位置1可同时使能收发中断。同样,在收发中断服务程序结束后需要清除SPIIF标志位。
在软件向寄存器P_SPI_TxData写人一个字节之后,数据被锁存到寄存器的内部发送缓冲器中。如果此时移位寄存器是空的,该数据将被载入到移位寄存器中并在下一个SCK相位时开始传输。如果移位寄存器正在执行数据移位(由P_SPI_TxStlatus寄存器中的TXBF标志得知),新数据会等待当前的数据移出后才可以载人进行移位。
SPI通过SDO引脚将数据从最高有效位(MsB)开始移出.直到最低有效位(LSB)也被移出。8位数据在8个SCK周期后全部移出。同时,接收的数据也通过SDI引脚移人。当每组8位发送完成后,P_SPI_Status寄存器中的SPIIF置“l”;此外,如果寄存器P_SPI_Status中的SPIIEN位被设置为“ 1 ” ,会产生一个SPI发送中断。
相反,当SPI接口成功地接收了一组8位数据时,接收到的数据将被锁存到接收缓冲器中。此时,P_SPI_Status寄存器中的SPIIF位将被设置为“1”。如果P_SPI_Status寄存器中的SPlIEN位被设置为“ 1 ” ,会产生一个SPI接收中断。
图6.3给出了SPI主机模式下不同运行类型的时序(SCKPOL等于“
1
”
或“
0
”
,SCKPHA等于“1”或“0”,取样控制位等于“1”或“0”)。
从模式(slave mode) 在从机模式下,移位时钟SCK来自外部SPI主设备,所以第一个外部时钟周期开始传输。发送前,软件应在第一个来自主设备的SCK之前向其发送缓冲写入数据。主设备与从设备都必须按相同的SCK相位和极性运行,以进行数据的发送与接收。
如果SCKPHA为“ 1 ” ,只要向P_SPI_TxData寄存器写入数据,就开始移出的第一个数据位。如果SCKPHA为“0”,则在第一个SCK边沿后才开始移出的第一个数据位。
SPI从模式时序如图6.4所示。图中“SSB”为SPI从机选择信号,由主机发出,从机接收到“SSB”信号后启动SPI。 SPI中断与SPI相关的中断有SPI发送中断和SPI接收中断两个。因为SPI为全双工通信,因此这两个中断同时发生,并且共用一个中断标志位。
设置SPI中断需要以下步骤。
(1)用“SEI”指令关闭总的中断开关。
(2)使能SPI模块,配置相关寄存器。
(3)在P_SPI_Status($ 3A )寄存器中将SPIIEN位置1,使能SPI中断。
(4)用“CLI”指令打开总的中断开关。
(5)等待中断产生。
4 应用举例
SPI时钟计算公式用下面的公式计算采样时钟,可以保证获得正确的数据。
采样时钟频率≥4×SPI Clock 例如:
SPI时钟频率=1 MHz(PCI),Fsys=8 MHz;
采样时钟频率≥4×1 MHz=4 MHz;
采样时钟必须大于4 MHz才能保证从机数据接收正确。因此,采样时钟选择位(SPISP—CLK[1:0])宜设置为2。
采样时钟频率=8 MHz/2=4 MHz。
I
/
O
设置对照
SPI
在主/从模式下工作时,端口
C
的设置如表
6
.
7
所列。
|
单片机—SPI接口简述(下)
最新推荐文章于 2024-08-22 17:29:04 发布