设为首页收藏本站

Discuz! Board

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 活动 交友 discuz
查看: 5093|回复: 2
打印 上一主题 下一主题

SPI 通信异常!

[复制链接]

1

主题

3

帖子

20

积分

新手上路

Rank: 1

积分
20
跳转到指定楼层
楼主
林木 发表于 2014-7-1 21:11:01 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 林木 于 2014-7-1 21:21 编辑

我在用SPI 收发数据的时候,经常遇到无法产生 EVENT,导致程序死在 while, 过不去的情况,不知道有没有人知道是怎么回事呢,还望不吝赐教!SPI 引脚设置,和初始化都无异常,已使能.

uint8_t SPI1_SendByte(unsigned char cmd)
{
    uint8_t rev = 0;
    NRF_SPI1->TXD = (uint32_t)Data ;
    while (NRF_SPI1->EVENTS_READY == 0)
    {
        //do noting
    };
    NRF_SPI1->EVENTS_READY = 0U ;
    rev = (uint8_t) NRF_SPI1->RXD;
    return rev;
}





分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

4

主题

56

帖子

301

积分

版主

分享的世界

Rank: 7Rank: 7Rank: 7

积分
301
QQ
沙发
MrYan 发表于 2014-7-5 09:47:12 | 只看该作者
首先,如果你的程序仅仅是用于测试,或者学习,可以这样子写,如果是制作成产品,最好不要陷入无限循环,比如可以在循环里面加入一个时间判断.....至于为啥出现这个问题,既然有时候可以产生,有时候不可以,你看是不是电路问题,或许配置也有点问题,这个很难说...........
分享才可以产生世界.....
回复 支持 反对

使用道具 举报

1

主题

3

帖子

20

积分

新手上路

Rank: 1

积分
20
板凳
 楼主| 林木 发表于 2014-7-23 10:25:19 | 只看该作者
MrYan 发表于 2014-7-5 09:47
首先,如果你的程序仅仅是用于测试,或者学习,可以这样子写,如果是制作成产品,最好不要陷入无限循环,比 ...

嗯,谢谢你的指点,我会在循环条件里加个循环次数限制,一旦达到循环次数则返回 Timeout 错误信息。
现已查明原因,确实是电路的原因:SCK 引脚被拉高了。导致无法正常产生 clock 信号,于是 TXD 寄存器中的数据无法移位出去,也就无法产生 Event.
回复 支持 反对

使用道具 举报

Archiver|手机版|小黑屋|Comsenz Inc.   

GMT+8, 2024-5-2 13:04 , Processed in 0.116199 second(s), 29 queries .

Powered by Discuz! X3

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表