- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
SPI数码管
第四章??? SPI接口
?????? 上面这幅图就是主机和从机的接口连接图。
?????? 上面这幅图就是关于SPI接口的主从机得管脚连接图。左边是主机的接口,右边是从机的接口。
void SPI_MasterInit(void)//这个就是主机SPI接口的初始化的函数了
{
/* Set MOSI and SCK output, all others input */
DDR_SPI = (1DD_MOSI)|(1DD_SCK);
/* Enable SPI, Master, set clock rate fck/16 */
SPCR = (1SPE)|(1MSTR)|(1SPR0);
}
void SPI_MasterTransmit(char cData)//主机发送字节函数
{
/* Start transmission */
SPDR = cData;
/* Wait for transmission complete */
while(!(SPSR (1SPIF)));
}
?????? 上面的图是官方手册上的例子程序,说到底还是人家造芯片的都给出了使用方法了,还是按照他的手册上程序来看懂吧。
?????? 上面这个图是SPI控制寄存器的位图。下面我就分析下这个SPI控制寄存器里面每一位的功能吧.当然我还是结合数据手册里面的说明来写的。
SPI中断允许位,可读可写,在寄存器SPSR中SPIF位置1以及SREG寄存器中的总中断允许位开启的情况下SPIE位可以触发SPI中断执行。那么再看看SPSR寄存器吧。
上面这个就是SPSR状态寄存器的内部图了,然后看看SPIF这位的说明吧.
上图就是SPIF位的说明了。当串行数据发送完毕时标志位SPIF会被置位,在状态寄存器中的SPIF位被置位并且总中断允许一个中断就会产生。还有一种情况就是当SS管脚被设置为输入状态并且被置低以及在SPI处于主机模式下也可以将标志位SPIF置高。当执行相应的中断处理后标志位SPIF会被硬件清零,另外,当标志位SPIF置高后并且状态寄存器被第一次读的情况下也会被清零。然后才可以访问SPDR数据寄存器。
第六位WCOL写冲突标志位,这位会被置高当数据寄存器SPDR在数据传送的过程中被写时。在WCOL位被置高时并且当SPI状态寄存器被第一次读时,WCOL和SPIF会被清零。然后才访问SPI的数据寄存器。就是当被写的时候这个WCOL置高表示正在写的过程还不能读SPDR,当WCOL清零后才可以对SPDR读取数据。
上图中表示BIT5..1是保留位,当被读的时候会被读取为0。
然后最后这个位就是确定传输速率SCK Frequence时钟频率的了。先看看一个配置表格吧。
这个表格是反应SCK和晶振频率的关系。从最上面的位说明得出如果SPI2X置高的话那么SPI的速度也就是SCK Frequence会翻倍并且要再SPI处于主机模式下才行。也就是说SCK Frequence最小的周期会是CPU时钟周期的2倍。当此时SPI被确定为从机模式时则只能确保是在或者比更低。
接下来再看看数据寄存器吧。
还有一个就是SS
(1)??? 从机模式(SLAVE MODE)
当SPI配置为从机模式时,这个SS脚一般都是输入状态,SS为低将激活SPI口MISO成为输出(用户必须对相应端口进行配置)当SS为高时,所有引脚成为输入,SPI逻辑复位,不再接收数据。
(2)??? 主机模式
当SPI配置为主机模式时,用户可以决定SS引脚的方向,当SS配置为输出时不影响SPI系统的传输。典型应用是用来驱动从机的SS引脚。
?
如果配置为输入,必须保持为高以保证SPI的正常工作,若系统配置为主机,SS为输入,但被外设拉低,则SPI系统会将此低电平解释为一个外部主机将自己选择为从机。为了防止总线冲突,SPI系统将实现如下动作:
1、SPCR的MSTR位,使SPI成为从机,从而MOSI和SCK变为输入。
2、SPSRSPIF置位,若SPI的中断和全局中断开放,则中断服务程序将得到执行。
因此说来,使用中断方式处理SPI主机的数据传输,并且存在SS被拉低的可能性时,中断服务函数应该检查MSTR是否为1.若被清零用户必将其置位,以便重新配置为主机模式。
下面看看时序图吧
上图是主机模式的时序图。下图为从机模式的时序图。
下面介绍下数据传输格式
上图主要是设置采样是在上升沿还是下降沿,还有就是一开始的SCK的极性。
接下来就是分析原来的例子程序了,呵呵,我比较懒点很少自己写^_^
先看看电路图吧:
首先看看主程序:
#include iom16v.h
#include macros.h
#include delay.h
#include spi.h
?
/*数码管0,1,2,3,4,5,6,7,8,
文档评论(0)