- 1、本文档共36页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
§4.2 AVR单片机的SPI接口
一、SPI接口:串行外设接口SPI 允许ATmega16 和外设或其他AVR 器件进行高速的同步数据传输。
1、ATmega16 SPI 的特点如下:
全双工,3 线同步数据传输,SS#,SCK,MISO,MOSI;
主机或从机操作
LSB 首先发送或MSB 首先发送
7 种可编程的比特率
传输结束中断标志
写碰撞标志检测
可以从闲置模式唤醒;2、SPI工作过程
主机和从机之间的SPI 连接如下图 所示。 系统包括两个移位寄存器和一个主机时钟发生器。通过将需要的从机的 SS# 引脚拉低,主机启动一次通讯过程。主机和从机将需要发送的数据放入相应的移位寄存器。主机在SCK 引脚上产生时钟脉冲以交换数据。主机的数据从主机的MOSI 移出,从从机的MOSI 移入;从机的数据从从机的MISO 移出,从主机的MISO 移入。主机通过将从机的SS# 拉高实现与从机的同步。
配置为SPI 主机时, SPI 接口不自动控制 SS# 引脚,必须由用户软件来处理。 对 SPI 数据寄存器写入数据即启动SPI 时钟,将8 比特的数据移入从机。传输结束后SPI 时钟停止,传输结束标志SPIF 置位。如果此时SPCR 寄存器的SPI 中断使能位SPIE 置位,中断就会发生。主机可以继续往SPDR 写入数据以移位到从机中去,或者是将从机的SS# 拉高以说明数据包发送完成。最后进来的数据将一直保存于缓冲寄存器里。; 配置为从机时,只要SS#为高,SPI 接口将一直保持睡眠状态,并保持MISO 为三态。在这个状态下软件可以更新SPI 数据寄存器SPDR 的内容。即使此时SCK 引脚有输入时钟,SPDR 的数据也不会移出,直至SS 被拉低。一个字节完全移出之后,传输结束标志SPIF置位。如果此时SPCR寄存器的SPI中断使能位SPIE置位,就会产生中断请求。在读取移入的数据之前从机可以继续往SPDR 写入数据。最后进来的数据将一直保存于缓冲寄存器里。
; SPI 系统的发送方向只有一个缓冲器,而在接收方向有两个缓冲器。也就是说,在发送时一定要等到移位过程全部结束后才能对SPI 数据寄存器执行写操作。而在接收数据时,需要在下一个字符移位过程结束之前通过访问SPI 数据寄存器读取当前接收到的字符。否则第一个字节将丢失。
工作于SPI 从机模式时,控制逻辑对SCK 引脚的输入信号进行采样???为了保证对时钟信号的正确采样, SPI 时钟不能超过fosc/4。
SPI 使能后,MOSI、MISO、SCK 和SS#引脚的数据方向将按照下表 所示自动进行配置。;3、SPI 控制寄存器- SPCR
;CPOL: 时钟极性。CPOL=0, 起始沿:上升沿,结束沿:下降沿;CPOL=1, 起始沿:下升沿,结束沿:上降沿;
CPHA: 时钟相位。;4、SPI 状态寄存器- SPSR
;数据寄存器- SPDR(八位):读/写寄存器,用来在寄存器文件和SPI移位寄存器之间传输数据。写寄存器将启动数据传输,读寄存器将读取寄存器的接收缓冲器。
数据模式:相对于串行数据, SCK 的相位CPHA和极性CPOL有4 种组合。每一位数据的移出和移入发生于SCK不同的信号跳变沿,以保证有足够的时间使数据稳定。;SPI主机模式下的写、读数据程序:
.include m16def.inc
.org $00
rjmp main
.org $20
main: ldi r16,high(ramend)
out sph,r16
ldi r16,low(ramend)
out spl,r16
cli
sbi ddrb,4 ;ss#_pb4
sbi ddrb,5 ;mosi_pb5
sbi ddrb,7 ;sck_pb7
cbi ddrb,6 ;miso_pb6
cbi portb,4
sbi portb,6
ldi r16,0
out spsr,r16 ;SPI速度不倍增;ldi r16,0;0x51,or $51
out spcr,r16
ldi r16,0;
文档评论(0)