S32K1xx 时钟介绍

关键字 :S32K1xx时钟CMU

一、 概述

本文将详细介绍 NXP S32K1xx 系列 MCU 的时钟模块的相关知识,包括对 S32K1xx的时钟架构的介绍、各模式下的时钟配置要求以及对时钟监控模块的介绍。

二、 S32k1xx时钟架构

如下图所示为 S32K1xx MCU 的时钟架构图,从图中我们可以看到每个时钟的路径,包括时钟源的选择以及时钟分频的设置,可以看到 S32K1xx 内部的时钟
源包括 FIRC、SIRC 和 LPO128KHz,外部时钟源包括 SOSC 和 RTC。需要注意的是,图中黄线部分是 S32K14xW 芯片仅有的功能,蓝线部分为 S32K11x 仅有的功能。

                                                                            图 2.1  S32K1xx 时钟架构图

关于 S32K1xx 各个时钟的定义如下表所示

时钟

描述

PREDIV_SYS_CLK

HSRUN 80MHz 模式下 QSPI 存储器时钟

CORE_CLK

Arm 核的时钟

SYS_CLK

系统时钟,为交叉开关、NVIC、Flash 控制器、FTM、PDB 等模块的时钟

BUS_CLK

芯片外设的时钟

FLASH_CLK

内部 Flash 的时钟

SPLL_CLK

PLL 的输出时钟

SIRC_CLK

内部低速时钟,由 SCG 模块生成

FIRC_CLK

内部高速时钟,由 SCG 模块生成

SOSC_CLK

外部晶振时钟

RTC_CLKOUT

RTC 时钟输入,连接到外部引脚

LPO32K_CLK

RTC 的时钟源

LPO128K_CLK

PMC 模块生成的低功耗振荡器时钟

SCG_CLKOUT

SCG 输出时钟,可以由 SOSC_CLK、SIRC_CLK、FIRC_CLK、SPLL_CLK、SCG_SLOW_CLK 中的其中一个生成。

LPO_CLK

LPO 时钟,可以是 LPO128K、LPO32K、LPO1K 中的其中一个生成

CLKOUT

由八个内部时钟中的一个生成,连接到外部引脚

VCO_CLK

VCO 输出时钟,其频率为 SPLL_CLK x 2

SPLLDIV1_CLK

由 SPLL_CLK 分频生成,RUN 模式下配置为 80 MHz 或以下,HSRUN 模式下配置为 112 MHz 或以下

SPLLDIV2_CLK

由 SPLL_CLK 分频生成,RUN 模式下配置为 40 MHz 或以下,HSRUN 模式下配置为 56 MHz 或以下

FIRCDIV1_CLK

由 FIRC_CLK 分频生成,在 RUN/HSRUN 模式下应配置成 48 MHz 或以下

FIRCDIV2_CLK

同上

SIRCDIV1_CLK

由 SIRC_CLK 分频生成,在 RUN/HSRUN 模式下应配置成 8 MHz 或以下,在 VLPR/VLPS 模式下配置成 4MHz 或以下

SIRCDIV2_CLK

同上

SOSCDIV1_CLK

由 SOSC_CLK 分频生成,在 RUN/HSRUN 模式下应配置成 40 MHz 或以下

SOSCDIV2_CLK

同上

                                                            表 2.1 S32K1xx 时钟定义

三、各模式下的时钟配置

S32K1xx 时钟相关的模块主要有 SCG(System Clock Generator) 和 PCC (Peripheral Clock Controller)两个模块,SCG 模块主要用于提供 MCU 的
系统时钟,SCG 模块包含了一个系统锁相环 SPLL ,一个内部低速时钟 SIRC,一个内部高速时钟 FIRC 和系统振荡器时钟 SOSC。SPLL 的时钟源可以是
SOSC 或者 FIRC。PCC 模块用于控制外设时钟的开关,如果外设还有功能时钟,PCC 模块还提供时钟源选择和分频的选项。可以通过 PCC 寄存器的 PCS
域和 PCD 域进行配置。

SCG 模块的寄存器描述如表 3.1所示。

SCG 寄存器

功能描述

SCG_VERID

SCG 的版本号寄存器,只读

SCG_PARAM

SCG 参数寄存器,用来读取 SCG 的系统时钟分频和时钟源是否存在

SCG_CSR

通过该寄存器读取当前的系统时钟源,内核时钟分频和总线时钟分频

SCG_RCCR

该寄存器控制 RUN 模式下的时钟源选择以及内核时钟分频和总线时钟分频

SCG_VCCR

该寄存器控制 VLPR 模式下的时钟源选择以及内核时钟分频和总线时钟分频

SCG_HCCR

该寄存器控制 HSRUN 模式下的时钟源选择以及内核时钟分频和总线时钟分频

SCG_CLKOUTCNFG

该寄存器选择那个时钟源输出到 CLKOUT 引脚

SCG_SOSCCSR

系统振荡器 SOSC 的控制状态寄存器

SCG_SOSCDIV

系统振荡器 SOSC 的分频寄存器,可以设置两路分频时钟

SCG_SOSCCFG

系统振荡器 SOSC 的配置寄存器,可以选择 SOSC 的频率范围、参考时钟等

SCG_SIRCCSR

内部低速时钟 SIRC 的控制状态寄存器

SCG_SIRCDIV

内部低速时钟 SIRC 分频寄存器,可以设置两路分频时钟

SCG_SIRCCFG

内部低速时钟 SIRC的配置寄存器,可以选择 SIRC的频率范围

SCG_FIRCCSR

内部高速时钟 FIRC 的控制状态寄存器

SCG_FIRCDIV

内部高速时钟 FIRC的分频寄存器,可以设置两路分频时钟

SCG_FIRCCFG

内部高速时钟 FIRC的配置寄存器,可以选择 FIRC 的频率范围

SCG_SPLLCSR

系统锁相环 SPLL 的控制状态寄存器

SCG_SPLLDIV

系统锁相环 SPLL 的分频寄存器,可以设置两路分频时钟

SCG_SPLLCFG

系统锁相环 SPLL 的配置寄存器,可以设置 SPLL 的时钟源,分频系数和倍频系数

                                                                表 3.1 SCG 寄存器描述

关于时钟的设置需要满足下面几点要求:

  • 在 RUN 模式下 CORE_CLK 和 SYS_CLK 的频率应该设置为 80 MHz 或以下,在 HSRUN 模式下应设置为 112 MHz 或以下。(不可低于 BUS_CLK 的频率)
  • 在 RUN 模式下 BUS_CLK 的频率应设置为 48 MHz 或以下,在 HSRUN 模式下应设置为 56 MHz 或以下。
  • 在 RUN 模式下, FLASH_CLK 的频率应设置为 67 MHz 或以下,在 HSRUN 模式下应设置为 28 MHz 或以下,并且是 CORE_CLK 的整数分频(最大为 8)。

下面列举了在 Normal RUN、Slow RUN、HSRUN、VLPR 等 4 种模式下时钟配置的例子。

  • 在 Normal RUN 模式下,SCG 寄存器配置及频率如下表所示

时钟

频率

寄存器配置

 

S32K14x 和 S32K11x

S32K14xW

SCG_RCCR[SCS] = 0110b

SCG_RCCR[DIVCORE] = 0001b

SCG_RCCR[DIVBUS] = 0001b

SCG_RCCR[DIVSLOW] = 0010b

 

CORE_CLK

80MHz

80 MHz

SYS_CLK

80MHz

80 MHz

BUS_CLK

40MHz

40 MHz

FALSH_CLK

26.67 MHz

20 MHz

                                    表 3.2 Normal RUN 模式 SCG 寄存器配置



  • 在 Slow RUN 模式下 SCG 寄存器的配置及频率如下(时钟源选择 FIRC):

时钟

频率

寄存器配置

 

S32K14x 和 S32K11x

S32K14xW

SCG_RCCR[SCS] = 0011b

SCG_RCCR[DIVCORE] = 0000b

SCG_RCCR[DIVBUS] = 0000b

SCG_RCCR[DIVSLOW] = 0001b

 

CORE_CLK

48 MHz

48 MHz

SYS_CLK

48 MHz

48 MHz

BUS_CLK

48 MHz

48 MHz

FALSH_CLK

24 MHz

16 MHz

                                     表 3.3 Slow RUN 模式 SCG 寄存器配置

  • 在 112MHz 的HSRUN 模式下 SCG 寄存器的配置及频率如下(仅 S32K14x 支持):

时钟

频率

寄存器配置

CORE_CLK

112 MHz

SCG_HCCR[SCS] = 0110b

SCG_HCCR[DIVCORE] = 0000b

SCG_HCCR[DIVBUS] = 0001b

SCG_HCCR[DIVSLOW] = 0011b

 

SYS_CLK

112 MHz

BUS_CLK

56 MHz

FALSH_CLK

28 MHz

                                    表 3.4 HSRUN 模式 SCG 寄存器配置

  • 在 VLPR 模式下 SCG 寄存器的配置及频率如下

时钟

频率

寄存器配置

 

S32K14x 和 S32K11x

S32K14xW

SCG_VCCR[SCS] = 0010b

SCG_VCCR[DIVCORE] = 0001b

SCG_VCCR[DIVBUS] = 0000b

SCG_VCCR[DIVSLOW] = 0011b

 

CORE_CLK

4 MHz

1 MHz

SYS_CLK

4 MHz

1 MHz

BUS_CLK

4 MHz

1 MHz

FALSH_CLK

1 MHz

0.25 MHz

                                         表 3.5 VLPR 模式 SCG 寄存器配置

四、时钟监控模块

时钟监控模块(CMU)仅支持 S32K11x 系列芯片,CMU 模块有两个实例 CMU0 和 CMU1,用来监测 FIRC 时钟,默认情况下 CMU 模块是关闭的,如果要使用需要进行相关配置。CMU 的两个实例分别用于生成复位和中断,当检测到时钟频率不在设置的阈值区间时会产生复位,而 CMU1 则是当检测到的时钟频率不在设置的阈值区间时会产生中断,CMU 模块在芯片内部的连接示意图如下所示。

                                                                    图 4.1 CMU 模块连接图

 

CMU 模块的检测原理是在设置的监控周期(N 个参考时钟,可以通过 RCCR 寄存器设置 )内对所监控的时钟周期数进行计数,在监控周期结束后将该计数值和用户设定的阈值进行比较(该阈值通过寄存器 HTCR 和 LTCR 进行配置),当超过设定阈值后状态寄存器 SR 对于的状态位会置位,如果有设置中断使能,则会产生相应的中断。

                                                     图 4.2 CMU 模块工作原理示意

CMU 模块的寄存器定义如下表所示。

寄存器

功能描述

GCR

该寄存器用于使能 CMU_FC 模块,当 GCR[FCE] = 1 时使能 CMU_FC 模块

RCCR

该寄存器用于设置频率检测窗口的大小

HTCR

该寄存器用于设置监控时钟计数器的高阈值

LTCR

该寄存器用于设置监控时钟计数器的低阈值

SR

该寄存器为状态寄存器,通过该寄存器可以查看 CMU 的运行状态,是否出现时钟频率超出阈值范围的事件

IER

该寄存器为中断使能寄存器,可以配置是否使能时钟异常中断

                                                         表 4.1 CMU 模块寄存器定义

关于 CMU 模块的推荐配置流程如下:

  • 设定 RCCR[REF_CNT] 域来配置时钟检测的窗口时间
  • 设定 LTCR[LFREF] 和 HTCR[HFREF] 域来配置监控时钟的高低阈值
  • 如果需要的话设定 IER 寄存器来使能中断
  • 完成以上步骤后设定 GCR[FCE] = 1 来启动时钟监控的功能,当时钟监控使能后,RCCR,LTCR[LFREF] 和 HTCR[HFREF] 都不允许进行写入操作,否则会出现总线传输错误
  • 如果要修改 RCCR 、LTCR[LFREF] 或 HTCR[HFREF] 的配置,则需要在 SR[RS] = 1 时设置 GCR[FCE] = 0。

五、参考资料

  1. NXP ,《S32K1XXRM》https://www.nxp.com.cn/webapp/sps/download/preDownload.jsp?render=true
  2. NXP ,《S32K-DS》, https://www.nxp.com.cn/docs/en/data-sheet/S32K-DS.pdf

★博文内容均由个人提供,与平台无关,如有违法或侵权,请与网站管理员联系。

★文明上网,请理性发言。内容一周内被举报5次,发文人进小黑屋喔~

评论