完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
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一样不能闪烁。 求前辈指教一下。谢谢! |
|
相关推荐
2个回答
|
|
唤醒LPM3的IO中断函数:
#pragma vector = PORT1_VECTOR __interrupt void GDO_ISR(void) { P1IFG &= (~BIT0) & (~BIT5);//ON,CSN if(P1IFG&RFSPI_GDO0) { // __disable_interrupt();//禁止定时器运行 P1IFG &= ~RFSPI_GDO0; DLOCK = 1; } else; __bic_SR_register_on_exit(LPM3_bits); // Exit LPM0-3 __no_operation(); // Required for debugger } |
|
|
|
设置断点 看看能不能进中断唤醒啊。 你也可以下载进去后,复位然后看现象是否正确。
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-2-25 01:34 , Processed in 0.370756 second(s), Total 40, Slave 35 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191