NRF52832时钟控制系统

来源:互联网 发布:nginx的内置对象 编辑:程序博客网 时间:2024/05/22 02:18
NRF52832时钟控制系统可以从内部或外部高频、低频振荡器获得系统时钟,并根据模块的各自需要给他们分配时钟,时钟

分配是自动化的,并通过模块独立分组,以限制未使用的电流消耗。


HFCLK clock controller

下面是时钟的主要特点:

• 64 MHz 内部振荡器

 •64 MHz 晶体振荡器,使用外部32 MHz的晶振

• 32.768KZ +- 250 ppm的RC振荡器

 •32.768 kHz晶体振荡器,使用外部32.768 kHz晶振

 •32.768 kHz合成振荡器,从64 MHZ振荡器合成

 •固件(FW)覆盖振荡器控制活动的低延迟启动

 •自动振荡器和时钟控制,以及超低功耗的分布







当系统从HFCLK控制器请求一个或多个时钟时,HFCLK控制器将会自动提供。 如果系统没有请求由HFCLK控制器提供的任何时钟,控制器将进入省电模式。

这些时钟仅在系统处于ON模式时可用。 当系统进入ON模式时,内部振荡器(HFINT)时钟源将自动开始能够为系统提供所需的HFCLK时钟。

当系统需要HFCLK时钟时,如果HFXO尚未启动时,将使用HFINT振荡器。

可以通过触发HFCLKSTART任务启动HFXO振荡器,触发HFCLKSTOP任务停止HFXO振荡器。

当HFXO启动并且其频率稳定时产生HFCLKSTARTED事件

HFXO必须运行才能使用RADIO,NFC模块或与之相关的校准机制


19.1.1 64 MHz crystal oscillator (HFXO)

64 MHz晶体振荡器(HFXO)由32 MHz外部晶振控制

这个晶体振荡器是使用的无源晶振,为了实现正确的振荡频率负载电容必须匹配的晶体数据表规范。

下图是32M晶振连接电路图




负载电容CL由C1和C2串联得出




C1和C2为贴片电容,如图所示连接,

Cpcb1和Cpcb2是PCB上的杂散电容。


CPIN
是XC1以及XC2引脚间的分布电容


C1和C2应该用相同容量的电容,详细信息请查表。

为了可靠的运行,晶体负载电容,并联电容,等效串联电阻和
驱动电平必须符合第104页表64 MHz晶体振荡器(HFXO)中的规格
建议使用低于最大负载电容和/或并联电容的晶体。 低一点
负载电容会降低启动时间和电流消耗


19.2 LFCLK clock controller

该系统支持多种低频率的时钟源。

•32.768 kHz RC振荡器(LFRC)

•32.768 kHz晶体振荡器(LFXO)

•从HFCLK(LFSYNT)合成的32.768 kHz

首先选择寄存器LFCLKSRC中的首选时钟源来启动LFCLK时钟
然后触发LFCLKSTART任务

如果选择LFXO作为时钟源

当LFXO启动时,LFCLK将先从32.768 kHz LFRC开始运行,

一旦LFOX启动成功,则自动切换到LFOX运行,LFXO将生成LFCLKSTARTED事件。

通过触发LFCLKSTOP任务来停止LFCLK时钟

当LFCLK正在运行时,不允许写寄存器LFCLKSRC

触发LFCLKSTOP任务将停止LFCLK振荡器。 但是,LFCLKSTOP任务只能在寄存器LFCLKSTAT中的STATE字段为“LFCLK运行状态"才能被触发。

在OFF模式下,LFCLK时钟控制器和所有LFCLK时钟源始终为关闭


19.2.1 32.768 kHz RC振荡器(LFRC)

低频时钟(LFCLK)的默认源是32.768 kHz RC振荡器(LFRC)。

LFRC频率将受温度的影响而变化。

LFRC振荡器可以校准
通过在校准期间使用HFXO作为参考振荡器来提高精度。

LFRC振荡器不需要额外的元件。


19.2.2校准32.768 kHz RC振荡器

32.768 kHz RC振荡器启动和运行后,可通过触发CAL任务进行校准。 在在这种情况下,HFCLK将被暂时打开并用作参考。校准完成后,将产生DONE事件。 只要HFCLK从HFCLK晶体振荡器产生,校准机制才有效,因此在开始校准之前需要明确地启动该晶体振荡器,参见HFCLKSTART任务。


19.2.4 32.768 kHz晶体振荡器(LFXO)

对于更高的LFCLK精度(当要求的精度要好于+/- 250 ppm时),必须使用低频晶体振荡器(LFXO)

支持以下外部时钟源:
•低频时钟信号施加到XL1引脚。 然后XL2引脚接地。
•轨至轨时钟信号施加到XL1引脚。 XL2引脚应接地或未连接。

在LFCLKSRC寄存器配置时钟源


19.2.5由HFCLK(LFSYNT)合成的32.768 kHz

LFCLK也可以从HFCLK时钟源合成。 那么LFCLK的精度就是HFCLK的精度。

使用LFSYNT时钟避免了对32.768 kHz晶振的要求,但增加了平均功耗。


下面是寄存器表了




下面代码实现:

启动32M外部晶振

 NRF_CLOCK->EVENTS_HFCLKSTARTED = 0;  //HFCLK晶振状态寄存器清0  如果HFCLK也就是32M晶振启动并频率稳定后,这个寄存器会自动置1

NRF_CLOCK->TASKS_HFCLKSTART    = 1;     //启动HFCLK的晶振 也就是32M的外部晶振


 while (NRF_CLOCK->EVENTS_HFCLKSTARTED == 0)
  {
       //外部晶振启动并稳定后跳出循环
  }


启动外部32.768晶振:

和HFCLK类似

先配置LFCLK时钟源

寄存器LFCLKSRC





我们只要把SRC写1就配置成了外部32.768的晶振,其他的默认即可。

NRF_CLOCK->LFCLKSRC            = (1 << 0);

NRF_CLOCK->EVENTS_LFCLKSTARTED = 0; //状态清0
NRF_CLOCK->TASKS_LFCLKSTART    = 1; //启动LFCLK时钟源


while (NRF_CLOCK->EVENTS_LFCLKSTARTED == 0)

 {
        //LFCLK启动成功后跳出
 }


总结一下:

NRF52832由HFCLK高速时钟和LFCLK低速时钟两大块组成

HFCLK高速时钟可以自动提供PCLK1M PCLK16M PCLK32M HCLK64M给处理器及外设

HFCLK时钟源有内部HFINT64M振荡器和HFXO64M晶体振荡器,HFXO64M晶体振荡器由外部32M无源晶振提供。


当刚开机时,由内部HFINT振荡器提供HFCLK时钟,如果触发HFCLKSTART启动外部32M晶振时,当32M晶振启动并稳定时,

将自动切换为外部32M晶振时钟源,并产生HFCLKSTARTED事件。

使用RADIO NFC必须使用HFXO也就是32M外部晶振。

当 没有请求使用HFCLK高速时钟时,HFCLK控制器自动休眠。


LFCLK低速时钟源由一下三种

内部RC

32.768晶振,

HFCLK合成32.768

需要配置寄存器LFCLKSRC选择时钟源。

当配置了外部32.768源,触发LFCLKSTART来启动时,LFCLK先由内部RC振荡器提供

当外部32.768稳定启动后,自动切换为外部32.768.


需要注意的是

触发TASKS_HFCLKSTART任务是启动的HFXO 也就是外部32M晶振

触发TASKS_LFCLKSTART任务是启动HFCLK时钟,(具体哪个时钟源由你自己配置)