目录

1、简介

2、时钟树

2.1、时钟源

2.2、时钟模式

2.3、各模块的时钟频率

3、寄存器

3.1、SCG_VERID:Version ID Register

3.2、SCG_PARAM:Parameter Register

3.3、SCG_CSR:Clock Status Register

3.4、SCG_RCCR:Run Clock Control Register

3.5、SCG_VCCR:VLPR Clock Control Register

3.6、SCG_HCCR:HSRUN Clock Control Register

3.7、SCG_CLKOUTCNFG:SCG CLKOUT Configuration Register

3.8、SCG_SOSCCSR:System OSC Control Status Register

3.9、SCG_SOSCDIV:System OSC Divide Register

3.10、SCG_SOSCCFG:System Oscillator Configuration Register

3.11、SCG_SIRCCSR:Slow IRC Control Status Register

3.12、SCG_SIRCDIV: Slow IRC Divide Register

3.13、SCG_SIRCCFG: Slow IRC Configuration Register

4、时钟代码配置

4.1、SOSC时钟源配置

4.2、SPLL高速时钟配置

4.3、运行时钟配置


博客只是用于记录自己使用过的东西,将自己的感想和使用方法记录,过程可能会出现很多纰漏以及理解的不到位,希望可以和大家交流

1、简介

开发板S32K144+S32DS+JLINK

2、时钟树

其中可以看到

2.1、时钟源

Fast IRC(内部高速时钟源)

48 MHz

Slow IRC(内部低速时钟源)

可选2 - 8 MHz

LPO(内部低功耗时钟源)

128kHz

SOSC(外部时钟源)

8MHz

2.2、时钟模式

HSRUN模式下等待CORE_CLK和SYS_CLK的时钟频率最高支持112MHz

RUN模式下的时钟频率最高支持80MHz,但是不能小于BUS_CLK时钟频率

BUS_CLK频率最高支持56MHz和HSRUN模式下最高支持48MHz

FLASH——CLK频率最高支持28MHz和HSRUN模式下26.67MHz或更小

如参考手册的时钟模式选项,仅仅给出几个常用的:

总结了S32K14x/S32K11x最大频率和示例,各内部时钟配置:

2.3、各模块的时钟频率

LPUART

BUS_CLK

LPSPI

BUS_CLK

LPI2C

BUS_CLK

FlexIO

BUS_CLK

LPTMR

BUS_CLK

LPIT

BUS_CLK

RTC

BUS_CLK

WDOG

BUS_CLK

EWM

BUS_CLK

PMC

BUS_CLK

SIM

BUS_CLK

RCM

BUS_CLK

CRC

BUS_CLK

PORT

BUS_CLK

TRGMUX

BUS_CLK

DMAMUX

BUS_CLK

CMU

BUS_CLK

ADC

BUS_CLK

CMP

BUS_CLK

SAI

BUS_CLK

QuadSPI

BUS_CLK/
SYS_CLK

FlexCAN

SYS_CLK

PDB

SYS_CLK

FlexTimer

SYS_CLK

GPIO

SYS_CLK

DMA

SYS_CLK

MPU

SYS_CLK

EIM

SYS_CLK

ERM

SYS_CLK

MSCM

SYS_CLK

System RAM

SYS_CLK

ENET

SYS_CLK

FTFC

FLASH_CLK

3、寄存器

寄存器有很多个保留位,这些保留位默认为0且只读,如果写入将会导致错误

3.1、SCG_VERID:Version ID Register

SCG的版本号

3.2、SCG_PARAM:Parameter Register

参数寄存器,其中32位的定义如下,其他的为保留位

Field

Name

Description

31-27

DIVPRES

指示现在的SCG分频器使用状态

DIVPRES[27]=1 DIVSLOW 正在被使用

DIVPRES[28]=1 DIVBUS 正在被使用

DIVPRES[31]=1 DIVCORE 正在被使用

7-0

CLKPRES

指示当前状态下哪个时钟正在被当做 SCG 时钟源

CLKPRES[0] Reserved

CLKPRES[1]=1 System OSC (SOSC) 正在被使用

CLKPRES[2]=1 Slow IRC (SIRC) 正在被使用

CLKPRES[3]=1 Fast IRC (FIRC) 正在被使用

CLKPRES[6]=1 System PLL (SPLL) 正在被使用

3.3、SCG_CSR:Clock Status Register

返回当前的系统时钟源和系统时钟分频器配置,镜像SCG_RCCR,SCG_VCCR,SCG_HCCR三个时钟控制器之一的配置

Field

Name

Description

27-24

SCS

返回当前配置的系统时钟发生器来源

0001 System OSC (SOSC_CLK)

0010 Slow IRC (SIRC_CLK)

0011 Fast IRC (FIRC_CLK)

0110 System PLL (SPLL_CLK)

其余的值无效

19-16

DIVCORE

指示现在的核心时钟分频比率

* 若 SPLL 被选做时钟源,则最大比率是 4

分频比率 = DIVCORE+1

7-4

DIVBUS

返回现在的总线(BUS)时钟分频比率
分频比率 = DIVBUS+1

3-0

DIVSLOW

返回现在的慢速时钟分频比率
分频比率 = DIVSLOW+1

3.4、SCG_RCCR:Run Clock Control Register

寄存器给核心,平台,外围,总线控制系统时钟源和系统时钟分频器,只在 Run 模式下起作用,这个寄存器写入的时候只能一次写入 32 位。

在 Run 模式下选择一个不同的时钟源需要时钟源在系统时钟调整到时钟源前就要开启并且保证有效

如果系统时钟分频器比率改变的同时选择了一个不同的时钟模式,则新的分频器比率只有在新的时钟源有效后才会发生改变。

3.5、SCG_VCCR:VLPR Clock Control Register

SCG_VCCR 控制的是 VLPR 模式下的,而不是 Run 模式下的,其他的寄存器地图什么的和 SCG_RCCR 一样。写入的时候只能一次写入 32 位。

3.6、SCG_HCCR:HSRUN Clock Control Register

HSRUN 模式下的时钟控制寄存器

3.7、SCG_CLKOUTCNFG:SCG CLKOUT Configuration Register

控制哪一个 SCG 时钟源被输出到 CLKOUT 管脚

Field

Name

Description

27-24

SCS

选择 SCG 系统时钟作为 CLKOUT

0001 System OSC (SOSC_CLK)

0010 Slow IRC (SIRC_CLK)

0011 Fast IRC (FIRC_CLK)

0110 System PLL (SPLL_CLK)

其余的值无效

3.8、SCG_SOSCCSR:System OSC Control Status Register

寄存器控制 SCG 模块中的 SOSC 工作状态

Field

Name

Description

26

SOSCERR

System OSC Clock Error

此位只能被单片机的上电复位重置,但是软件也可以通过向此位写入 1 清零

0 SOSC 检测器被关闭或者没有检测到错误

1 SOSC 检测器被开启并且检测到一个错误

25

SOSCSEL

System OSC Selected 此位不可写入
0 SOSC 不是系统时钟源
1 SOSC 是系统时钟源

24

SOSCVLD

System OSC Valid 此位不可写入
0 SOSC 无效或者没有启用
1 SOSC 有效并且输出有效

23

LK

Lock Register
此位可以在任何时候清零或者置 1
0 CSR 寄存器可以写入
1 CSR 寄存器不可以写入

17

SOSCCMRE

System OSC Clock Monitor Reset Enable
SOSC 监测器中断/重置开关
0 当错误被检测,监测器产生中断
1 当错误被检测,监测器产生重启

16

SOSCCM

System OSC Clock Monitor
SOSC 监测器开关
0 SOSC 监测器关
1 SOSC 监测器开

0

SOSCEN

System OSC Enable
SOSC 使能
0 SOSC 关
1 SOSC 开

3.9、SCG_SOSCDIV:System OSC Divide Register

寄存器控制两个时钟输出,既可以用作外围器件的功能时钟,也可以作为时钟模块使用,每一路输出都有分频器提供分频,

应该在 SOSC 被关闭的情况下更改该寄存器的值以避免输出的值出现错误。

Field

Name

Description

10-8

SOSCDIV2

System OSC Clock Divide 2
设置 SOSC 第二路输出的分频比率
分频比率 = 2^(SOSCDIV2-1)
0 时关闭时钟输出

2-1

SOSCDIV1

System OSC Clock Divide 1
设置 SOSC 第一路输出的分频比率
分频比率 = 2^(SOSCDIV1-1)
0 时关闭时钟输出

3.10、SCG_SOSCCFG:System Oscillator Configuration Register

寄存器控制振荡器的工作状态,在 SOSC 运行的时候无法被写入,强行写入会被忽略并不会报赋值错误。

Field

Name

Description

5-4

RANGE

System OSC Range Select
选择 SOSC 外接晶振的频率范围
10 中频 (4 MHz to 8MHz)
11 高频 (8 MHz to 40 MHz)

3

HGO

High Gain Oscillator Select
高增益振荡器选择
0 低增益运行振荡器
1 高增益运行振荡器

2

EREFS

External Reference Select
外部参考时钟选择
0 外部参考时钟
1 SOSC 内部晶体振荡器

3.11、SCG_SIRCCSR:Slow IRC Control Status Register

Field

Name

Description

25

SIRCSEL

Slow IRC Selected
选择 SIRC 是否作为系统时钟源
0 Slow IRC 是系统时钟源
1 Slow IRC 不是系统时钟源

24

SIRCVLD

Slow IRC Valid
Slow IRC 有效位
0 Slow IRC 无效或者没有启动
1 Slow IRC 启动并且有效

2

SIRCLPEN

Slow IRC Low Power Enable
Slow IRC 低功率模式开关
0 Slow IRC 在 VLP 模式不启动下
1 Slow IRC 在 VLP 模式下启动

1

SIRCSTEN

Slow IRC Stop Enable
Slow IRC 停止模式开关
0 Slow IRC 在 Stop modes 下不工作
1 Slow IRC 在 Stop modes 下工作

0

SIRCEN

Slow IRC Enable
Slow IRC 使能
0 Slow IRC 关闭
1 Slow IRC 开启

3.12、SCG_SIRCDIV: Slow IRC Divide Register

寄存器控制 SIRC 的分频器工作状态,请确保该寄存器在改变前,SIRC 是关闭着的,以防止出现错误

Field

Name

Description

10-8

SIRCDIV2

Slow IRC Clock Divide 2
提供给需要异步时钟的模块的分频器 2
分频比率 = 2^(SIRCDIV2-1)
0 时关闭时钟输出

2-1

SIRCDIV1

Slow IRC Clock Divide 1
提供给需要异步时钟的模块的分频器 1
分频比率 = 2^(SIRCDIV1-1)
0 时关闭时钟输出

3.13、SCG_SIRCCFG: Slow IRC Configuration Register

Field

Name

Description

0

RANGE

Frequency Range
频率范围
0 Slow IRC low range clock (2 MHz)
1 Slow IRC high range clock (8 MHz)

剩余的 FIRC 跟这个差不多,但是有一部分细微的变化,到用的时候请查询对应的用户手册。

4、时钟代码配置

4.1、SOSC时钟源配置

void SOSC_init_8MHz(void)
{/*!* SOSC Initialization (8 MHz):* ===================================================*/SCG->SOSCDIV = SCG_SOSCDIV_SOSCDIV1(1)|SCG_SOSCDIV_SOSCDIV2(1);     /* SOSCDIV1 & SOSCDIV2 =1: divide by 1         */SCG->SOSCCFG  =   SCG_SOSCCFG_RANGE(2)|       /* Range=2: Medium freq (SOSC betw 1MHz-8MHz)  */SCG_SOSCCFG_EREFS_MASK;       /* HGO=0:   Config xtal osc for low power      *//* EREFS=1: Input is external XTAL           */while(SCG->SOSCCSR & SCG_SOSCCSR_LK_MASK);     /* Ensure SOSCCSR unlocked                          */SCG->SOSCCSR = SCG_SOSCCSR_SOSCEN_MASK;   /* LK=0:          SOSCCSR can be written               *//* SOSCCMRE=0:    OSC CLK monitor IRQ if enabled         *//* SOSCCM=0:      OSC CLK monitor disabled           *//* SOSCERCLKEN=0: Sys OSC 3V ERCLK output clk disabled *//* SOSCLPEN=0:    Sys OSC disabled in VLP modes        *//* SOSCSTEN=0:    Sys OSC disabled in Stop modes         *//* SOSCEN=1:      Enable oscillator                  */while(!(SCG->SOSCCSR & SCG_SOSCCSR_SOSCVLD_MASK)); /* Wait for sys OSC clk valid */
}

4.2、SPLL高速时钟配置

void SPLL_init_160MHz(void)
{/*!* SPLL Initialization (160 MHz):* ===================================================*/while(SCG->SPLLCSR & SCG_SPLLCSR_LK_MASK);     /* Ensure SPLLCSR unlocked              */SCG->SPLLCSR &= ~SCG_SPLLCSR_SPLLEN_MASK;     /* SPLLEN=0: SPLL is disabled (default)    */SCG->SPLLDIV |=   SCG_SPLLDIV_SPLLDIV1(2)|/* SPLLDIV1 divide by 2 */SCG_SPLLDIV_SPLLDIV2(3);      /* SPLLDIV2 divide by 4 */SCG->SPLLCFG = SCG_SPLLCFG_MULT(24);      /* PREDIV=0: Divide SOSC_CLK by 0+1=1        *//* MULT=24:  Multiply sys pll by 4+24=40   *//* SPLL_CLK = 8MHz / 1 * 40 / 2 = 160 MHz   */while(SCG->SPLLCSR & SCG_SPLLCSR_LK_MASK);     /* Ensure SPLLCSR unlocked                      */SCG->SPLLCSR |= SCG_SPLLCSR_SPLLEN_MASK;  /* LK=0:        SPLLCSR can be written             *//* SPLLCMRE=0:  SPLL CLK monitor IRQ if enabled  *//* SPLLCM=0:    SPLL CLK monitor disabled            *//* SPLLSTEN=0:  SPLL disabled in Stop modes      *//* SPLLEN=1:    Enable SPLL                      */while(!(SCG->SPLLCSR & SCG_SPLLCSR_SPLLVLD_MASK)); /* Wait for SPLL valid */
}

4.3、运行时钟配置

void NormalRUNmode_80MHz (void)
{
/*! Slow IRC is enabled with high range (8 MHz) in reset.*  Enable SIRCDIV2_CLK and SIRCDIV1_CLK, divide by 1 = 8MHz*  asynchronous clock source.* ==========================================
*/SCG->SIRCDIV = SCG_SIRCDIV_SIRCDIV1(1)| SCG_SIRCDIV_SIRCDIV2(1);/*!*  Change to normal RUN mode with 8MHz SOSC, 80 MHz PLL:*  ====================================================*/SCG->RCCR=SCG_RCCR_SCS(6)      /* Select PLL as clock source                              */|SCG_RCCR_DIVCORE(0b01)      /* DIVCORE=1, div. by 2: Core clock = 160/2 MHz = 80 MHz      */|SCG_RCCR_DIVBUS(0b01)       /* DIVBUS=1, div. by 2: bus clock = 40 MHz                     */|SCG_RCCR_DIVSLOW(0b10);     /* DIVSLOW=2, div. by 2: SCG slow, flash clock= 26 2/3 MHz */while (((SCG->CSR & SCG_CSR_SCS_MASK) >> SCG_CSR_SCS_SHIFT ) != 6) {}   /* Wait for sys clk src = SPLL */
}

S32K144(2)时钟配置相关推荐

  1. S32K144之时钟配置及时钟查看

    S32K144之时钟配置及时钟查看 以S32K144为配置测试 一.时钟树介绍 输入部分:S32K144有四个时钟源,如上图时钟树已圈出,分别是: 时钟源 允许频率 Fast IRC(内部高速时钟源) ...

  2. s32k144 isystem linux,S32K144之时钟配置

    一般来说,时钟精度.稳定性取决于所采用的时钟源,就MCU S32K来说如内部振荡器SIRC,FIRC,128KLPO,外部晶振等,跟所使用的外设(FTM, LPIT,LPT,RTC等)和哪一路输出时钟 ...

  3. S32K144之时钟配置

    一般来说,时钟精度.稳定性取决于所采用的时钟源,就MCU S32K来说如内部振荡器SIRC,FIRC,128KLPO,外部晶振等,跟所使用的外设(FTM, LPIT,LPT,RTC等)和哪一路输出时钟 ...

  4. S32K144之时钟

    一,时钟树. 1,时钟源. 参考:  S32K144之时钟配置及时钟查看 - 爱码网 (likecs.com) 时钟源有4种,如上图圈出来的. 2,时钟介绍 1.内核时钟(CORE_CLK) 2.总线 ...

  5. S32K144:1.时钟配置

    1.按照如下参数进行时钟配置 2.配置SOSC时钟 1)使用SCG_SOSCDIV寄存器配置SOSC_DIV1.DIV2时钟频率: 2)使用SCG_SOSCCFG寄存器配置选择振荡器为参考时钟.振荡器 ...

  6. STM32的时钟配置随笔

    以前使用STM32都是使用库函数开发,最近心血来潮想要使用寄存器来试试手感,于是乎便在工作之余研究了一下STM32F4的时钟配置,在此将经历过程写下来作为锻炼,同时也供和我一样的新手参考,如有错误或者 ...

  7. 华大单片机HC32L136J8TA读取DS18B20温度(源码+时钟配置)

    免费的C语言和linuxPDF文档:传送门 有一点C语言基础和华大单片机开发经验,应该就能看得懂就不多介绍了,有疑问可以留言,看到就回了; 关于协议具体解析:传送门@不脱发的程序猿 注(2021-05 ...

  8. STM32的时钟配置——时钟树解析

    此文章由于讲得较详细因此篇幅较长,请带着一点耐心去读,相信会有收获! 目录 STM32为什么要有复杂的时钟系统 详解STM32时钟系统 STM32有几个时钟源 关于时钟输出 软件配置时钟 STM32为 ...

  9. NXP(I.MX6uLL)DDR3实验——DDR3重要时间参数、时钟配置与原理图简析

    目录 DDR3 内存时间参数 传输速率 tRCD 参数 CL 参数 AL 参数 tRC 参数 tRAS 参数 I.MX6U MMDC内存控制器简介 MMDC内存控制器简介 MMDC内存控制器信号引脚 ...

最新文章

  1. 服务器网页500错误修复工具,HTTP500错误是什么?如何修复
  2. 考研结束了,使用SpringBoot开发一个考研管理系统
  3. jenkins调整jdk版本不生效的解决办法
  4. JS:js中的复制对象值问题——Object.assign()
  5. linux网络编程之inet_addr和inet_ntoa使用总结
  6. php bind_param,php – 在mysqli bind_param中绑定动态变量
  7. 大数据之-Hadoop之HDFS_HDFS的内容介绍---大数据之hadoop工作笔记0047
  8. mysql配置所有ip连接_Mysql查看用户连接数配置及每个IP的请求情况
  9. MyBatis出现红色错误,已解决(Establishing SSL connection without)
  10. 自动化测试——unittest编写接口测试用例
  11. 8.最大滑动窗口问题
  12. 百度下拉关键词刷?具体步骤及方法
  13. 好用的项目管理工具|选择Tracup的N种理由
  14. subplots用法详解
  15. (附源码)springboot在线学习网站 毕业设计 751841
  16. uni-app+uview 购物车模块组件(笔记)
  17. springBoot+mybatisPlus项目骨架
  18. NJU:C++虚函数
  19. opencv保存图片小bug
  20. 基于EKF的锂离子电池SOC估计——Simulink建模仿真

热门文章

  1. Java使用465端口发送邮件(绕过25端口限制)
  2. Exchange Server 2013 共享邮箱
  3. 视觉显著性python_OpenCV中的显著性检测(Saliency Detection)
  4. Python基础之 3. 容器:字符串、列表、元组、字典
  5. 微信公众号基本设置服务器设置教程,最新最全的微信公众号开发者模式配置
  6. 分数化小数计算机在线,循环小数化分数计算器
  7. echarts 词云图使用 + vue
  8. 谷歌研究利用AI合成图片,使静态图片动起来
  9. 用 Python 制作家用防盗工具
  10. python账号_基于Python打造账号共享浏览器功能