4. FIRC与SIRC配置:快速内部RC振荡器与慢速内部RC振荡器的配置寄存器、频率范围、精度与功耗特性
S32K3系列微控制器内部集成了两个关键的RC振荡器:快速内部RC振荡器(FIRC)和慢速内部RC振荡器(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以节省功耗。
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,从而实现微安级的整体功耗。
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。