查看: 2264|回复: 0

Kinetis低功耗中的概念解析上篇(时钟)

[复制链接]
  • TA的每日心情
    开心
    2025-7-11 08:53
  • 签到天数: 301 天

    连续签到: 2 天

    [LV.8]以坛为家I

    3868

    主题

    7472

    帖子

    0

    管理员

    Rank: 9Rank: 9Rank: 9

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


    KL03Z MCU使用的低功耗系统同大多数Kinetis MCU相似, 具有很好的代表性。对于已经了解Kinetis系列MCU的常用基本功能,想继续掌握功耗模式管理或是正在调试低功耗问题的工程师,在逐字逐句阅读手册之前,先通过本文理清思路, 明确一些概念, 是一个不错的起点。


    低功耗相关的功能模块


    KL03Z手册中第七章<功耗管理>,是把功耗管理分成时钟管理和电源管理两个小节分别阐述的。


    平时我们习惯用电源管理中的模式表示功耗模式,但实际上,电源管理和时钟管理是相辅相成的,二者相互配合共同完成功耗管理。管理时钟系统的模块涉及系统集成模块(SIM,在特定的情况下开关时钟)、多功能时钟发生器(MCG,产生各种原始时钟源)和杂项控制模块(MCM);管理电源系统的模块主要是电源管理控制器(PMC),以及系统模式控制器(SMC)。


    时钟模式


    本节是从时钟管理系统的角度,描述不同功耗模式下时钟系统的工作情况。


    这里特别说明一下内核时钟(core clock)、系统时钟(system clock)和总线时钟(bus clock)、以及同步时钟模式与异步时钟模式的概念。
    46.png
    内核时钟和系统时钟在大多数情况下都是一个时钟,这个时钟是输入给Arm内核系统(Arm Platform)的时钟,Arm内核系统中的私有外设模块也是由这个时钟驱动, 例如大家熟知的NVIC、Systick等。


    总线时钟通常是系统时钟的整数分频值,是专门给系统总线提供的时钟源, 用于连接外设模块。


    总线上连接的外设模块,可以使用总线时钟驱动本模块的逻辑工作,由于总线时钟来自于系统时钟,使用此时钟源的外设模块跟系统内核的时钟同源,它们之间的数据通信不需要额外的等待同步, 被称为同步时钟模式。另外, 有时外设模块也可以选择直接从时钟生成模块输出的时钟源,被称为异步时钟模式。


    一个特别需要说明的是定时器模块。定时器模块的工作需要两个时钟:一个是模块本身同总线相连部分的时钟,这部分对时钟的使用同其它模块相同,读写寄存器都使用这个时钟,它是一种同步时钟;另一个时钟用于定时器的计数,有时在文档也称之为"功能时钟(functional clock)", 它是可以使用其它的时钟即异步时钟。这两个是完全不同的时钟域, 可以使用同一个时钟源, 也可以分别使用不同的时钟源。


    部分掉电模式


    部分掉电模式模式(Partial Stop,PSTOPx)的设计丰富了低功耗系统的选择,PSTOP1和PSTOP2模式工作在常规的WAIT等待模式和STOP掉电模式之间。


    停止提供时钟的范围按这个顺序逐渐增大:
        WAIT < PSTOP2 < PSTOP1 < STOP


      WAIT仅仅停掉CPU时钟,只是CPU进入休眠,ARM内核中的其余模块(例如NVIC和Systick)可以继续工作,总线上的外设完全不受 影响。


      PSTOP2进一步停掉了系统时钟,ARM内核系统的时钟完全停供。时钟发生器MCG和电源管理器PMC都还在工作,总线时钟保持供应,大部分使用总线时钟驱动的外设模块可以继续工作。它相当于是WAIT模式的变种。
    从PSTOP2模式退出的唤醒事件是复位,或由总线时钟驱动的外设产生的异步中断事件(此时由于系统时钟停止供应,NVIC中断管理器已经不工作了)。


      PSTOP1进一步停掉总线时钟,这样大多数外设模块的时钟也被停掉了。它相当于是STOP模式的变种。但是MCG仍然继续工作,这就意味着一些能够直接选择MCG输出时钟源的外设,仍然可以在异步时钟模式下继续工作。
    从PSTOP1模式退出的唤醒事件是复位,或由总线主机/从机外设模块产生的异步中断。


      STOP模式停掉了全部的CPU时钟,系统时钟和总线时钟, 由于在STOP模式下PMC电源管理模块停止工作, 时钟发生器模块MCG的供电也停了, 对应MCG也不再产生时钟。这个是常规系统的最低功耗模式。但是少数使用特殊的不是来自于MCG时钟源的模块仍能够继续工作, 例如RTC, LPTMR等。


    部分掉电模式在SMC的掉电控制寄存器(Stop Control Register,SMC_STOPCTRL)中配置。


    纯计算模式


    纯计算模式(Computing Operation,CPO)是指,CPU本身是使能工作的,并且可以读FLASH和访问SRAM,但是其它所有总线主机和总线从机均进入各自的掉电状态。此时MCU仅能通过CPU执行计算任务。计算模式也是一种工作模式(对应也有自己的功耗状态),可以通过RUN或VLPR模式进入。


    芯片手册中对计算模式加了一条特别说明:不要从计算模式直接进入任何类型的STOP模式,否则系统真的就彻底休眠不能唤醒了。正确的做法应该是,先从计算模式退出到常规的工作模式,配置好需要在低功耗模式下继续工作的外设模块并使能它们,再进入STOP模式。此时CPU虽然停机,但是预先配置好的外设模块仍可以继续工作。


    这里再详细介绍一点关于计算模式的技术细节。计算模式复用了STOP模式的控制逻辑,进入计算模式的方式跟进入STOP模式的方式几乎相同,停用其它外设模块的方式也与STOP模式相同,当然,原先能在STOP模式下存活的模块也能够在计算模式下存活,并保持了产生异步中断请求的能力。

    在计算模式下,MCG、PMC、SRAM和FLASH的读端口(写操作被关闭了)不受影响,但是不能操作任何外设模块的寄存器。此时AIPS外设模块地址空间被关闭了,任何试图访问这个空间的操作都会引起总线访问错误。系统内核的私有外设地址空间仍然开放,一些内核中的模块,例如MCM、NVIC、IOPORT、SysTick等还能够继续工作。

    这样看起来,进入计算模式后,整个MCU就变成了一个纯Arm Cortex-M内核的芯片,所有外设的功能都被屏蔽掉了。

    你可能注意到了IOPORT仍可以继续工作,此时Arm内核仍可以通过IOPORT模块间接访问GPIO,但由于GPIO外设模块的时钟已经被关掉,此时读写GPIO的结果将是不可预知的,因此不推荐再进行任何GPIO操作。


    与计算模式相关的寄存器是MCM模块的CPO寄存器(MCM_CPO),写MCM_CPO[CPOREQ]寄存器位为1或0,对应进入和退出计算模式。也可以配置在检测到外设模块的中断时自动退出计算模式。只有内核私有外设的中断(例如NMI和SysTick可以在不退出计算模式的情况下得到响应,还有一个例外是GPIO引脚中断,GPIO中断也是可以在计算模式内部得到响应。


        当通过写MCM_CPO[CPOREQ]寄存器位为1进入计算模式时,标志位MCM_CPO[CPOACK]=1表示成功进入该模式。


        当通过写MCM_CPO[CPOREQ]寄存器位为0,或者有外部中断到来,退出计算模式时, 标志位MCM_CPO[CPOACK]=0表示成功退出该模式。


        当在VLPR模式(低功耗运行模式)中退出计算模式时,退出过程将会延时一段时间,直到PMC完成供电模式的转变。此时就需要软件轮询MCM_CPO[CPOACK]标志位,等待退出过程完成后,才能访问AIPS外设空间,从而避免在计算模式中访问外设寄存器而产生总线访问错误。


    外设冻结模式


    少数外设支持一种被称为"外设冻结(Peripheral Doze)"的模式,设计了一个寄存器位(通常位于SIM模块中,有时也会安排在外设模块内部,例如KL43的LCD_GCR[LCDDOZE]),可在低功耗模式期间自动禁用外设模块。


    冻结模式在如下模式下都会起作用:


        CPU处于WAIT模式。


        CPU处于STOP模式,包含进入序列。也就是说,在进入STOP模式的过程中, 就已经先把外设冻结了。


        CPU处于计算模式, 包含进入序列。


    外设冻结模式是一种用户主动配置的功能: 在未启动外设冻结模式时,MCU进入需要停用外设模块的低功耗模式(各种类型的STOP模式)时,在硬件上需要先给总线上的所有外设模块(主机和从机)发送停机请求,当外设模块自行停机并返回停机响应之后,CPU才会自我休眠,当用户人工启用外设冻结模式后,不再需要向外设模块请求停机并等待,而是通过强制手段直接地关掉它们。当然,用户也可以配置外设冻结模式,在进入WAIT和VLPW模式下起作用。


    举例来说,FLASH存储器就是一个支持冻结模式的外设模块。如果在WAIT和PSTOP模式下关闭对FLASH存储器的访问,冻结FLASH将会节约不少功耗。当然,从唤醒到开始执行FLASH中程序的时间也会稍微长一点,但如果此时执行的是存放在SRAM中程序,就不会有延时的情况存在了。


    操作FLASH冻结模式的寄存器位于SIM模块的SIM_FCFG1[FLASHDOZE],这个功能模式在默认情况下是关闭的,就是说在可以配置冻结FLASH的情况下,FLASH默认是没有被冻结。


    时钟门控


    为了节约电能, 绝大多数模块的时钟都可以通过SIM的SCGCx寄存器关掉。这些控制寄存器位在复位后都被清零,对应的模块也被关停。在初始化任何一个外设模块之前,需要在SIM_SCGCx寄存器中启用相应模块的时钟,在停用模块之后再停止时钟供应。


    关于这部分的更多描述,可以参阅系统时钟框图的说明,及SIM模块中寄存器们的具体配置选项。



    以SIM_SCGC5寄存器为例,它控制GPIOA、GPIOB、LPUART0和LPTMR的时钟, 如下所示:


    从控制时钟的角度看对功耗的控制,就先介绍到这里。本文的下篇将介绍从电源控制的角度实现功耗的控制。


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

    qiandao qiandao
    回复

    使用道具 举报

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

    本版积分规则

    关闭

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

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

    GMT+8, 2025-7-19 13:53 , Processed in 0.083437 second(s), 20 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

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