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

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的,这是怎么实现的呢

Ben Qin:

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

,

user78960159:

您好 请问有答复了吗

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

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

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

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

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

我在想

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

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

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

,

Ben Qin:

你好,器件会关闭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关闭。

,

user78960159:

默认情况下,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,为激活模式

,

user78960159:

如您所说,

“即使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周期

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

,

Ben Qin:

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

是的。

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

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

,

Ben Qin:

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

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

,

user78960159:

您好 再次感谢帮助

您的这句话提示了我 

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

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

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

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

,

Ben Qin:

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

赞(0)
未经允许不得转载:TI中文支持网 » MSP430F5438A: 关于SMCLK的疑问
分享到: 更多 (0)