This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

MSP430F5438A: 关于SMCLK的疑问

Part Number: MSP430F5438A

如这段描述,LPM0 through LPM4是通过设置SR寄存器中的CPUOFF, OSCOFF, SCG0, and SCG1位实现不同的低功耗模式的

从这张图看,LPM模式应该不会影响SMCLK的吧?如果XT2在电路上配置了一个高频晶体,并且将SMCLK的源设置为XT2

LPM3会影响SMCLK吗?进入LPM3,会将SMCLKOFF进行相应的设置从而关闭SMCLK吗

我用CCS进行调试,使用5438A头文件中定义的LPM3使单片机进入低功耗模式,但是我在这条语句的定义中并没有看到操作SMCLKOFF,但是Table1-2的描述中LPM3

下SMCLK是disable的,这是怎么实现的呢

  • 你好,我将在咨询资深工程师后回复您。

  • 您好 请问有答复了吗

    我的电路中 XT2配置了16MHz的晶体

    我要用Timer的捕获功能采集外部引脚输入的PWM波周期

    主时钟和子时钟都选择为源是XT2

    不管main函数配置完成后是进入LPM3还是LPM4

    从调试结果看都能正常采集到PWM波的周期

    我在想

    第一Timer的运行 应该是脱离CPU吧

    第二从Table1-2看 LPM3下SMCLK是disable的 LPM下 所有的CPU是关闭的 但是我在两个模式下能采集周期 是不是因为这两个模式下

    XT2没有disable 如果SMCLK的源是XT2  那么SMCLK也就没有停止 timer还是在这个时钟下工作着

  • 你好,器件会关闭SMCLK在LPM3模式下,但是如果外设请求SMCLK,SCMCLk会保持使能。在users guide中"5.2.11 Operation From Low-Power Modes, Requested byPeripheral Modules" 有描述。下面是一张截图,关于如何关闭SMCLK,以我的理解,拿下图中圈起的部分举例,LPM1切换到LPM2,SMCLK会从Active改变到Disabled,即使SMCLKOFF和SMCLKREQEN都没有改变,此时应该是有另一个内部的信号将SMCLK关闭。

  • 默认情况下,ACLKREQEN, MCLKREQEN, or SMCLKREQEN都是1,即各时钟请求使能位都是1

    按照USC理解,以MCLK为例

    MCLKREQEN为1,相当于是“与门”的开门信号,及MCLKREQ的请求会通过“与门”传递到MCLK Enable Logic

    问题1.蓝色部分的描述,不太理解,为什么是所有模块的请求使能全部disable后(until all modules requesting the clock are disabled.)系统才能进入低功耗模式呢,在这之前都会被阻止(prevents entry into a lowpower mode)

    这里的意思,是不是指MCLKREQEN为1,如果没有MCLKREQ,也就是没有外设请求MCLK,系统会进入到低功耗模式;

    问题2. 这个与门与CPUOFF之间是什么关系呢?是怎么决定nEN的呢?

    代码中是这样定义的,那这两者与nEN的关系 是不是可以这样理解呢

    请求使能    请求    与门输出    CPUOFF      nEN(0使能时钟,1关闭时钟)

          1             1            1                 1                0                        --> 有请求时开启时钟

          1             0            0                 1                1                        --> 没有请求时关闭时钟

          1             x            x                  0               1                         --> CPUOFF为0,为激活模式

  • 如您所说,

    “即使SMCLKOFF和SMCLKREQEN都没有改变,此时应该是有另一个内部的信号将SMCLK关闭。”

    我不太理解为什么我的代码能够正确采集PWM波周期值了

    外部输入3.67KHz的PWM波

    利用P1.2捕获,计算脉冲周期

    主函数

    时钟设置

    timer设置

    中断处理

    我试过,LPM3及LPM4都能正常采集到脉冲周期,我是在CCS里实时观测的

    采集数值为136或137

    因为我是16M的SMCLK,做了Timer时钟源做了32分频,及500KHz(0.000002S),0.000002S x 136 = 0.000272S,即3.67KHz

    如果是LPM3或者LPM4导致SMCLK在仅有外设使能的时候才被激活,那应该是采集不到正确的周期值吧

    我设置捕获中断为下降沿

    第一个下降沿到来 SMCLK被激活 捕获到一个timer数值

    中断执行过程中,timer会计数,由于我的MCLK设置的是16MHz,所以这个计算过程应该不长,由于timer是2us(16MHz做32分频)的时钟周期计数,所以即便是timer增加一些数值,也不会太多,中断退出后,进入低功耗模式,SMCLK关闭,timer停止计数

    在这之后,经过272uS(PWM频率3.67KHz)后,第二个下降沿到来,SMCLK再次被激活,

    按照这样分析,此时捕获到的timer计数值应该和第一次捕获到timer计数器值相差很小,二者的差值应该不能对应PWM周期

    不知道我上面的分析对不对,问题到底是出在哪里呢?

  • 这里的意思,是不是指MCLKREQEN为1,如果没有MCLKREQ,也就是没有外设请求MCLK,系统会进入到低功耗模式;

    是的。

    那这两者与nEN的关系 是不是可以这样理解呢

    我没有找到相关描述,但是从你的分析来看应该是可以这么理解。

  • 不知道我上面的分析对不对,问题到底是出在哪里呢?

    是因为timer并没有停止计数,timer本身也是一个外设,你设置了SMCLK作为其时钟源那么它本身会请求SMCLK,默认情况下SMCLKREQEN为1,所以退出中断后,SMCLK是Active,timer会持续计数。你可以尝试将SMCLKREQEN置0,看是否能正常采集PWM周期。

  • 您好 再次感谢帮助

    您的这句话提示了我 

    你设置了SMCLK作为其时钟源那么它本身会请求SMCLK

    之前我一直想错了 混淆了外设请求 和 中断请求这两个概念

    先是看到任何中断都可以将CPU唤醒 就错误的联想想成了PWM下降沿中断激活SMCLK

    看文档也不仔细 其实我的这些疑问 以下章节都有解释

  • 不客气,很高兴您的问题解决了。