cc2500 发送死机问题

[复制链接]
 楼主| flywith 发表于 2011-8-18 21:48 | 显示全部楼层 |阅读模式
cc2500(叫a)大部分时间接受来自单片机的数据,发送给另一块cc2500,叫b。30s 的时间,cc2500(叫a)发送命令给b,然后接受数据。接受不到就退出。  但是当cc2500 叫做a的,发送了一段时间就死机,
void halRfSendPacket(INT8U *txBuffer, INT8U size)
{
    halSpiWriteReg(CCxxx0_TXFIFO, size);                     //100
    halSpiWriteBurstReg(CCxxx0_TXFIFO, txBuffer, size); //写入要发送的数据   //400
    halSpiStrobe(CCxxx0_STX); //进入发送模式发送数据             //10
    // Wait for GDO0 to be set -> sync transmitted
    while (!(P2IN&0x02));
  
    // Wait for GDO0 to be cleared -> end of packet
    while ((P2IN&0x02));
halSpiStrobe(CCxxx0_SFTX);
死在while里面,一直不动了,这个时间不确定的,有时长一个小时,有时间
10分钟的。 这个是什么情况
 楼主| flywith 发表于 2011-8-18 21:49 | 显示全部楼层
还有我一直发送数据的话很正常,不会死在while里面的
 楼主| flywith 发表于 2011-8-18 21:50 | 显示全部楼层
更加离谱的是叫做b机器的,一直没有问题,那个cc2500也是在收发之间切换的啊,只是一个是连续的收,30m发一次吧,呵呵
 楼主| flywith 发表于 2011-8-18 21:51 | 显示全部楼层
哎。有没有人遇到过啊,
chunyang 发表于 2011-8-18 22:17 | 显示全部楼层
楼主可以将CC2500做交叉替换,即ab互换,如果问题依旧说明是你程序的问题,否则是CC2500及外电路的问题。
草履虫 发表于 2011-8-18 23:35 | 显示全部楼层
其实这个问题很好查.
如果怀疑下面的代码死掉了.那么根据P2IN的变化最长的时间设置一个计数器,如果超过了变化时间,那么程序就退出.同时做超时变量, 这样的话,就能够查到是不是真的是死在这两个地方了.
// Wait for GDO0 to be set -> sync transmitted
    while (!(P2IN&0x02));
  
    // Wait for GDO0 to be cleared -> end of packet
    while ((P2IN&0x02));
xaq79 发表于 2011-9-20 17:32 | 显示全部楼层
RX,TX要定期使能,FIFO满了RX就不行了,要CLEAR  FIFO
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

26

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部