最近在使用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未取消置位。
这是什么原因,有谁知道吗?
|