- 1、本文档共25页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
07SPI总线同步串行通信 - PC机与单片机通信技术
SPI同步串行通信;项目功能
项目知识点与技能点
硬件电路
软件设计
项目实施;【项目功能】;【项目知识点与技能点】;SPI总线通信协议概述;ATmega16单片机SPI接控制与数据传输过程;;2)SPI初始化及数据传送程序示例
下面将以ATmega16单片机为例说明如何将SPI设置为主机,以及如何进行简单的数据传送。MOSI对应ATmega16单片机PB5引脚,MISO对应ATmega16单片机PB6引脚,SCK对应ATmega16单片机PB7管脚,SS对应ATmega16单片机PB4管脚。;(1)设置SPI为主机并进行简单的数据发送。
void spi_masterset(void)
{
/* 设置MOSI 和SCK 为输出,其他为输入 */
DDRB = (1DDB5)|(1DDB7);
/* 使能SPI 主机模式,设置时钟速率为fck/16 */
SPCR = (1SPE)|(1MSTR)|(1SPR0);
}
void spi_mastertransmit(char data)
{
/* 启动数据传输 */
SPDR = data;
/* 等待传输结束 */
while(!(SPSR (1SPIF))) ;
};(2)设置SPI为从机并进行简单的数据接收。
void spi_slaveset(void)
{
/* 设置MISO 为输出,其他为输入 */
DDRB = (1DDB6);
/* 使能 SPI */
SPCR = (1SPE);
}
char spi_slavereceive(void)
{
/* 等待接收结束 */
while(!(SPSR (1SPIF)))
;
/* 返回数据 */
return SPDR;
}; 3)SS引脚的功能
·从机方式
当SPI 配置为从机时,从机选择引脚SS 总是为输入。SS 为低将激活SPI 接口, MISO成为输出( 用户必须进行相应的端口配置) 引脚,其他引脚成为输入引脚。; ·主机方式
当SPI被配置为主机时(寄存器SPCR的MSTR位置“1”),用户可以决定SS引脚方向。如果SS引脚被设为输出,该引脚将作为通用输出口,不影响SPI系统,通常用于驱动从机的SS引脚。;ATmega16 SPI接口相关的寄存器简单介绍; ? Bit 5 – DORD: 数据次序
DORD 置位时数据的LSB 首先发送;否则数据的MSB 首先发送。
? Bit 4 – MSTR: 主/ 从选择
MSTR置位时选择主机模式,否则为从机。如果MSTR为1”,SS配置为输入,但被拉低,则MSTR 被清零,寄存器SPSR 的SPIF 置位。用户必须重新设置MSTR 进入主机模式。
? Bit 3 – CPOL: 时钟极性
CPOL 置位表示空闲时SCK 为高电平;否则空闲时SCK 为低电平。
? Bit 2 – CPHA: 时钟相位
CPHA 决定数据是在SCK 的起始沿采样还是在SCK 的结束沿采样。
? Bits 1, 0 – SPR1, SPR0: SPI 时钟速率选择1 与0
; 确定主机的SCK 速率。SPR1 和SPR0 对从机模式没有影响。SCK和振荡器频率fOSC之间的关系下表所示。
SPI2X SPR1 SPR0 SCK频率(MHz)
0 0 0 fOSC/4
0 0 1 fOSC/16
0 1 0 fOSC/64
0 1 1 fOSC/128
1 0 0 fOSC/2
1 0 1 fOSC/8
1 1 0 fOSC/32
1 1
文档评论(0)