单片机—SPI接口简述(下)

 

3  工作机制

 

主模式(master mode)  在主模式下,移位时钟scKSPI模块产生。在寄存器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位数据在8SCK周期后全部移出。同时,接收的数据也通过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接收中断。

 

63给出了SPI主机模式下不同运行类型的时序(SCKPOL等于“1或“0SCKPHA等于“1”或“0”,取样控制位等于“1”或“0)
 
665){this.resized=true;this.style.width=665;}" style="cursor: pointer; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; ">


从模式(slave mode)  在从机模式下,移位时钟SCK来自外部SPI主设备,所以第一个外部时钟周期开始传输。发送前,软件应在第一个来自主设备的SCK之前向其发送缓冲写入数据。主设备与从设备都必须按相同的SCK相位和极性运行,以进行数据的发送与接收。

 

如果SCKPHA为“1,只要向P_SPI_TxData寄存器写入数据,就开始移出的第一个数据位。如果SCKPHA为“0”,则在第一个SCK边沿后才开始移出的第一个数据位。

 

SPI从模式时序如图64所示。图中“SSB”为SPI从机选择信号,由主机发出,从机接收到“SSB”信号后启动SPI


665){this.resized=true;this.style.width=665;}" style="cursor: pointer; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; ">


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才能保证从机数据接收正确。因此,采样时钟选择位(SPISPCLK[1:0])宜设置为2

 

采样时钟频率=8 MHz2=4 MHz

 

I O 设置对照   SPI 在主/从模式下工作时,端口 C 的设置如表 6 7 所列。
 
665){this.resized=true;this.style.width=665;}" style="cursor: pointer; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; ">
665){this.resized=true;this.style.width=665;}" style="cursor: pointer; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; ">
 

你可能感兴趣的:(单片机—SPI接口简述(下))