TI中文支持网
TI专业的中文技术问题搜集分享网站

MSP432 power_change 例程,在LPM3模式下,寄存器没有变

用官方的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模式?

不知道有没有人之前看过这个问题,谢谢~

yunhao cui:

我又仔细看了下,在进PCM_gotoLPM0()之前,包括在PCM_gotoLPM0()这个函数里,好像没有地方改变PCM->CTL0寄存器中第12个位置的值的情况。当这个第12个位置的值为1的时候,标志着进LPM0,一直没有改就一直是0,所以一直是AM的情况。

这是什么鬼,没有改寄存器的值,是不是相当于一直没进睡眠模式啊?只是调用gotoLPM0中的CPU_wfi忽悠我,让我以为进了LPM0?

yunhao cui:

又查了下手册,发现一点东西。

这个图是前面7.9节的,发帖那个地方是7.24寄存器那节的。这两节有点不一样,在7.24那节里面写的10h,11h,14h,15h,18h,19h首位的1对应LPM0,但是7.9节这个地方写的LPMR是×,应该意思就是这一位不用管,有点矛盾。如果按照这一位不管的逻辑,那就能解释为什么那个地方一直是0了。

在LPM0的情况下,和AM对应的几个标志位寄存器的值都没有变,SCR里面的值也没变;LPM3的情况下,SCR里DEEPSLEEP被置1了。那就有点问题了,这个AM和LPM对应的两个模式好像什么都一样,只是LPM多了一个CPU_wfi。我看手册说LPM和AM的差别在于LPM关掉了CPU,那就是靠这一个CPU_wfi实现的吗。

还有个问题就是如何看当前时刻MCLK的时钟频率以及运行的模式,如果说AM和对应的LPM寄存器都一样,那我怎么判断现在时刻是在AM_LDO_VCORE0还是LPM_LDO_VCORE0呢,CS时钟MCLK那个寄存器也一直是DCO的,没变过。

谢谢

yunhao cui:

一路自问自答。。。

找到原因了,图1是手册上的。哎,握草,进入睡眠模式之前,需要我手动把MCLK的时钟调到符合要求的值以下,难怪之前睡眠模式的时候,MCLK的时钟一直是DCO的,总算是解决了。。

灰小子:

回复 yunhao cui:

如果进入低功耗模式的时候,有些模块正在使用MCLK时钟,就不能正常进入低功耗状态

赞(0)
未经允许不得转载:TI中文支持网 » MSP432 power_change 例程,在LPM3模式下,寄存器没有变
分享到: 更多 (0)