Silicon EFR32xG22 CMU
CMU控制时钟切换和分配。EFR32xG22支持7种不同的振荡器,功耗最小,启动时间短。CMU具有对RC校准的硬件支持
振荡器和时钟对MCU的功耗贡献很大。低功耗振荡器与灵活的时钟控制方案相结合,可以在任何给定应用中最大限度地降低能耗。
介绍
时钟管理单元(Clock Management Unit, CMU)负责在各种振荡器源之间进行切换,并向外设模块提供时钟。振荡器根据外设的需求自动开启和关闭,以最大限度地减少功耗。
特性
- 多时钟源可用:
- 38Mhz - 40mhz高频晶体振荡器(HFXO)
- 1 MHz - 80 MHz高频RC振荡器(HFRCODPLL)
- 20 MHz快速启动RC振荡器(FSRCO)
- 1 MHz - 38 MHz外部时钟从输入引脚(CLKINO)
- 32.768 kHz低频晶体振荡器(LFXO)
- 32.768 kHz低频RC振荡器(LFRCO)与精密模式
- 1000hz超低频RC振荡器(ULFRCO)
- 按需振荡器请求。
- 低功率振荡器。
- 启动时间快。
- AHB时钟(HCLK)和APB时钟(PCLK)的级联预分频器。
- 基于模块使能对所有外设进行单独的时钟门控。
- 定时器和IADC的复位基于模块使能。
- 可选择的时钟可以输出外部引脚和/或PRS。
- FSRCO与系统时钟异步,可在EM2中选择用于IADC操作。
- 硬件支持校准RC振荡器。
高频外设
- EUART:支持EM0-3 使用EM23GRPACLK时钟
- IADC:支持EM0-4 使用FSRCO时钟
低频外设
LETIMER定时器 支持EM0-3 使用EM23GRPACLK时钟 (ULFRCO)
WDOGn 支持EM0-3 使用EM23GRPACLK时钟 (ULFRCO)
系统时钟
系统bus时钟
“SYSCLK”为选择的“系统时钟”。HCLK是SYSCLK的可选预缩放版本。PCLK是HCLK的可选预缩放版本。SYSCLK,因此HCLK和PCLK,可以由高频振荡器驱动或由引脚驱动。缺省情况下,选择FSRCO作为启动振荡器。要更改所选时钟源,请写入CMU_SYSCLKCTRL中的CLKSEL位域。如果将无效选项编程到CLKSEL中,则将选择FSRCO。SYSCLK在EMO active和EM1 Sleep状态下运行,在EM2 DeepSleep状态下自动停止。
预分频器设置可以动态更改,新设置立即生效。当切换到更高频率的振荡器源时,应在时钟选择之前调整预分频器设置,以防止过频。出于同样的原因,当切换到低频振荡器源时,在时钟选择完成之前,无法调整预分频器设置。
HFXO时钟直接馈送到无线电收发器。因此,无线电收发器接收到的时钟不受SYSCLK所选时钟源的影响,也不受任何时钟预分频器的影响。
HCLK-AHB时钟
HCLK是SYSCLK的预缩放版本。这个时钟驱动AHB总线接口。示例模块包括CPU, Cache, Busl Matrix, MSC, RAM, LDMA和GPIO。通过将CMU_SYSCLKCTRL中的HCLKPRESC设置为DIV2或DIV4,可以预先缩放HCLK。这将HCLK预先缩放到所有AHB总线时钟,通常用于在系统不需要以最高频率运行的应用中节省能源。设置可以动态更改,新的设置立即生效。一些由这个时钟驱动的模块在不使用时可以完全进行时钟门控。这是通过清除模块中的模块使能(EN)位来完成的在寄存器。
PCLK-APB时钟
PCLK是HCLK的预缩放版本。这个时钟驱动APB总线接口。示例模块包括USART和I2C。通过将CMU_SYSCLKCTRL中的PCLKPRESC设置为DIV2,可以对PCLK进行预缩放。这将PCLK预先缩放到所有APB总线时钟,并且有必要防止PCLK超过50 MHz的最大频率。设置可以动态更改,新的设置立即生效。一些由这个时钟驱动的外设在不使用时可以完全进行时钟门控。这是通过清除模块EN寄存器中的模块启用(EN)位来完成的。
lspclk -低速度APB时钟
LSPCLK是PCLK的预缩放版本。这个时钟驱动低速APB总线接口。示例模块包括I2C。LSPCLK总是被2预先缩放。这将LSPCLK预先缩放到所有低速APB总线时钟,并且有必要防止LSPCLK超过25 MHz的最大频率。一些由该时钟驱动的外设在不使用时可以完全进行时钟门控。这是通过清除模块EN寄存器中的模块启用(EN)位来完成的。
RHCLK- AHB无线电时钟
无线电AHB时钟(RHCLK)是SYSCLK的预缩放版本。RHCLK支持的最大频率为50 MHz。CMU_SYSCLKCTRL中的RHCLKPRESCl设置允许SYSCLK通过(DIV1)或对时钟应用一个除2 (DIV2)。
EM01GRPACLK Energy模式01 A组时钟
EM01GRPACLK是在能量模式0或1下工作的A组外设所选择的时钟。这些是典型的高时钟频率外设模块。EMO1GRPACLK有几个可选的源:HFXO、HFRCODPLL和FSRCO。另外,EMO1GRPACLK可以关闭。选择是使用CMU_EMO1GRPACLKCTRL中的CLKSEL字段配置的。
由em01grpackk进行时钟处理的每个高频外设都可以有自己的预分频器设置和使能位。如果可用,可以在外设的控制寄存器中找到预分频器设置。启用位可以在模块的EN寄存器中找到。
em01grpbclk -Energy模式01 B组时钟
EM01GRPBCLK是在能量模式0或1下工作的B组外设所选择的时钟。这些是典型的高时钟频率外设模块。EMO1GRPBCLK有几个可选的源:HFXO、HFRCODPLL、FSRCO、CLKINO、HFRCODPLLRT和HFXORT。此外,还可以禁用EMO1GRPBCLK。选择是使用CMU_EM01GRPBCLKCTRL中的CLKSEL字段配置的。由EM01GRPBCLK进行时钟处理的每个高频外设都可以有自己的预分频器设置和使能位。如果可用,可以在外设的控制寄存器中找到预分频器设置。启用位可以在模块的EN寄存器中找到。
EM23GRPACLK-Energy Mode 2和Mode 3 A组时钟
EM23GRPACLK是A组外设选择的时钟,工作到能量模式2或3。这些都是典型的低能耗外设模块。EM23GRPACLK有三种可选源:LFRCO, LFXO和ULFRCO。另外,EM23GRPACLK也可以关闭。选择是使用CMU_EM23GRPACLKCTRL中的CLKSEL字段配置的。每个由EM23GRPACLK进行时钟处理的低能耗外设都可以有自己的预分频器设置和使能位。预分频器设置,如果可用,可以在外设的控制寄存器中找到。启用位可以在模块的EN寄存器中找到。
EM4GRPACLK -能量模式4 A组时钟
EM4GRPACLK是A组外设选择的时钟,工作到能量模式4。这些都是典型的超低能耗外设模块。EM4GRPACLK有三种可选源:LFRCO、LFXO和ULFRCO。另外,还可以禁用EM4GRPACLK。选择是使用CMU_EM4GRPACLKCTRL中的CLKSEL字段配置的。注意:EM4GRPACLK与EM23GRPACLK处于不同的功率域,这使得它一直可用到EM4。
每个由EM4GRPACLK进行时钟处理的低能耗外设都可以有自己的预分频器设置和使能位。预分频器设置,如果可用,可以在外设的控制寄存器中找到。启用位可以在模块的EN寄存器中找到。
外设总线时钟使能
每个外设在CMU_CLKENO或CMU_CLKEN1寄存器中都有一个单独的总线时钟启用位。禁用外设的总线时钟可以节省能源,即使外设不活动时也是如此。
iadclk - iadc时钟
IADCCLK为IADC选择的时钟。IADCCLK源可以从EMO1GRPACLK或FSRCO中选择。此外,还可以禁用IADCCLK。选择是使用CMU_IADCCLKCTRL中的CLKSEL字段配置的。
注意:当使用Timer作为IADC转换的同步触发器时,必须选择EM01GRPACLK,因为Timers从EM01GRPACLK运行。
IADC有自己的预分频器设置和使能位。预量器设置可以在IADC的控制寄存器中找到。使能位可以在IADC的EN寄存器中找到。无论通过CMU_IADCCLKCTRL寄存器中的CLKSEL位域选择哪个时钟源作为IADC时钟,该时钟将在需要时自动激活。IADC可以自动启动和停止。
uart时钟
UARTCLK是EUART外设所选择的时钟,可以在EM01GRPACLK和EM23GRPACLK之间进行选择。通过CMU_UARTCLKCTRL中的CLKSEL字段选择UARTCLK。如果在EM2中工作,则必须选择EM23GRPACLK选项,因为EM01GRPACLK在这些较低能量模式下会关闭。
traceclk调试跟踪时钟
CMU通过CMU_TRACECLKCTRL寄存器中的PRESC字段缩放用于调试跟踪的时钟。调试跟踪时钟最大限制为50 MHz。因此,如果SYSCLK小于等于50 MHz,则可以使用默认的DIV1设置。当SYSCLK大于50 MHz时,使用DIV2,避免数据泵溢出。所选的调试跟踪时钟将用于运行Cortex-M33跟踪逻辑。l注意,在启用ETM之前,应该正确配置此寄存器。
WDOGCLK-Watchdog Timer时钟
看门狗定时器(WDOG)可以配置为使用四种不同的时钟源之一:LFRCO、LFXO、ULFRCO或HCLKDIV1024。选择选项HCLKDIV1024跟踪看门狗超时与CPU时钟速度。
切换时钟源
FSRCO振荡器是一种固定频率的低能量振荡器,启动时间极短。因此,当设备启动(例如复位后)时,该振荡器被硬件选择作为SYSCLK的时钟源。
软件可以在运行时在不同的时钟源之间切换。例如,当HFRcoDPLL为时钟源时,软件可以通过在CMU_SYSCLKCTRL寄存器中写入CLKSEL字段来切换到HFXO。参见图8.4在HFXO准备好之前,CMU从HFRCO切换到HFXO,这一特定操作的事件序列描述见140页。
当通过CMU_SYSCLKCTRL中的CLKSEL位域将SYSCLK转换为HFXO时,HFXO将自动启动。切换到尚未准备好的振荡器,SYSCLK将在振荡器启动时间的持续时间内停止。这有效地延缓了Core 模块。可以通过首先使能目标振荡器(例如HFXO),然后在切换时钟源之前等待该振荡器准备就绪来避免这种情况。这样,系统继续在HFRCO上运行,直到目标振荡器(例如HFXO)准备就绪并提供可靠的时钟。这个事件序列如图8.5所示,图141页中HFXO就绪后,CMU从HFRCO切换到HFXO。一般来说,所有的振荡器都有一个单独的标志,当振荡器准备就绪时设置该标志。这个标志也可以配置为生成一个中断
注意:为了节省能源,请记住在不使用时禁用所有时钟开关和/或模块使能位。
RC校准
CMU具有内置的硬件支持,可以在运行时有效地校准RC振荡器(HFRCODPLL),参见第142页的图8.6 RC振荡器校准的硬件支持端口,以获得该电路的说明。
概念是选择一个参考,并将RC频率与参考频率进行比较。当校准电路启动时,一个下行计数器在一个可选时钟上运行(CMU_CALCTRL中的DOWNSEL),一个上行计数器在一个可选时钟上运行(CMU_CALCTRL中的UPSEL)同时启动。参考时钟也可以通过CAL-l UP和CALDN消费者输入通过PRS通道路由。在开始校准之前,必须写入下计数器的顶值(CMU_CALCTRL中的CALTOP)。下行计数器计数CALTOP+1周期。当下行计数器达到0时,对上行计数器进行采样,并设置中频寄存器中的CALRDY中断标志。如果清除CMU_CALCTRL中的CONT,则在完成正在进行的校准后停止计数器。如果通过在CMU_CALCTRL中设置CONT选择连续模式,则下行计数器重新加载最高值并继续计数,上行计数器从0重新开始计数。
然后软件可以从cmu_calctrl中读出采样的上行计数器值。上行计数器已计数(采样值)+ 11个周期。参考和振荡器之间的比率受到校准可以很容易地找到使用(最高值)+1和(thel采样值)+1。上行计数器的溢出将不会发生。如果上行计数器在下行计数器达到0之前达到其最高值,上行计数器将保持在其最高值。可以通过分别在CMU_CALCMD中写入CALSTART和CALSTOP位域来启动和停止校准。有了这种硬件支持,编写高效的软件校准算法就很简单了。
Energy 模式
振荡器和系统时钟的可用性取决于所选择的能量模式。默认情况下,高频振荡器 (HFRCODPLL和HFXO)和高频时钟(SYSCLK、HCLK、PCLK、RADIOCLK和EMO1GRPACLK)直到EM1 Sleep都是可用的。从EM2 DeepSleep开始,这些振荡器和时钟通常是关闭的,尽管存在特殊情况,如145页的表8.1能量模式中的振荡器和时钟可用性所总结的那样。CMU概览图也指出了哪些振荡器和时钟可以在哪些能量模式下使用。
低频振荡器(LFRCO和LFXO)在所有能量模式下都可用,除了EM3停止,当它们根据定义关闭时。l默认情况下,这些振荡器在EM4关断时也关闭。LFXO或LFRCO(非精密模式)可根据需要在EM4中请求。当使用LFRCO精度模式时,该振荡器不能在EM4下工作。超低频振荡器(ULFRCO)在所有能量模式下都是打开的,除了EM4关断,但如果需要,也可以在该状态下请求。低频时钟(em23grpackk、em4grpackk、WDOGCLK、RTCCCLK和proportclk)处于不同的功率域,因此它们的可用性不仅取决于所选择的时钟源,还取决于所选择的能量模式,如第145页的表8.1振荡器和能量模式中的时钟可用性所示。
- 1 Under software control.
- 2 Default off, but kept active if used by the IADC.
- 3 Default off, but kept active if used by BURTC.
- 4 LFRCO not available in EM4 when precision mode enabled.
- 5 On only if ULFRCO is used as clock source.
单脚时钟输出
可以将CMU配置为在CMU_CLK引脚上输出时钟。这个时钟选择是使用CMU_EXPORTCLKCTRL中的CLKOUTSEL位字段dsl完成的。所需的输出引脚必须在GPIO_DBUSCMU_ROUTEEN寄存器中启用,引脚位置可以在GPIO_DBUSCMU_CLKOUT路由寄存器中配置。以下时钟可以在一个引脚上输出:
- HCLK和EXPCLK。HCLK是AHB的高频时钟。EXPCLK是HCLK的预缩放版本,由CMU_EXPORTCLKCTRL寄存器中的PRESC位域控制。
- 来自任一振荡器的合格时钟。一个合格的时钟在启动过程中不会有任何故障或偏占空比。对于LFXO和HFXO,需要分别在LFXO_CFG和HFXO_XTALCFG中正确配置TIMEOUT位域,以保证正确的合格时钟。
当CMU_SYSCLKCTRL中的HCLKPRESC位域使用除1以外的任何其他除法因子时,HCLK将不会具有50-50占空比(即如果HCLKPRESC不等于0)。在这种情况下,当输出的EXPCLK的除法因子在CMU_EXPORTCLKCTRL寄存器的PRESC位字段中没有设置为偶数时,输出的EXPCLK也不会是50-50。
引脚时钟输入
可以将CMU配置为从CMU CLKI0输入时钟。这个时钟可以选择驱动SYSCLK和DPLL引用使用CMU_SYSCLKCTRL。CLKSEL和CMU_DPLLREFCLKCTRL。分别使用CLKSEL。所需的输入引脚位置可以在GPIO_DBUSCMU_CLKINOROUTE寄存器中配置。
PRS时钟输出
CMU可以用作PRS发生器。它可以输出时钟到PRS,这可以由消费者选择为CMUCLKOUT。可以通过CMU_EXPORTCLKCTRL中的CLKOUTSEL字段选择通过CMU_EXPORTCLKCTRL产生的时钟。
请注意,CLKOUTSEL字段也用于选择哪个时钟输出到引脚上,如8.3.5 a上的时钟输出所述销。然而,与引脚上的时钟输出相反,PRS上的时钟输出不依赖于GPIO_DBUSCMU_ROUTEEN和GPIO_DBUSCMU_CLKOUT路由寄存器的任何配置。
中断
CMU模块产生的中断被组合成一个中断向量。如果CMU中断被启用,将会有一个中断如果设置了CMU_IF中的一个或多个中断标志以及CMU_IEN中的相应位,则会产生中断标志。
保护
可以锁定控制寄存器和命令寄存器,以防止软件意外写入关键时钟设置。这是可控的通过CMU_LOCK寄存器。
WDOGCLKCTRL寄存器分别由CMU WDOGLOCK寄存器锁定。这是为了防止EM3 Stop模式无意中禁用看门狗时钟。
除了软件锁之外,还实现了硬件锁,以防止亚稳态。当CMU_CALCMD.CALSTART启动校准时,CMU CALCTRL被硬件锁定。当通过DPLL EN.EN使能DPLL时,CMU DPLLREFCLKCTRL被硬件锁定。因为这些开关不是无故障的,所以时钟选择必须在使能操作之前进行配置,并且不能在操作过程中进行更改。