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未取消置位。
这是什么原因,有谁知道吗?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。