当前位置: 首页 > news >正文

智芯Z20K144x MCU开发之时钟架构

这里写目录标题

  • 一、zhixin时钟架构
    • 1.时钟源
    • 2.系统时钟控制器(SCC)
    • 3.外设时钟控制器(PARCC)
  • 二、软件应用
  • 三、总结

一、zhixin时钟架构

在这里插入图片描述
可以将时钟架构分解为三个部分来理解:

  • 时钟源(OSC、FIRC、LPO)
  • 系统时钟控制器(SCC)
  • 外设时钟控制器 (PARCC)

其中SCC产生的时钟信号主要输出至PARCC进而分配至对应的外设使用;
LPO主要一般主要用于低功耗,输出智SRMC进行低功耗管理;
所有时钟信号均可输出至Port进而配置在对应的引脚上,可以通过示波器观测;

1.时钟源

三种时钟源特性对比:

时钟源名称特性
OSC(晶振)精度高(误差ppm(百万分之一)级别)、启动慢、功耗高
FIRC(内部RC振荡器)精度始中(百分之几到千分之几)、快速启动、功耗适合中
LPO(低功耗振荡器)精度相对较低、功耗较低

2.系统时钟控制器(SCC)

在这里插入图片描述
Cpu通过APB总线访问SCC寄存器进而配置系统时钟分配,SCC主要负责系统时钟相关的参数配置以及输出监控,以下为主要使用寄存器介绍:
在这里插入图片描述

SCC_PARAM:只读 记录当前MCU设计参数
SCC_CST:只读 记录当前各个分频器以及复选器参数配置
SCC_CFG:附带寄存器锁 设置各个分频器以及复选器参数
SCC_CLKOUTCFG:选择所需的时钟源输出至CLKOUT复用功能的Pin
SCC_OSCCS:附带寄存器锁 控制OSC工作模式以及状态监控

  • 可以设置OSC信号loss时是触发中断还是复位
  • 可以监控OSC信号是否ready
  • 可以设置OSC监控模式(前提FIRC必须保持有效)

SCC_OSCCFG:OSC参数配置

  • 选择什么类型外部时钟源(晶振/其他方波源)
  • 高频模式配置(高于24M)
  • 驱动电流配置(不同频率选择对应配置)

SCC_FIRCCS:控制FIRC工作模式以及状态监控,功能与SCC_OSCCS类似不再赘述
SCC_SPLLCS:控制SPLL工作模式以及状态监控,功能与SCC_OSCCS类似不再赘述
SCC_SPLLCFG1:SPLL锁相环参数配置,可以倍频出更高频率的时钟
SCC_SPLLCFG2:SPLL锁相环参数配置,可以倍频出更高频率的时钟
SPLL锁相环倍频计算方法如下:
在这里插入图片描述
默认复位状态下System clock是由FIRC驱动的,后续软件配置选择对应的时钟源后进行切换:
在这里插入图片描述

3.外设时钟控制器(PARCC)

在这里插入图片描述
PARCC(Peripheral Access & Reset & Clock Controller)是用于访问外设&复位&时钟分配功能的模块,主要功能如下:

  • 外设访问保护
  • 外设复位
  • 外设时钟分配(clkmux用于选择所需的时钟源,CLKDIV用于外设时钟分频)

由PARCC架构图可知,PARCC主要由3个部分组成:外设时钟配置模块、APB外设访问以及控制模块、外设低功耗控制模块;由PARCC模块寄存器为每个外设都开辟了独立的寄存器,功能基本相同,因此以下仅以一个PARCC寄存器举例介绍:
在这里插入图片描述

二、软件应用

下面展示一些 内联代码片

//FIRC时钟源使能控制
void CLK_FIRC64MEnable(ControlState_t stopModeEn);
void CLK_FIRC64MDisable(void);
//获取system clk使用的时钟源是OSC还是FIRC
CLK_System_t CLK_GetSysClkSrc(void);
//OSC时钟使能控制
ResultStatus_t CLK_OSC40MEnable(uint32_t freq, ControlState_t stopModeEn, CLK_OscMode_t mode);
ResultStatus_t CLK_OSC40MEnable2(CLK_OscFreqMode_t freqMode, ControlState_t stopModeEn, CLK_OscMode_t mode);       
void CLK_OSC40MDisable(void);
//system clk选择时钟源
ResultStatus_t CLK_SysClkSrc(CLK_System_t clk);
//配置osc 40M时钟Loss监控
void CLK_OSC40MMonitorEnable(CLK_MonitorAct_t act);
//关闭osc 40M时钟Loss监控
void CLK_OSC40MMonitorDisable(void);
//配置FIRC时钟Loss监控
void CLK_FIRC64MMonitorEnable(CLK_MonitorAct_t act);
//关闭FIRC时钟Loss监控
void CLK_FIRC64MMonitorDisable(void);
//LPO低功耗时钟源使能控制
void CLK_LPO32KEnable(void);
void CLK_LPO32KDisable(void);
//OSC 32K时钟使能控制
void CLK_OSC32KEnable(CLK_OscMode_t mode);
void CLK_OSC32KDisable(void);
//scc设置时钟分配
void CLK_SetClkDivider(CLK_Module_t module, CLK_Divider_t divider);
//选择对应外设时钟源
ResultStatus_t CLK_ModuleSrc(CLK_Module_t module, CLK_Src_t clockSource);
//选择TIM外部时钟源
void CLK_TimExternalClkSrc(CLK_TIM_t timId, CLK_TIMExtClk_t clockSrc);
//选择对应的时钟源输出至外部PIN
void CLK_ClkOutEnable(CLK_OutSrc_t outSrc, CLK_OutDiv_t divider);
void CLK_ClkOutDisable(void);
//获取对应外设时钟频率
uint32_t CLK_GetModuleClkFreq(CLK_Module_t module,uint32_t oscFreq);
//获取时钟源状态
FlagStatus_t CLK_GetClkStatus(CLK_Src_t clockSource);
//等待时钟源状态ready
ResultStatus_t CLK_WaitClkReady(CLK_Src_t clockSource);
//SCC安装终端回调函数可以配置当时钟源丢失时进入中断
void SCC_InstallCallBackFunc(CLK_Int_t intId,isr_cb_t * cbFun);
//清楚SCC中断标志位
void SCC_IntClear(CLK_Int_t intId);

三、总结

本文为博主开发过程中总结而得,如有不正之处欢迎指正。

相关文章:

  • Git_idea界面进行分支合并到主分支详细操作
  • C++编程语言:标准库:标准库概观(Bjarne Stroustrup)
  • 半导体机器人赛道“领跑者”优艾智合:以创新驱动国产化替代加速度
  • Sourcetree安装使用的详细教程
  • 高拟人化客服机器人显著提升用户接受度
  • 第一天——贪心算法——分饼干
  • STM32F103RC中ADC1和ADC2通道复用
  • 关于AI 大数据模型的基础知识 杂记
  • 紧扣婴幼儿托育服务与管理实训室建设要点:评估与持续改进策略
  • WebSocket与Socket.IO实现简易客服聊天系统全解析
  • 力扣26——删除有序数组中的重复项
  • 特殊配合力(SCA)作为全基因组关联分析(GWAS)的表型,其生物学意义和应用价值
  • Uniapp Android/IOS 获取手机通讯录
  • MySQL SQL Mode及其说明
  • 4.3【LLaMA-Factory实战】教育大模型:个性化学习路径生成系统全解析
  • 4.2【LLaMA-Factory实战】金融财报分析系统:从数据到部署的全流程实践
  • pandas中的数据聚合函数:`pivot_table` 和 `groupby`有啥不同?
  • R1快开门式压力容器操作考试的实操技能考试有哪些注意事项?
  • 多品种与多时间框架策略跨市场交易的实现
  • 高效处理CR
  • 国际足联女子世界杯再次扩军,2031年起增至48支球队
  • 工程院院士葛世荣获聘任为江西理工大学校长
  • 上海“电子支付费率成本为0”背后:金融服务不仅“快”和“省”,更有“稳”和“准”
  • 国家主席习近平同普京总统举行大范围会谈
  • 习近平离京赴莫斯科对俄罗斯进行国事访问并出席纪念苏联伟大卫国战争胜利80周年庆典
  • 江苏淮安优化村级资源配置:淮安区多个空心村拟并入邻村