打印

求助:67j60 快速操作SPI外设(主模式)导致故障。。。

[复制链接]
1322|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
Ryanhsiung|  楼主 | 2012-12-27 16:54 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 Ryanhsiung 于 2012-12-27 16:57 编辑

第一次玩SPI主模式,若连续发送多个byte(10或者40个):
        PIR1bits.SSP1IF =0;
        SSP1BUF = 0xBB;                        
        while(0 == PIR1bits.SSP1IF);        
最后在执行一几句后(这个不定),PIR1bits.SSP1IF 不会再为1。
条件: 0010 = SPI 主模式,时钟 = FOSC/64  使用,64分频,CLK空闲极性为高。

BF位正常、SSP1BUF正常。


测试:
   1、若设置时钟 = FOSC/16   或者/4 则可正常运行。
   2、手动将IF置位后,跳到下一步后,下两个byte后又会出现问题。
   3、若改支SSP1BUF值后,IF可正常,下一个byte后以出现问题。
    4、若发送间隔改为20us后,则也可正常运行
沙发
Ryanhsiung|  楼主 | 2012-12-27 16:56 | 只看该作者
从机玩的比较多,出没出现过问题。
主机先前都是IO模拟 一直都没有出现问题,这次为了提升时间改为主模式。

使用特权

评论回复
板凳
yewuyi| | 2012-12-28 16:32 | 只看该作者
SPI和IIC重点就是时序和应答,自己拿逻辑分析仪一看就明白。

使用特权

评论回复
地板
Ryanhsiung|  楼主 | 2012-12-28 17:06 | 只看该作者
可以了,程序BUG,又应了那句话,越稀奇古怪的问题越的低级!
  在死的前两句的地方,没有清IF,导致前一句总线出错,最后导致死在当前句


   1、若设置时钟 = FOSC/16   或者/4 则可正常运行。
     这个应该是因为,SPI时序太快,所以不出问题
   2、手动将IF置位后,跳到下一步后,下两个byte后又会出现问题。
   3、若改支SSP1BUF值后,IF可正常,下一个byte后以出现问题。
      这两个就不明白了。
    4、若发送间隔改为20us后,则也可正常运行,
      这个是用另一个函数测试,中都有清除IF,故可以正常运行

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

认证:嵌入式技术专家
简介:道阻且长,行则将至!

64

主题

4654

帖子

14

粉丝