浅析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的源和分频

浙公网安备 33010602011771号