SPI同步串行通信
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
➢掌握SPI同步串行通信技术,并能合理 运用 到实际项目中。
【项目知识点与技能点】
➢SPI总线的通信协议 ➢ATmega16单片机SPI接控制与数据传输过程 ➢ATmega16 SPI接口相关寄存器的设置 ➢D/A转换芯片TLC5615的相关内容
【项目功能】
一、SPI总线通信协议概述
SPI(Serial Peripheral Interface--串行外设接口)总线系统 是一种同步外设接口,允许MCU与各种外围设备以串行方式 进行通信和数据交换。外围设备包括FLASHRAM、A/ D 转换 器、网络控制器、MCU 等. 一般使用4 线制:串行时钟线 (SCK) 、主机输入/ 从机输出数据线MISO、主机输出/ 从机输 入数据线MOSI 和低电平有效的从机选择线SS 。
(1)设置SPI为主机并进行简单的数据发送:
void spi_masterset(void) {
/* 设置MOSI 和SCK 为输出,其他为输入 */ DDRB = (1<<DDB5)|(1<<DDB7);
/* 使能SPI 主机模式,设置时钟速率为fck/16 */ SPCR = (1<<SPE)|(1<<MSTR)|(1<<SPR0); } void spi_mastertransmit(char data) {
三、ATmega16 SPI接口相关的寄存器简单介绍
1)SPI控制寄存器-SPCR
• Bit 7 – SPIE: 使能SPI 中断 置位后,只要SPSR 寄存器的SPIF 和SREG 寄存器的全 局中断使能位置位,就会引发SPI中断。 • Bit 6 – SPE: 使能SPI SPE 置位将使能SPI。进行任何SPI 操作之前必须置位 SPE。 • Bit 5 – DORD: 数据次序 DORD 置位时数据的LSB 首先发送;否则数据的MSB 首先发送。
项目四 基于SPI串行总线接口 DA芯片TLC5615的使用
电气自动化技术专业
• 项目功能 • 项目知识点与技能点 • 项目知识准备 • 硬件电路 • 软件设计 • 项目实施
【项目功能】
➢ 通过ATMEGA16单片机同步串行接口向 D/A转换芯片TLC5615送入相关数字量, 通过D/A转换所得到的电压控制LED亮灭。
• Bit 2 – CPHA: 时钟相位
CPHA 决定数据是在SCK 的起始沿采样还是在SCK 的结束沿 采样。
• Bits 1, 0 – SPR1, SPR0: SPI 时钟速率选择1 与0
确定主机的SCK 速率。SPR1 和SPR0 对从机模式没有影响。 SCK和振荡器频率fOSC之间的关系下表所示。
入。SS 为低将激活SPI 接口, MISO成为输出
( 用户必须进行相应的端口配置) 引脚,其他引脚 成为输入引脚。
·主机方式
当SPI被配置为主机时(寄存器SPCR的MSTR位 置“1”),用户可以决定SS引脚方向。如果SS引 脚被设为输出,该引脚将作为通用输出口,不影响 SPI系统,通常用于驱动从机的SS引脚。
SPI2X 00 00 01 01 10 10 11 11
SPR1 0 1 0 1 0 1 0 1
SPR0
SCK频率(MHz)
fOSC/4
fOSC/16
fOSC/64
fOSC/128
fOSC/2
fOSC/8
fOSC/32
fOSC/64
2)SPI的状态寄存器-SPSR
• Bit 7 – SPIF: SPI 中断标志 串行发送结束后,SPIF 置位。若此时寄存器SPCR 的SPIE 和全局中断使能位置位,SPI中断即产生。如果SPI 为主机, SS 配置为输入,且被拉低, SPIF 也将置位。进入中断服 务程序后SPIF自动清零。或者可以通过先读SPSR,紧接着 访问SPDR来对SPIF清零。 • Bit 6 – WCOL: 写碰撞标志 在发送当中对SPI 数据寄存器SPDR写数据将置位WCOL。 WCOL可以通过先读SPSR,紧接着访问SPDR 来清零。
/* 启动数据传输 */ SPDR = data;
/* 等待传输结束 */ while(!(SPSR & (1<<SPIF))); }
(2)设置SPI为从机并进行简单的数据接收。
void spi_slaveset(void)
{ /* 设置MISO 为输出,其他为输入 */
DDRB = (1<<DDB6); /* 使能 SPI */
SPI接口的设置可分为主机和从机两种模式。当SPI 接口使能时,MOSI、MISO、SCK和SS引脚的控制和数据 方向如下表
引脚 MOSI MISO SCK
SS
方向(主SPI) 用户定义 输入 用户定义 用户定义
方向(从SPI) 输入
用户定义 输入 输入
2)SPI初始化及数据传送程序示例
下面将以ATmega16单片机为例说明如何将SPI设置为 主机,以及如何进行简单的数据传送。MOSI对应 ATmega16单片机PB5引脚,MISO对应ATmega16单片 机PB6引脚,SCK对应ATmega16单片机PB7管脚,SS对 应ATmega16单片机PB4管脚。
SPCR = (1<<SPE); } char spi_slavereceive(void)
{ /* 等待接收结束 */
while(!(SPSR & (1<<SPIF))); /* 返回数据 */
return SPDR; }
3)SS引脚的功能
·从机方式
当SPI 配置为从机时,从机选择引脚SS总是为输
二、ATmega16单片机SPI接控制与数 据传输过程
1)控制与传输过程
如下图所示为SPI数据传输系统的结构方框图。SPI的数 据传输系统由主机和从机两个部分构成,主要由主、从机 双方的两个移位寄存器和主机SPI时钟发生器组成,主机 为Sபைடு நூலகம்I数据传输的控制方。由SPI的主机将SS输出线拉低, 作为同步数据传输的初始化信号,通知从机进入传输状态。 然后主机启动时钟发生器,产生同步时钟信号SCK;预先 将在两个移位寄存器中的数据在SCK的驱动下进行循环移 位操作,实现了主-从之间的数据交换。主机的数据由 MOSI(主机输出-从机输入)进入从机,而同时从机的 数据MISO(主机输入-从机输出)进入主机。数据传送 完成,主机将SS线拉高,表示传输结束。
• Bit 4 – MSTR: 主/ 从选择
MSTR置位时选择主机模式,否则为从机。如果MSTR为"1”, SS配置为输入,但被拉低,则MSTR 被清零,寄存器SPSR 的SPIF 置位。用户必须重新设置MSTR 进入主机模式。
• Bit 3 – CPOL: 时钟极性
CPOL 置位表示空闲时SCK 为高电平;否则空闲时SCK 为低 电平。
【项目知识点与技能点】
➢SPI总线的通信协议 ➢ATmega16单片机SPI接控制与数据传输过程 ➢ATmega16 SPI接口相关寄存器的设置 ➢D/A转换芯片TLC5615的相关内容
【项目功能】
一、SPI总线通信协议概述
SPI(Serial Peripheral Interface--串行外设接口)总线系统 是一种同步外设接口,允许MCU与各种外围设备以串行方式 进行通信和数据交换。外围设备包括FLASHRAM、A/ D 转换 器、网络控制器、MCU 等. 一般使用4 线制:串行时钟线 (SCK) 、主机输入/ 从机输出数据线MISO、主机输出/ 从机输 入数据线MOSI 和低电平有效的从机选择线SS 。
(1)设置SPI为主机并进行简单的数据发送:
void spi_masterset(void) {
/* 设置MOSI 和SCK 为输出,其他为输入 */ DDRB = (1<<DDB5)|(1<<DDB7);
/* 使能SPI 主机模式,设置时钟速率为fck/16 */ SPCR = (1<<SPE)|(1<<MSTR)|(1<<SPR0); } void spi_mastertransmit(char data) {
三、ATmega16 SPI接口相关的寄存器简单介绍
1)SPI控制寄存器-SPCR
• Bit 7 – SPIE: 使能SPI 中断 置位后,只要SPSR 寄存器的SPIF 和SREG 寄存器的全 局中断使能位置位,就会引发SPI中断。 • Bit 6 – SPE: 使能SPI SPE 置位将使能SPI。进行任何SPI 操作之前必须置位 SPE。 • Bit 5 – DORD: 数据次序 DORD 置位时数据的LSB 首先发送;否则数据的MSB 首先发送。
项目四 基于SPI串行总线接口 DA芯片TLC5615的使用
电气自动化技术专业
• 项目功能 • 项目知识点与技能点 • 项目知识准备 • 硬件电路 • 软件设计 • 项目实施
【项目功能】
➢ 通过ATMEGA16单片机同步串行接口向 D/A转换芯片TLC5615送入相关数字量, 通过D/A转换所得到的电压控制LED亮灭。
• Bit 2 – CPHA: 时钟相位
CPHA 决定数据是在SCK 的起始沿采样还是在SCK 的结束沿 采样。
• Bits 1, 0 – SPR1, SPR0: SPI 时钟速率选择1 与0
确定主机的SCK 速率。SPR1 和SPR0 对从机模式没有影响。 SCK和振荡器频率fOSC之间的关系下表所示。
入。SS 为低将激活SPI 接口, MISO成为输出
( 用户必须进行相应的端口配置) 引脚,其他引脚 成为输入引脚。
·主机方式
当SPI被配置为主机时(寄存器SPCR的MSTR位 置“1”),用户可以决定SS引脚方向。如果SS引 脚被设为输出,该引脚将作为通用输出口,不影响 SPI系统,通常用于驱动从机的SS引脚。
SPI2X 00 00 01 01 10 10 11 11
SPR1 0 1 0 1 0 1 0 1
SPR0
SCK频率(MHz)
fOSC/4
fOSC/16
fOSC/64
fOSC/128
fOSC/2
fOSC/8
fOSC/32
fOSC/64
2)SPI的状态寄存器-SPSR
• Bit 7 – SPIF: SPI 中断标志 串行发送结束后,SPIF 置位。若此时寄存器SPCR 的SPIE 和全局中断使能位置位,SPI中断即产生。如果SPI 为主机, SS 配置为输入,且被拉低, SPIF 也将置位。进入中断服 务程序后SPIF自动清零。或者可以通过先读SPSR,紧接着 访问SPDR来对SPIF清零。 • Bit 6 – WCOL: 写碰撞标志 在发送当中对SPI 数据寄存器SPDR写数据将置位WCOL。 WCOL可以通过先读SPSR,紧接着访问SPDR 来清零。
/* 启动数据传输 */ SPDR = data;
/* 等待传输结束 */ while(!(SPSR & (1<<SPIF))); }
(2)设置SPI为从机并进行简单的数据接收。
void spi_slaveset(void)
{ /* 设置MISO 为输出,其他为输入 */
DDRB = (1<<DDB6); /* 使能 SPI */
SPI接口的设置可分为主机和从机两种模式。当SPI 接口使能时,MOSI、MISO、SCK和SS引脚的控制和数据 方向如下表
引脚 MOSI MISO SCK
SS
方向(主SPI) 用户定义 输入 用户定义 用户定义
方向(从SPI) 输入
用户定义 输入 输入
2)SPI初始化及数据传送程序示例
下面将以ATmega16单片机为例说明如何将SPI设置为 主机,以及如何进行简单的数据传送。MOSI对应 ATmega16单片机PB5引脚,MISO对应ATmega16单片 机PB6引脚,SCK对应ATmega16单片机PB7管脚,SS对 应ATmega16单片机PB4管脚。
SPCR = (1<<SPE); } char spi_slavereceive(void)
{ /* 等待接收结束 */
while(!(SPSR & (1<<SPIF))); /* 返回数据 */
return SPDR; }
3)SS引脚的功能
·从机方式
当SPI 配置为从机时,从机选择引脚SS总是为输
二、ATmega16单片机SPI接控制与数 据传输过程
1)控制与传输过程
如下图所示为SPI数据传输系统的结构方框图。SPI的数 据传输系统由主机和从机两个部分构成,主要由主、从机 双方的两个移位寄存器和主机SPI时钟发生器组成,主机 为Sபைடு நூலகம்I数据传输的控制方。由SPI的主机将SS输出线拉低, 作为同步数据传输的初始化信号,通知从机进入传输状态。 然后主机启动时钟发生器,产生同步时钟信号SCK;预先 将在两个移位寄存器中的数据在SCK的驱动下进行循环移 位操作,实现了主-从之间的数据交换。主机的数据由 MOSI(主机输出-从机输入)进入从机,而同时从机的 数据MISO(主机输入-从机输出)进入主机。数据传送 完成,主机将SS线拉高,表示传输结束。
• Bit 4 – MSTR: 主/ 从选择
MSTR置位时选择主机模式,否则为从机。如果MSTR为"1”, SS配置为输入,但被拉低,则MSTR 被清零,寄存器SPSR 的SPIF 置位。用户必须重新设置MSTR 进入主机模式。
• Bit 3 – CPOL: 时钟极性
CPOL 置位表示空闲时SCK 为高电平;否则空闲时SCK 为低 电平。