单片机
if(DLOCK == 1)//在WOR周期内,收到数据包或者超时时间到,都将退出WOR,开始下一循环
{
if(RFReceive(rXFIFO) == 0)
{
//__disable_interrupt();
P1OUT &= ~BIT6;//点亮LED
P1OUT &= ~P62730_ON;//通过ON信号点亮LED
P1IFG &= ~P62730_ON;
TA0CTL &= ~MC_1;//停止定时器0
delay_2us(60000);//delay_2us(50000);delay_2us(50000);
delay_2us(60000);delay_2us(60000);
P1OUT |= LED;//熄灭LED
P1OUT |= P62730_ON;
//delay_2us(60000);
T0_R = 0;
TA0R = 1;
END_CY = 0;//进入下一循环
DLOCK = 0;
T1_R = 10;
//__enable_interrupt();
}
else
{
END_CY = 1;
DLOCK = 0;
}
}
if(END_CY == 0)
{
qq=TI_CC_SPIReadStatus(CCxxx0_MARCSTATE);
// __bis_SR_register(LPM3_bits + GIE); // Enter LPM3 until VBUS-on event
_NOP();
}
if(T0_R)
{
halSpiStrobe(CCxxx0_SIDLE);
TA0CTL &= ~MC_1;//停止定时器0
END_CY = 0;
}
//END_CY = 0;
if(USBPre == 1)
{
END_CY=1;
break;
}
P1IFG &= ~RFSPI_GDO0;
P1IE |= RFSPI_GDO0;//开启GDO0中断
initWorMode();
__bis_SR_register(LPM3_bits + GIE);_NOP();
}
以上代码放在一个无穷循环中。程序的本意是在LPM3模式下被GDO0中断触发,然后转到RFReceive接收函数,接收正确则闪烁LED一次。仿真调试的时候发现,如果一进仿真直接全速运行,则LED一次都不闪烁,也就是根本就不能唤醒CPU;
暂停CPU,PC指向最后一条进入睡眠的语句,然后单步运行,则CPU可以被正常唤醒,然后正常接收,LED闪烁。如果再全速运行,则CPU不能被中断。
我以为是发送机发数据太快了,在发送端加了延时,没用。
如果直接给接收端加电源,不进行仿真,LED一样不能闪烁。
求前辈指教一下。谢谢!