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

关于TM4123的低功耗睡眠模式的问题

最近研究低功耗,参考网上一些范例,基本实现了TM4C123 MCU的Sleep模式和DeepSleep模式。但还有一些问题不清楚:

1 MCU进入睡眠前用SysCtlPeripheralSleepEnable使得指定外设模块在睡眠模式中也保持开启。那么是不是其他外设模块默认就自动被关闭了,或者不提供系统时钟了? 如果追求睡眠时的功耗尽量的低,是否还需要在休眠前手动disable一下,唤醒后再手动enable?GPIO的状态(输入输出上拉)在睡眠时是保持的,是否应改变以降低功耗?

2 DeepSleep和Sleep的差别,DeepSleep可以配置改变系统时钟,而Sleep是用运行模式的时钟。除此之外,睡眠和深睡眠之间还有什么差别呢?如果深睡眠模式照样配置成用运行模式的时钟(DSLPCLKCFG寄存器Bit 6:4 = 0 ),是否就等同睡眠模式呢?从dateshheet中current consumption表格看功耗还是有差别的。

3 我的深睡眠模式程序中,配置成30K内部时钟(DSLPCLKCFG寄存器Bit 6:4 = 3) ,经常无法依赖TIME0定时器唤醒(但毫米级的systick中断可以),而用内部16M时钟(DSLPCLKCFG寄存器Bit 6:4 = 1 )就没问题。不知是什么原因。

4  我看到的资料写睡眠模式被唤醒后,自动回复睡眠前的MCU状态。那固件程序是不是不需要做什么复原的工作?

xyz549040622:

1.睡眠模式停止处理器时钟。所以一旦进入睡眠模式,处理器时钟都停止了,外设时钟来自处理器时钟,外设也就自然被关闭了。因此我觉得不需要手动关闭。

2.深度睡眠模式停止系统时钟并关闭 PLL 和 Flash 存储器。因此还是有区别的。

3.配置成30K内部时钟(DSLPCLKCFG寄存器Bit 6:4 = 3) ,经常无法依赖TIME0定时器唤醒(但毫米级的systick中断可以)。配置为30k时钟的时候,定时时间会改变的,因此出问题了吧。

4.固件是不需要复原的。

Martin Zhang Zhang:

回复 xyz549040622:

谢谢回答!

现在理解更深刻了。那个30K时钟的问题,确实是因为深睡眠后,TIMER0依赖的时钟不再是原来的40M pll时钟,而变成30K,相当于定时器的周期变大了一千多倍。

不过因为深睡眠后,GPIO的状态是保持的,如果连着LED灯等外设,还是得视情况处理。

LiSrRb-23:

回复 xyz549040622:

(很抱歉这么久远的帖子还要回帖)

最近也在搞睡眠模式,仅仅是作为讨论,第一点和我的理解不太一样,如果我的理解没错的话,按照datasheet的说法,在睡眠模式 sleep mode 的话,应该是仅仅暂停处理器,如果不专门定义系统时钟的话,系统时钟是不会改变的,外设应该还能和运行模式一样工作

如果需要关闭外设的话,需要调用SysCtlPeripheralClockGating打开automatic clock gating并提前开启需要打开的外设,这样才会把其他不开启的外设关闭

(In Sleep mode, the clock frequency of the active peripherals is unchanged)

xyz549040622:

回复 LiSrRb-23:

又看了一遍数据手册,你说的对,睡眠模式下,PLL被关闭,需要使用DSOSCSRC重新指定新的时钟源的。

赞(0)
未经允许不得转载:TI中文支持网 » 关于TM4123的低功耗睡眠模式的问题
分享到: 更多 (0)