S32K144(2)时钟配置
目录
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/ |
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 分频比率 = |
7-4 |
DIVBUS |
返回现在的总线(BUS)时钟分频比率 |
3-0 |
DIVSLOW |
返回现在的慢速时钟分频比率 |
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 此位不可写入 |
24 |
SOSCVLD |
System OSC Valid 此位不可写入 |
23 |
LK |
Lock Register |
17 |
SOSCCMRE |
System OSC Clock Monitor Reset Enable |
16 |
SOSCCM |
System OSC Clock Monitor |
0 |
SOSCEN |
System OSC Enable |
3.9、SCG_SOSCDIV:System OSC Divide Register
寄存器控制两个时钟输出,既可以用作外围器件的功能时钟,也可以作为时钟模块使用,每一路输出都有分频器提供分频,
应该在 SOSC 被关闭的情况下更改该寄存器的值以避免输出的值出现错误。
Field |
Name |
Description |
10-8 |
SOSCDIV2 |
System OSC Clock Divide 2 |
2-1 |
SOSCDIV1 |
System OSC Clock Divide 1 |
3.10、SCG_SOSCCFG:System Oscillator Configuration Register
寄存器控制振荡器的工作状态,在 SOSC 运行的时候无法被写入,强行写入会被忽略并不会报赋值错误。
Field |
Name |
Description |
5-4 |
RANGE |
System OSC Range Select |
3 |
HGO |
High Gain Oscillator Select |
2 |
EREFS |
External Reference Select |
3.11、SCG_SIRCCSR:Slow IRC Control Status Register
Field |
Name |
Description |
25 |
SIRCSEL |
Slow IRC Selected |
24 |
SIRCVLD |
Slow IRC Valid |
2 |
SIRCLPEN |
Slow IRC Low Power Enable |
1 |
SIRCSTEN |
Slow IRC Stop Enable |
0 |
SIRCEN |
Slow IRC Enable |
3.12、SCG_SIRCDIV: Slow IRC Divide Register
寄存器控制 SIRC 的分频器工作状态,请确保该寄存器在改变前,SIRC 是关闭着的,以防止出现错误
Field |
Name |
Description |
10-8 |
SIRCDIV2 |
Slow IRC Clock Divide 2 |
2-1 |
SIRCDIV1 |
Slow IRC Clock Divide 1 |
3.13、SCG_SIRCCFG: Slow IRC Configuration Register
Field |
Name |
Description |
0 |
RANGE |
Frequency Range |
剩余的 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)时钟配置相关推荐
- S32K144之时钟配置及时钟查看
S32K144之时钟配置及时钟查看 以S32K144为配置测试 一.时钟树介绍 输入部分:S32K144有四个时钟源,如上图时钟树已圈出,分别是: 时钟源 允许频率 Fast IRC(内部高速时钟源) ...
- s32k144 isystem linux,S32K144之时钟配置
一般来说,时钟精度.稳定性取决于所采用的时钟源,就MCU S32K来说如内部振荡器SIRC,FIRC,128KLPO,外部晶振等,跟所使用的外设(FTM, LPIT,LPT,RTC等)和哪一路输出时钟 ...
- S32K144之时钟配置
一般来说,时钟精度.稳定性取决于所采用的时钟源,就MCU S32K来说如内部振荡器SIRC,FIRC,128KLPO,外部晶振等,跟所使用的外设(FTM, LPIT,LPT,RTC等)和哪一路输出时钟 ...
- S32K144之时钟
一,时钟树. 1,时钟源. 参考: S32K144之时钟配置及时钟查看 - 爱码网 (likecs.com) 时钟源有4种,如上图圈出来的. 2,时钟介绍 1.内核时钟(CORE_CLK) 2.总线 ...
- S32K144:1.时钟配置
1.按照如下参数进行时钟配置 2.配置SOSC时钟 1)使用SCG_SOSCDIV寄存器配置SOSC_DIV1.DIV2时钟频率: 2)使用SCG_SOSCCFG寄存器配置选择振荡器为参考时钟.振荡器 ...
- STM32的时钟配置随笔
以前使用STM32都是使用库函数开发,最近心血来潮想要使用寄存器来试试手感,于是乎便在工作之余研究了一下STM32F4的时钟配置,在此将经历过程写下来作为锻炼,同时也供和我一样的新手参考,如有错误或者 ...
- 华大单片机HC32L136J8TA读取DS18B20温度(源码+时钟配置)
免费的C语言和linuxPDF文档:传送门 有一点C语言基础和华大单片机开发经验,应该就能看得懂就不多介绍了,有疑问可以留言,看到就回了; 关于协议具体解析:传送门@不脱发的程序猿 注(2021-05 ...
- STM32的时钟配置——时钟树解析
此文章由于讲得较详细因此篇幅较长,请带着一点耐心去读,相信会有收获! 目录 STM32为什么要有复杂的时钟系统 详解STM32时钟系统 STM32有几个时钟源 关于时钟输出 软件配置时钟 STM32为 ...
- NXP(I.MX6uLL)DDR3实验——DDR3重要时间参数、时钟配置与原理图简析
目录 DDR3 内存时间参数 传输速率 tRCD 参数 CL 参数 AL 参数 tRC 参数 tRAS 参数 I.MX6U MMDC内存控制器简介 MMDC内存控制器简介 MMDC内存控制器信号引脚 ...
最新文章
- 服务器网页500错误修复工具,HTTP500错误是什么?如何修复
- 考研结束了,使用SpringBoot开发一个考研管理系统
- jenkins调整jdk版本不生效的解决办法
- JS:js中的复制对象值问题——Object.assign()
- linux网络编程之inet_addr和inet_ntoa使用总结
- php bind_param,php – 在mysqli bind_param中绑定动态变量
- 大数据之-Hadoop之HDFS_HDFS的内容介绍---大数据之hadoop工作笔记0047
- mysql配置所有ip连接_Mysql查看用户连接数配置及每个IP的请求情况
- MyBatis出现红色错误,已解决(Establishing SSL connection without)
- 自动化测试——unittest编写接口测试用例
- 8.最大滑动窗口问题
- 百度下拉关键词刷?具体步骤及方法
- 好用的项目管理工具|选择Tracup的N种理由
- subplots用法详解
- (附源码)springboot在线学习网站 毕业设计 751841
- uni-app+uview 购物车模块组件(笔记)
- springBoot+mybatisPlus项目骨架
- NJU:C++虚函数
- opencv保存图片小bug
- 基于EKF的锂离子电池SOC估计——Simulink建模仿真
热门文章
- Java使用465端口发送邮件(绕过25端口限制)
- Exchange Server 2013 共享邮箱
- 视觉显著性python_OpenCV中的显著性检测(Saliency Detection)
- Python基础之 3. 容器:字符串、列表、元组、字典
- 微信公众号基本设置服务器设置教程,最新最全的微信公众号开发者模式配置
- 分数化小数计算机在线,循环小数化分数计算器
- echarts 词云图使用 + vue
- 谷歌研究利用AI合成图片,使静态图片动起来
- 用 Python 制作家用防盗工具
- python账号_基于Python打造账号共享浏览器功能