浅析RT1170的功耗管理(4)--时钟篇

概述

有了前面的概念,下面的讲解就会比较容易一些。

先说时钟的概念,有两类:

  • 时钟源,主要是各个crystal,以及PLL
  • 根时钟,每个core和外设的工作时钟,他们来自某一个时钟源,并可以在不同的时候切换不同的时钟源以及分频系数

时钟在不同的功耗模式下,存在两种变化的可能:

  • 变频率,比如高低频率间的切换
  • 开关,直接把clock关掉或者打开

在RT1170中,时钟可以根据CPU的模式,或者SP的模式,或者Stand by自动变化的。

CCM有4中工作模式

Mode Clock Source Clock Root Clock Group Clock Gate
Unassigned OSCPLLn_DIRECT CLOCK_ROOTn_CONTROL  CLOCK_GROUPn_CONTROL LPCGn_DIRECT
Domain OSCPLLn_DIRECT  CLOCK_ROOTn_CONTROL  CLOCK_GROUPn_CONTROL LPCGn_DIRECT
CPU low power OSCPLLn_DOMAIN -  - LPCGn_DOMAIN
Setpoint OSCPLLn_SETPOINT CLOCK_ROOTn_SETPOINT  CLOCK_GROUPn_SETPOINT LPCGn_SETPOINT

Note:

CLOCK_ROOTn_CONTROL: MUX, DIV

CLOCK_ROOTn_SETPOINT: MUX, DIV

Clock Root 关心的是源和分频比。

Clock Gate 关心的是开与关。

 

时钟的跟随域:

#define UNASSIGNED 0
#define CM7_DOMAIN 1
#define CM4_DOMAIN 2
#define SP_CTRL    3

 

当跟随CPU的状态走的时候,可以配置具体的时钟休眠级别(CPU low power mode):

 

  RUN WAIT ST0P SUSPEND
Level0 off off off off
Level1 on off off off
Level2 on on off off
Level3 on on on off
Level4 on on on on

 

 当跟随SP走的时候,需要配置在每个SP下是不是需要关掉。

 

由于STAND BY是独立模式,也需要定义在STAND BY下面是不是关掉。

 

小结:

RT1170采用这套机制后,所有的clock可以跟随CPU模式或者SP、Stand by模式自动的切换。
初始化以后,后面都不管,这是RT1170在芯片层面的功耗管理设计的精髓。

 

SDK 代码赏析

Gate 的配置

初始化每个时钟在CPU mode, SP, 以及 Stand by 下gate的 on off 状态。

相关寄存器:

CCM->LPCG[index].SETPOINT

CCM->LPCG[index].DOMAIN

CCM->LPCG[index].AUTHEN

 

 Clock Root的配置

每个时钟在各个SP下的配置,可以切换不同的时钟源,不同的分频。

相关寄存器:

CCM->CLOCK_ROOT[index].AUTHEN // 配root clock的domain

CCM->CLOCK_ROOT[rootIndex].SETPOINT[i]  // 配root clock在不同SP的源和分频

 

 

posted @ 2020-10-12 10:43  nxa16038  阅读(501)  评论(0)    收藏  举报