查看: 1311|回复: 1

Kinetis低功耗中的概念解析下篇(电源)

[复制链接]
  • TA的每日心情
    开心
    2024-3-26 15:16
  • 签到天数: 266 天

    [LV.8]以坛为家I

    3315

    主题

    6570

    帖子

    0

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    32239
    最后登录
    2024-5-13
    发表于 2019-8-1 09:09:35 | 显示全部楼层 |阅读模式
    本文以KL03Z为例, 对Kinetis系列MCU的低功耗模式进行简介和综述, 介绍了Kinetis典型的时钟与电源工作模式的基本概念, 休眠与唤醒的基本方法, 以及各个模块在不同模式下的生存状况。
    本文上篇介绍了时钟部分,这是下篇介绍电源部分。


    电源模式


    电源管理控制器模块PMC提供了多种供电选项,允许用户根据实际应用优化系统功耗。


    电源管理的三个主要的模式是:


    运行模式RUN,这里包括Normal Run和Very Low Power Run(VLPR)模式


    等待模式WAIT,这里包括Normal Wait和Very Low Power Wait(VLPW)模式


    掉电模式STOP,包括Normal Stop、Very Low Power Stop(VLPS)和Very Low Leakage Stop 3/1/0模式


    每个运行模式(RUN和VLPR)都对应有一个等待模式(WAIT和VLPW)和掉电模式(STOP和VLPS)。等待模式对应Arm手册中描述的休眠模式(Sleep Modes),掉电模式对应Arm手册中深度休眠模式(Deep Sleep Modes)。


    根据用户应用程序对掉电状态的多种需求,系统中提供了多种不同程度的掉电模式,从部分掉电到对某些控制逻辑电路/存储器的完全掉电。


    在所有的掉电模式中,IO引脚的状态不发生变化,保持进入掉电模式之前的状态不变。



    下表中列出了各种低功耗模式下的工作状态:
    33.jpg
    进入与退出低功耗模式


    WFI指令是进入休眠模式(各种WAIT和STOP)的入口,使用WFI指令可以从运行模式切换到等待模式或掉电模式。


    具体进入哪种低功耗模式,还需要在SMC的模式锁定寄存器SMCPMPROT, 模式控制寄存器SMCPMCTRL和掉电模式控制寄存器SMC_STOPCTRL预先设定。




    void system_enter_sleep_modes(void)


    {


        __asm("WFI");


    }


    中断事件唤醒CPU退出休眠模式。


    除了常规的WAIT和STOP模式,Kinetis MCU专门设计了更低功耗的VLLS(超低泄露掉电)各种模式, 它们的唤醒源只能是:


    LLWS模块产生的唤醒事件。某些别的中断事件可以通过LLWS间接唤醒。但是具体在KL03Z上, LLWU只接收引脚中断事件。


    LPTMR


    CMP


    SRTC/RTC


    NMI_b引脚触发的不可屏蔽中断事件。


    但如果RESET引脚和NMIb引脚的功能在FTFAFOPT的配置下功能被关闭,则它们也不能作为VLLS模式们的唤醒源。


    从VLLS模式们唤醒后的恢复流程,完全按照复位流程来走。在这个阶段中,IO引脚时钟保持进入低功耗之前的状态,直到完全唤醒后,软件再次接管对引脚的控制权。


    在多种VLLS模式中(VLLS0,VLLS1,VLLS3),只有VLLS3模式才能让RAM继续保持状态,而别的VLLS模式都会让RAM掉电,从而丢失其中保存的内容。


    低功耗模式下各个外设模块的众生百态



    下表中列写了每个模块在不同功耗模式下的存活状态:
    35.png
    36.png
    37.png
    38.png
    FF=全功能。在VLPR和VLPW模式下,系统频率受限,但如果某个模块的功能未受限,也标注为FF。


    Async operation(异步操作)=使用其它时钟源,只要时钟源有效,则为全功能。


    static(静态)=模块寄存器状态和相关的存储器内容不丢失。


    powered(供电)=存储器有电以保持数据


    low power(低功耗)=存储器在低功耗供电状态下保持数据


    OFF=模块无供电,模块在唤醒时处于复位状态。对于时钟,OFF表示停止。


    wakeup=模块可以作为芯片的唤醒源。


    在低功耗模式下的调试模块


    在低功耗模式下,大多数模块保持原地不动状态或者彻底掉电,调试器此时不再能够获取它们的状态信息,不能进行调试。


    对于调试器本身,进入低功耗模式时:


    如果调试器本身也保持状态不变,调试端口将在退出低功耗模式时立刻投入工作,从而恢复调试工作状态。


    如果调试器也掉电了,调试端口将在唤醒过程中重新复位,需要经过重新配置才能工作。




    结束语


    至此, 对Kinetis低功耗应用的综述介绍就已经完成。



    以本文为基础,读者可以继续深究手册, 研读其中对具体细节功能的描述。同时, 也敬请期待后续低功耗应用的相关文章。






    作者:苏勇       文章出处:恩智浦MCU加油站

    签到签到
    回复

    使用道具 举报

  • TA的每日心情
    慵懒
    2018-12-21 09:20
  • 签到天数: 57 天

    [LV.5]常住居民I

    6

    主题

    163

    帖子

    1

    高级会员

    Rank: 4

    积分
    558
    最后登录
    2021-4-28
    发表于 2021-3-16 14:22:23 | 显示全部楼层
    本帖最后由 Dylan疾风闪电 于 2021-3-16 14:31 编辑

    LZ,请教一个问题:VLLS3模式,如何保持全局变量的值?
    ------------------------------------------------------------------------------------------------------------------------------
    例如, 全局变量a在main()中赋值a=123并通过串口打印,配置了VLLS3模式(RAM继续保持状态),
    进出STOP后(LLW唤醒),a的值没有保持,串口打印a=0。
    ------------------------------------------------------------------------------------------------------------------------------
    代码框架:
    volatile int a;//定义全局变量a

    int main()
    {
    ....
    if(...)//LLW唤醒
    {....
    }
    else
    {....
    a=123;//电源上电,给a赋值
    }
    ....

    ....
    for(;;)
    {
    .... print(a);//串口打印a的值//通过按键来打印
    ....//通过按键来进入VLLS3

    ....
    }
    }

    注:


    已找到帖子了,在此附上。方便其他朋友解决此类问题:
    【经验分享】关于VLLSx模式下的SRAM问题
    https://www.nxpic.org.cn/module/ ... &fromuid=189397
    (出处: 恩智浦技术社区)



    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /4 下一条

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2024-5-14 00:45 , Processed in 0.115923 second(s), 21 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

    快速回复 返回顶部 返回列表