在此应用中、芯片通常处于 LPM 4.5模式、并在 P1.1变为高电平时唤醒、运行程序、然后重新进入 LPM 4.5模式、除非 P1.1保持高电平。
我希望芯片在 P1.1变为高电平或处于高电平时唤醒。
我看到一种情况、即 P1.1在设置为 LPM 模式期间变为高电平、这会导致芯片进入 LPM 模式而不会唤醒、尽管 P1.1为高电平。 可能会发生这种情况的时钟周期可能会持续几十个。 是否有任何方法可以避免这种情况?
输入 LPM 4.5的代码如下所示(简化):
//禁用中断 _BIC_SR_register (GIE); //将 P1.1设置为上升沿中断输入、无拉电流 P1SEL0 &=~BIT1; P1SEL1 &=~BIT1; P1REN &=~BIT1; P1DIR &=~BIT1; P1IES &=~BIT1; P1IE |= BIT1; P1IFG &=~BIT1; //如果 P1.1为高电平或已经被触发,则防止进入睡眠状态 IF (P1IN 和 BIT1 || P1IFG 和 BIT){ //触发 PUC WDTCTL = 0; while (1); } //如果 P1.1在这里变为高电平、芯片保持在 LPM4.5中并且不会被唤醒!! //进入 LPM4.5 PMMCTL0_H = PMMPW_H; //打开 PMM 寄存器进行写入 PMMCTL0_L |= PMMREGOFF; //并设置 PMMREGOFF PMMCTL0_H = 0; //锁定 PMM 寄存器 _bis_SR_register (LPM4_BITS);