测试目标板:nrf52840开发板
nRF52的时钟管理
nRF52时钟树:
nrf52的系统时钟可以从内部或者外部为系统提供时钟源。频率振荡器根据模块的个别要求分配,时钟分配是自动并且按照模块独立分配的,以限制未使用模块的电流消耗。
时钟树中的时钟如下:
• 64MHZ片上振荡器
• 64MHZ晶体振荡器,使用外部32MHZ晶体
• 32.768KHZ±250ppmRC振荡器
• 32.768KHZ晶体振荡器,使用外部32.768KHZ晶体
• 64MHZ振荡器生成的32.768KHZ振荡器
高速时钟控制器:HFCLK clock controller
高速时钟控制器为系统提供如下时钟:
• HCLK64M:64MHZ CPU时钟
• PCLK1M:1MHZ外设时钟
• PCLK16M:16MHZ外设时钟
• PCLK32M:32MHZ外设时钟
高速时钟控制器的时钟源为:
• HFINT:64MHZ内部振荡器
• HFXO:64MHZ晶体振荡器
当系统请求从HFCLK控制器一个或多个时钟时,HFCLK将自动提供它们。如果系统不再要求从HFCLK提供时钟,则进入省电模式。
当请求HFCLK且HFXO尚未启动时,将会使用HFINT作为时钟源。
HFXO是通过触发HFCLKSTART任务来启动的,通过触发HFCLKSTOP任务来停止的。当HFCLKSTART任务被触发时,一旦HFXO稳定,就会生成HFCLKSTARTED事件。
HFXO必须运行使用RADIO NFC或者与32.768KHZ RC振荡器相关的校准机制进行校准。
64 MHz晶体振荡器(HFXO)是由一个32 MHz的外部晶体控制的。
- 低速时钟控制器:LFCLK clock controller
- 系统支持多个低频时钟源。
- • 32.768 kHz RC振荡器(LFRC)
- • 32.768 kHz晶体振荡器(LFXO)
- • 由HFCLK合成的32.768 kHz(LFSYNT)
在系统关闭模式下,LFCLK控制器和所有LFCLK时钟源都处于关闭状态。
LFCLK时钟的启动首先需要在LFCLKSRC寄存器中选择首选的时钟源,然后触发LFCLKSTART任务。如果选择了LFXO作为时钟源,那么在LFXO启动过程中,LFCLK将首先从32.768 kHz的LFRC运行,并在该振荡器运行后自动切换到使用LFXO。当LFXO启动后,将生成LFCLKSTARTED事件。
LFCLK时钟通过触发LFCLKSTOP任务来停止。
在LFCLK运行时不允许写寄存器LFCLKSRC。
一个LFCLKSTOP任务会停止LFCLK振荡器。然而,只有在LFCLKSTAT寄存器中状态字段指示LFCLK处于运行状态后,才能触发LFCLKSTOP任务。合成的32.768 kHz时钟依赖于HFCLK来运行。如果LFCLK从合成的32.768 kHz时钟运行需要高精度,那么HFCLK必须从HFXO源运行。
32.768 kHz RC振荡器(LFRC)
LFRC振荡器有两种工作模式:正常模式和超低功耗(ULP)模式,允许用户根据需求在功耗和时钟精度之间进行权衡。LFRC模式在寄存器LFRCMODE中进行配置。在更改振荡器模式之前,必须停止LFRC振荡器。
LFRC的频率会受到温度变化的影响。在校准过程中,可以使用HFXO作为参考振荡器来校准LFRC振荡器,从而提高其精度。
在LFRC振荡器启动并运行后,可以通过触发CAL任务来对其进行校准。
LFRC振荡器将临时请求使用HFCLK作为校准的参考。校准完成后,将生成一个DONE事件。为了使校准机制工作,必须启动HFCLK晶体振荡器(通过触发HFCLKSTART任务)。
在校准过程中,不允许停止LFRC或向LFRCMODE写入数据。
校准定时器
校准定时器可用于设定32.768 kHz RC振荡器的校准间隔。通过触发CTSTART任务来启动校准定时器,通过触发CTSTOP任务来停止校准定时器。
校准定时器总是从CTIV(保留)寄存器中指定的值开始倒计时,当计时器达到0时,会生成一个CTTO事件。当校准定时器达到0时,它会自动停止。
32.768 kHz 晶体振荡器(LFXO)
对于需要更高LFCLK精度(当需要优于±500 ppm的精度时),必须使用低频晶体振荡器(LFXO)。
支持以下外部时钟源:
• 应用到XL1引脚的Low swing时钟信号。此时,XL2引脚应接地。
• 应用到XL1引脚的Rail-to-rail时钟信号。此时,XL2引脚应接地或保持未连接状态。
从HFCLK合成的32.768 kHz(LFSYNT)
LFCLK也可以从HFCLK时钟源合成。此时,LFCLK的精度将是HFCLK的精度。
使用LFSYNT时钟可以避免对32.768 kHz晶体的需求,但由于系统需要请求HFCLK,因此会增加平均功耗。