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:
不客气,很高兴您的问题解决了。