SPI数码管.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 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)

almm118 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档