CC1101接收过程中的问题

2019-07-25 15:31发布

最近在使用MSP430+CC1101,将IOCFG0设置为0x06(SYNC),IOCFG2设置为0x07(RXCRCOK).
之前一直使用GDO2中断进行数据接收,一切正常。
现在需要改为使用SYNC中断进行数据接收,方法是:完全关闭GDO2中断。在数据发送前关闭GDO0中断,发送完成后清除GDO0标志位并打开GDO2中断。在GDO0中断发生后,等待GDO0变为低电平,然后再读取RXFIFO中的数据。
现在有一个问题:GDO0永远不会自动变为低电平,除非开始读取RXFIFO中的数据。
代码如下:
#pragma vector=PORT1_VECTOR
__interrupt void Port_1(void)
{
                P1IFG=0;
                INT8U Length=0;
                while (GDO0)
                {

                }
                if ((halSpiReadStatus(CCxxx0_RXBYTES) & BYTES_IN_RXFIFO)) //如果接的字节数不为0
                {
                        Length = halSpiReadReg(CCxxx0_RXFIFO);
                        halSpiReadReg(CCxxx0_RXFIFO);
                        halSpiReadBurstReg(CCxxx0_RXFIFO, RxBuffer, Length-1);
                        halSpiReadBurstReg(CCxxx0_RXFIFO, status, 2);
                        halSpiStrobe(CCxxx0_SFRX);
                        if(status[1] & CRC_OK)
                        {
                                RFPackage.RFCommand=(enum RFCommandTypeEnum)RxBuffer[0];
                                __bic_SR_register_on_exit(LPM3_bits);
                        }
                }
                else
                {
                        halSpiStrobe(CCxxx0_SFRX);       
                }
}

每次接收数据时,均会卡在while(GDO0)。卡住时进行watch,发现GDO0、GDO2均为1,即此时已经完整接收一帧了,但是GDO0未取消置位。
这是什么原因,有谁知道吗?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
8条回答
dirtwillfly
1楼-- · 2019-07-25 17:50
这段程序是msp430的程序?
CC1101你用的是现成的模块?什么型号?
Unshining
2楼-- · 2019-07-25 18:15
dirtwillfly 发表于 2015-1-5 08:43
这段程序是msp430的程序?
CC1101你用的是现成的模块?什么型号?

是430的程序。
CC1101使用现成的模块。具体型号不知道,很久以前实体店买的。模块引出了10根插针,2个VCC,2个GND,SPI三根线,外加CSN,GDO0与GDO2.
Unshining
3楼-- · 2019-07-25 21:02
dirtwillfly 发表于 2015-1-5 08:43
这段程序是msp430的程序?
CC1101你用的是现成的模块?什么型号?

使用MSP430F6726.程序中忘了声明status[2]了。
qljqlj
4楼-- · 2019-07-26 01:58
我就是设置在gdo0,接收中断,没问题,很正常的
Unshining
5楼-- · 2019-07-26 07:09
 精彩回答 2  元偷偷看……
qljqlj
6楼-- · 2019-07-26 07:27
和你的一样,就是gdo0 设置为0x06,其他没啥区别了吧

一周热门 更多>