單片機
if(DLOCK == 1)//在WOR周期內(nèi),收到數(shù)據(jù)包或者超時時間到,都將退出WOR,開始下一循環(huán)
{
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;//進入下一循環(huán)
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();
}
以上代碼放在一個無窮循環(huán)中。程序的本意是在LPM3模式下被GDO0中斷觸發(fā),然后轉(zhuǎn)到RFReceive接收函數(shù),接收正確則閃爍LED一次。仿真調(diào)試的時候發(fā)現(xiàn),如果一進仿真直接全速運行,則LED一次都不閃爍,也就是根本就不能喚醒CPU;
暫停CPU,PC指向最后一條進入睡眠的語句,然后單步運行,則CPU可以被正常喚醒,然后正常接收,LED閃爍。如果再全速運行,則CPU不能被中斷。
我以為是發(fā)送機發(fā)數(shù)據(jù)太快了,在發(fā)送端加了延時,沒用。
如果直接給接收端加電源,不進行仿真,LED一樣不能閃爍。
求前輩指教一下。謝謝!