用官方的power_change例程,想试试深度睡眠模式。在前面几个AM_LDO,AM_DCDC都挺好的,没什么问题。但是从LPM0开始就有点问题了,主程序是进了gotoLPM0()(因为我暂停的时候,是停在CPU_wfi()这个函数里的),但是寄存器PCMCTL0里始终是AM_DCDC,LDO,LF在循环,没有出现LPM_DCDC,LDO,LF的情况,如图1。
后来切入LPM3的时候,PCM寄存器的值还是AM的,没有变,我又去看时钟寄存器里的值,如图2。这个时候,程序应该进LPM3了,但是这个MCLK的时钟,还是选的3M的DCO,分频也是1。这就不太懂了,LPM3时MCLK不应该最大32k吗,我现在到底是进了LPM3还是没进呢。 还是说我已经进了LPM3,但是调试的时候相当于打断点,一暂停,系统自动从LPM3进入AM模式?
我又仔细看了下,在进PCM_gotoLPM0()之前,包括在PCM_gotoLPM0()这个函数里,好像没有地方改变PCM->CTL0寄存器中第12个位置的值的情况。当这个第12个位置的值为1的时候,标志着进LPM0,一直没有改就一直是0,所以一直是AM的情况。如图3. 这是什么鬼,没有改寄存器的值,是不是相当于一直没进睡眠模式啊?只是调用gotoLPM0中的CPU_wfi忽悠我,让我以为进了LPM0?
|