在NuMicro的芯片里,如果从省电模式唤醒,以计时器而言,必须要设定中断及唤醒功能,也就是设定以下两个函数。
TIMER_EnableInt(TIMER0);
TIMER_EnableWakeup(TIMER0);
在一般的程序流程,一旦唤醒後,系统就会进入到计时器中断副程序。但我的应用需要先在主程序储存一部分参数,再进中断。
为了避免唤醒後,马上进入中断副程序,这时候就可以使用到__disable_irq()。它不会影响芯片唤醒流程,但又可以决定中断启动的时间点。
以下主程序,系统唤醒之後,会先打印"*** Wake Up and Enable IRQ ***\n",在__enable_irq()之後,才会进入中断副程序。
printf("*** Enter Sleep ***\n");
UART_WAIT_TX_EMPTY(UART0);
__disable_irq();
SYS_UnlockReg();
CLK_PowerDown();
printf("*** Wake Up and Enable IRQ ***\n");
__enable_irq();
|