ATmega16串行外设接口SPI允许其和外设或其他AVR器件进行高速的同步数据传输。ATmega16中的SPI接口如图10-1所示,其主要特点如下:
●全双工,3线同步数据传输。
●主机或从机操作。
●数据发送时,可设置LSB首先发送或MSB首先发送。
●7种可编程的比特率,即每秒传送多少位的数据。
●数据传输结束中断标志。
●写冲突标志检测。
●可以从空闲模式唤醒。
●主机工作模式时具有倍速模式(CK/2)。
图10-1 ATmega16中的SPI框图
当利用SPI为ATmega16与其他外设或芯片传输数据时,整个数据传输系统由主机和从机两部分构成,主机和从机之间的SPI连接如图10-2所示。系统包括两个移位寄存器和一个主机时钟发生器。主机与从机的通信过程如下:
●通过将需要的从机的引脚拉低,主机启动一次通信过程。
●主机和从机将需要发送的数据放入相应的移位寄存器。
●主机上的SCK引脚产生时钟脉冲以交换数据。主机的数据从MOSI移出,通过从机的MOSI移入;从机的数据通过从机的MISO移出,从主机的MISO移入。
●主机通过将从机的SS拉高实现与从机的同步。
●配置为SPI主机时,SPI接口不自动控制引脚,必须由用户软件来处理。(www.xing528.com)
●对SPI数据寄存器写入数据即启动SPI时钟,将8位的数据移入从机。
●传输结束后SPI时钟停止,传输结束标志SPIF置位。如果此时SPCR寄存器的SPI中断使能位SPIE置位,中断就会发生。
●主机可以继续往SPDR写入数据以移位到从机中去,或者是将从机的拉高以说明数
据包发送完成。
●最后进来的数据将一直保存于缓冲寄存器里。配置为从机时,只要为高,SPI接口将一直保持睡眠状态,并保持MISO为三态。在这个状态下软件可以更新SPI数据寄存器SPDR的内容。即使此时SCK引脚有输入时钟,SPDR的数据也不会移出,直至被拉低。一个字节完全移出之后,传输结束标志SPIF置位。如果此时SPCR寄存器的SPI中断使能位SPIE置位,就会产生中断请求。在读取移入的数据之前,从机可以继续往SPDR写入数据。最后进来的数据将一直保存于缓冲寄存器里。
图10-2 主机和从机之间的SPI连接
SPI系统的发送方向只有一个缓冲器,而在接收方向有两个缓冲器。也就是说,在发送时一定要等到移位过程全部结束后才能对SPI数据寄存器执行写操作。而在接收数据时,需要在下一个字符移位过程结束之前通过访问SPI数据寄存器读取当前接收到的字符。否则第一个字节将丢失。
工作于SPI从机模式时,控制逻辑对SCK引脚的输入信号进行采样。为了保证对时钟信号的正确采样,SPI时钟不能超过fosc/4。
SPI使能后,MOSI、MISO、SCK和引脚的数据方向将按照表10-1所示自动进行配置。
表10-1 SPI引脚重载
下面的例程说明如何将SPI初始化为主机,以及如何进行简单的数据发送。例子中DDR_SPI必须由实际的数据方向寄存器代替;DD_MOSI、DD_MISO和DD_SCK必须由实际的数据方向代替。比如说,MOSI为PB5引脚,则DD_MOSI要用DB5取代,DDR_SPI则用DDRB取代。
下面的例子说明如何将SPI初始化为从机,以及如何进行简单的数据接收。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。