对于PIC16F877的SPI模块而言,当硬件上SSP使能位SSPEN为1时,SSP模块处于工作状态。对于串行通信,关键是确定要发送的数据和时钟的关系。下面先介绍SPI模块的时钟是如何确定的。
通过图10-1最下方的SCK来源部分电路图可知,SPI的移位时钟源由SSPM3、SSPM2、SSPM1、SSPM04个信号控制。SSPM3~SSPM0的不同组合可以使SPI模块工作于不同的模式。在主控发送模式下常用的组合如下。
SSPM3~SSPM0:MSSP工作模式选择位。
●0000:SPI主控模式,时钟=Fosc/4。
●0001:SPI主控模式,时钟=Fosc/16。
●0010:SPI主控模式,时钟=Fosc/64。
●0011:SPI主控模式,时钟=TMR2的溢出频率/2。
当发送时钟和工作模式确定后,还需要确定时钟与数据的时序关系。这主要由CKP和CKE信号来确定。其中,CKP是时钟极性选择位,用来决定时钟线(SCK)无数据时的电平状态。其功能如下。
●CKP=0:空闲时,时钟停留在低电平。
●CKP=1:空闲时,时钟停留在高电平。(www.daowen.com)
CKP与CKE信号配合用来确定在SCK的哪个边沿来发送数据。其关系如表10-1所示。
表10-1 CKP与CKE组合功能表
当时钟确定完毕后,把要发送的一个字节送到同步串行通信缓冲器(SSPBUF)中。SSPBUF在写入一个数据后会立刻把此数据送到SSP移位寄存器(SSPSR)中,同时SSPIF信号变为0。由于SSPSR是内部寄存器,程序无法直接访问,所以SSPSR中的数据在移位时钟的驱动下,由高到低依次把数据的bit7~bit0发送到SDO信号(当RC5引脚置为输出时,会出现在RC5引脚上)。当一个字节发送完毕后会使SSPIF信号由0变1。SPI主控发送模式的工作流程可以用时序图10-2表示。
图10-2 SPI主控发送模式时序图
当GIE为1,PEIE为1,SSPIE为1时,SSPIF置位并引发中断。SSPIF必须用软件清零。
在SPI主控发送模式下,发送数据期间任何试图写SSPBUF的操作都无效,并且不会有标志位表示此类错误,所以建议工程师一定要在判断SSPIF为1的情况下再发送新数据。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。