单片机学习小组
直播中

王鹏

7年用户 1243经验值
私信 关注

PIC16F877 MSSP模块之SPI通信

SPI模式允许同时、同步发送和接收 8位数据。支持SPI的所有四种模式。一般用以下三个引脚来完成通信
? 串行数据输出 (SDO)
? 串行数据输入 (SDI)
? 串行时钟 (SCK)
当工作在从动模式时,可能还需要第 4个引脚:
? 从动选择 (SS)

结构框图:

SSP模块由一个发送/接收移位寄存器(SSPSR)和一个缓冲寄存器(SSPBUF)组成。SSPSR用于器件输入和输出数据的移位,高位在前。在新的数据接收完毕前,SSPBUF保存上次写入SSPSR的数据。一旦8位新数据接收完毕,该字节被送入SSPBUF寄存器。同时缓冲区满标志位BF(SSPSTAT<0>)和中断标志位SSPIF置1。这种双重缓冲接收方式,允许接收数据被读走之前,开始接收下一个数据。在数据发送/接收期间,任何试图写SSPBUF寄存器的操作都无
效,却会将写冲突检测位WCOL(SSPCON<7>)置1。此时用户必须用软件将WCOL位清零,以判别下一次对SSPBUF的写操作是否成功完成。为确保应用软件有效地接收数据,应该在新数据写入SSPBUF之前,将SSPBUF中的数据读走。
缓冲区满标志位BF(SSPSTAT<0>)用于表示SSPBUF是否已经载入了接收的数据(发送完成)。当SSPBUF中的数据被读取后,BF位即被清零。如果SPI仅仅作为一个发送器,则不必理会这一位。通常可用SSP中断来判断发送或接收是否完成。如果需要接收数据,可从SSPBUF中读取。SSP中断一般用来确定发送/接收何时完成。必须对SSPBUF进行读和/写。如果不打算使用中断方法,用软件查询方法同样可确保不会发生写冲突。


主控模式的操作
因为主控制器控制着SCK信号,所以它可以在任何时候启动数据传输,同时主控制器通过软件协议来决定从控制器何时发送数据。在主控模式下,数据一旦写入SSPBUF就开始发送或接收。如果SPI仅作为接收器,则SDO输出可以禁止(将其设置为输入口)。SSPSR寄存器按编程设置的时钟速率,对SDI引脚上的信号进行连续地移位输入,每接收完一个字节,都把其送入SSPBUF,就象普通的接收字节一样(相应的中断和状态位置1)。这在作为“在线主动监控”方式的接收器应用中是很有用的。时钟极性可通过对SSPCON寄存器的CKP位(SSPCON<4>)进行适当的编程来设定。在主控模式下,SPI时钟速率(位速率)可由用户编程设定为下面几种方式之一 :
?FOSC/4 (或 TCY)
?FOSC/16 (或 4 ? TCY)
?FOSC/64 (或 16 ? TCY)
? 定时器2 输出 /2
这里允许的最大数据速率是8.25 Mbps(当晶振为 20 MHz时 )。图 17-6给出了主控模式的时序图。当CKE位置1时,SDO数据在SCK的第一个时钟边沿前就有效。图中所示输入采样的变化则由SMP位的状态决定。图中同时给出了何时将接收到的数据写入SSPBUF。





典型应用




更多回帖

发帖
×
20
完善资料,
赚取积分