最高优先级和单片机唤醒的关系

2019-04-15 18:07发布

最佳在使用芯圣HC89S003F4时,在使用官方INT1掉电唤醒例程中,无论如何都无法完全唤醒MCU,经厂方查看程序,调试,很快找出原因,由于INT1不是最高优先级,所以唤醒没有成功,后来将INT1的优先级设为最高,就一切正常了。估计原因是:INT1不是最高优先级,唤醒启动后就被更高优先级的抢去了控制权,就是和和各种中断打架去了,最后谁也干不成活。
IP0 |= 0X30;       //INT1优先级设为最高,唤醒用的中断一定要设为最高优先级。否则有可能唤醒不成功

留做自勉。

补充一下,
上面的问题是因为在低级别中断里执行了掉电命令,由于级别不够,造成唤醒不成功,故要设置最高级中断。有时序的东西最好不要放到中断执行
如果是在main函数里进入掉电模式,就可以不用设置最高优先级,bit PD_flag;main(){
    while(PD_flag)    {            PCON |= 0x02; //进入掉电模式
            PD_flag=0;     
    }}
其他函数给 PD_flag赋值,T0_INT(){             if(.......)            {
                  PD_flag=1;
               }
}
经试验可行