PIC16F877 MSSP模块之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。
典型应用
PIC16F877MSSP模块SPI通 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)