4. FIRC与SIRC配置:快速内部RC振荡器与慢速内部RC振荡器的配置寄存器、频率范围、精度与功耗特性

S32K3系列微控制器内部集成了两个关键的RC振荡器:快速内部RC振荡器(FIRC)和慢速内部RC振荡器(SIRC)。它们是系统时钟树的基础时钟源,分别服务于高性能运行场景与低功耗待机场景。本章节将深入解析两者的寄存器配置方法、频率范围、精度指标以及功耗特性,帮助开发者在时钟源选型时做出精准权衡。

核心概念: FIRC与SIRC是S32K3内部无需外部晶振即可工作的时钟源。FIRC追求速度与精度,SIRC追求极低功耗与稳定性。理解两者的差异是进行低功耗时钟切换的前提。

4.1 FIRC(快速内部RC振荡器)

FIRC是系统上电后的默认高速时钟源,为内核、总线以及大部分外设提供初始时钟。其设计目标是快速启动、中等精度,并覆盖大多数外设的工作频率需求。

4.1.1 频率范围与精度

参数 最小值 典型值 最大值 单位
输出频率 48 48 48 MHz
频率精度(开环) -3 — +3 %
频率精度(闭环,FIRC_FTRIM调整后) -1 — +1 %
启动时间 — 4.5 — µs

FIRC的标称频率固定为 48 MHz。其开环精度为 ±3%,通过配置 FIRC_FTRIM 寄存器进行工厂修调后,精度可提升至 ±1%。对于CAN、UART等对时钟精度要求不高的通信协议,FIRC可直接使用;但对于需要高精度时间基准的应用(如USB无晶振模式),建议使用外部晶振或PLL倍频。

4.1.2 配置寄存器详解

FIRC的配置主要集中在 SCG->FIRCCSR 和 SCG->FIRCDIV 寄存器组中。

  • SCG->FIRCCSR(控制和状态寄存器):用于使能/关闭FIRC、选择时钟源、监控状态。
    • FIRCCSR[EN]:FIRC使能位。置1启动FIRC振荡。
    • FIRCCSR[FIRC_EN]:FIRC时钟输出使能位。置1允许FIRC时钟输出到系统时钟树。
    • FIRCCSR[LOCK]:锁定指示位。当FIRC频率稳定后硬件置1。
  • SCG->FIRCDIV(分频配置寄存器):用于对FIRC输出时钟进行分频,生成不同频率的时钟域。
    • FIRCDIV[DIV1]:分频系数,决定输出到总线时钟(BUS_CLK)的频率。
    • FIRCDIV[DIV2]:分频系数,决定输出到慢速外设时钟(SLOW_CLK)的频率。
/* FIRC配置示例:使能FIRC,设置分频系数 */
SCG->FIRCCSR = SCG_FIRCCSR_EN(1) | SCG_FIRCCSR_FIRC_EN(1);
while(!(SCG->FIRCCSR & SCG_FIRCCSR_LOCK_MASK)); // 等待FIRC锁定

/* 配置分频:DIV1 = 1 (不分频,48MHz), DIV2 = 2 (24MHz) */
SCG->FIRCDIV = SCG_FIRCDIV_DIV1(0) | SCG_FIRCDIV_DIV2(1);

4.1.3 功耗特性

FIRC在48MHz全速运行时的典型功耗约为 1.5 mA。虽然相对于SIRC较高,但考虑到其提供的高性能,该功耗在运行模式下是可接受的。在进入低功耗模式前,应关闭FIRC以节省功耗。

开发建议: 在系统从RUN模式切换到STOP模式前,务必先将系统时钟源切换到SIRC,然后关闭FIRC。直接关闭FIRC会导致系统立即失去时钟而崩溃。
FIRC 内部结构及配置流程 FIRC振荡器核心 48 MHz ±3% FIRC_FTRIM修调 精度提升至 ±1% FIRCDIV分频器 DIV1 / DIV2 FIRCCSR控制 EN / FIRC_EN / LOCK 至时钟树 配置流程:使能FIRC核心 → 等待LOCK位 → 配置FIRCDIV分频 → 使能FIRC_EN输出。

4.2 SIRC(慢速内部RC振荡器)

SIRC是专为低功耗模式设计的时钟源。它频率低、功耗极低,主要用于系统在STOP模式下的定时唤醒、实时时钟(RTC)计数以及看门狗(WDOG)计时。

4.2.1 频率范围与精度

参数 最小值 典型值 最大值 单位
输出频率 32 32 32 kHz
频率精度(开环) -5 — +5 %
频率精度(闭环,SIRC_FTRIM调整后) -2 — +2 %
启动时间 — 10 — µs

SIRC的标称频率为 32 kHz。其开环精度为 ±5%,通过 SIRC_FTRIM 修调后可达 ±2%。虽然精度不如外部32.768 kHz晶振(通常为±20 ppm),但对于低功耗场景下的定时唤醒和RTC日历保持,SIRC的精度已经足够。

4.2.2 配置寄存器详解

SIRC的配置寄存器与FIRC类似,位于 SCG->SIRCCSR 和 SCG->SIRCDIV。

  • SCG->SIRCCSR(控制和状态寄存器):
    • SIRCCSR[EN]:SIRC使能位。
    • SIRCCSR[SIRC_EN]:SIRC时钟输出使能位。
    • SIRCCSR[LOCK]:锁定指示位。
  • SCG->SIRCDIV(分频配置寄存器):
    • SIRCDIV[DIV1]:分频系数,用于生成低速时钟(如LPO_CLK)。
/* SIRC配置示例:使能SIRC,不分频输出 */
SCG->SIRCCSR = SCG_SIRCCSR_EN(1) | SCG_SIRCCSR_SIRC_EN(1);
while(!(SCG->SIRCCSR & SCG_SIRCCSR_LOCK_MASK)); // 等待SIRC锁定

/* 配置分频:DIV1 = 0 (不分频,32kHz) */
SCG->SIRCDIV = SCG_SIRCDIV_DIV1(0);

4.2.3 功耗特性

SIRC是S32K3中功耗最低的内部时钟源。其典型运行功耗仅为 200 nA 左右。这使得SIRC成为低功耗待机场景下的理想选择。在STOP模式下,系统时钟切换到SIRC后,可以关闭FIRC和PLL,从而实现微安级的整体功耗。

关键限制: SIRC不能作为系统在RUN模式下的主时钟源。它无法驱动高速外设(如FlexCAN、FlexIO)和内核。试图在RUN模式下使用SIRC作为系统时钟,会导致系统性能严重下降甚至功能异常。
FIRC 与 SIRC 功耗与频率对比 FIRC 48 MHz / 1.5 mA SIRC 32 kHz / 200 nA 高 低 功耗 / 频率 FIRC提供高性能但功耗高;SIRC功耗极低但频率低,适合待机场景。

4.3 FIRC与SIRC的选型权衡

在实际项目中,开发者需要根据当前系统状态动态切换时钟源。下表总结了选型的关键考量因素:

考量维度 FIRC SIRC
适用模式 RUN模式、HSRUN模式 STOP模式、VLPS模式
主要用途 系统主时钟、外设时钟 定时唤醒、RTC、WDOG
频率 48 MHz 32 kHz
精度(修调后) ±1% ±2%
典型功耗 1.5 mA 200 nA
启动时间 4.5 µs 10 µs
功耗平衡策略: 在系统空闲时,执行以下步骤以实现最佳功耗:
1. 将系统时钟源从FIRC切换到SIRC。
2. 关闭FIRC(清除FIRCCSR[EN]位)。
3. 进入STOP模式。
4. 当唤醒事件发生时,SIRC首先启动,然后快速使能FIRC,再将系统时钟切回FIRC。