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

Hi3061M开发板——系统时钟频率

这里写目录标题

    • 前言
    • MCU时钟介绍
    • PLL
    • CRG_ConfigPLL时钟配置
    • 另附完整系统时钟结构图

前言

Hi3061M使用过程中,AD和APT输出,都需要考虑到时钟频率,特别是APT,关系到PWM的输出频率。于是就研究了下相关的时钟。

MCU时钟介绍

MCU共有三个源时钟:HOSC、LOSC和XTAL。

HOSC是MCU集成的高精度高速振荡器,提供25MHz时钟clk_hosc。clk_hosc是MCU CORE电源域的默认时钟

LOSC是MCU集成的低速振荡器,提供32kHz时钟clk_losc。clk_losc是MCU AON电源域的默认时钟,也为IWDG(Independent Watch Dog)模块提供计数时钟。

XTAL支持高速外部晶体或外部时钟源,提供4MHz ~ 30MHz时钟clk_xtal。

clk_hosc是MCU CORE电源域的默认时钟,说明系统的主要时钟是clk_hosc,也就是25MHz
当然,之后还需要经过PLL锁相环来进行调节频率提供给外设工作时钟。

PLL

PLL
由上图是Hi3061M系统的时钟图,PLL部分,由上节我们知道,数据选择器(MUX)将会选择clk_hosc作为主要时钟,也就是25MHz。
之后会先经过prediv前置分频器进行分频后,再通过反馈分频器fbdiv进行倍频处理,再通过后面两个后置分频器进行分频作为两个工作时钟提供给外设。
对应的数据选择器和分频器都可以通过寄存器进行配置,软件进行设置。
在system_init.c文件中通常有一个相关时钟配置的函数CRG_Config如下:

BASE_StatusType CRG_Config(CRG_CoreClkSelect *coreClkSelect)
{CRG_Handle crg;crg.baseAddress     = CRG;crg.pllRefClkSelect = CRG_PLL_REF_CLK_SELECT_HOSC;crg.pllPreDiv       = CRG_PLL_PREDIV_4;crg.pllFbDiv        = 48; /* PLL Multiplier 48 */crg.pllPostDiv      = CRG_PLL_POSTDIV_2;crg.coreClkSelect   = CRG_CORE_CLK_SELECT_PLL;crg.handleEx.pllPostDiv2   = CRG_PLL_POSTDIV2_3;crg.handleEx.clk1MSelect   = CRG_1M_CLK_SELECT_HOSC;crg.handleEx.clk1MDiv = (25 - 1); /* The 1 MHz freq is equal to the input clock frequency / (clk_1m_div + 1). 25 is the div of the clk_1m in CLOCK. */if (HAL_CRG_Init(&crg) != BASE_STATUS_OK) {return BASE_STATUS_ERROR;}*coreClkSelect = crg.coreClkSelect;return BASE_STATUS_OK;
}

改函数会在初始化时进行调用,当然似乎是上电会自动运行的,并没有在用户main中初始化调用,具体也没有仔细研究。在下面的函数中进行调用了。chipinit.c中

void Chip_Init(void)
{CRG_CoreClkSelect coreClkSelect;/* Config CRG */if (CRG_Config(&coreClkSelect) != BASE_STATUS_OK) {Chip_InitFail();}

CRG_ConfigPLL时钟配置

接下来详细分析下CRG_Config函数中相关频率的选择和分频。

crg.pllRefClkSelect = CRG_PLL_REF_CLK_SELECT_HOSC;
//图中第一个选择器,系统时钟源选择,clk_hosc,25MHz.
crg.pllPreDiv       = CRG_PLL_PREDIV_4;
//前置分频器,4分频,25/4MHz
crg.pllFbDiv        = 48; /* PLL Multiplier 48 */
//反馈分频器,48倍频,25/4*48 = 300MHz
crg.pllPostDiv      = CRG_PLL_POSTDIV_2;
//后置分频器,2分频,300/2 = 150MHz 
crg.coreClkSelect   = CRG_CORE_CLK_SELECT_PLL;
//系统时钟选择,选择为经过PLL后置分频输出的时钟,也就是150MHz 
crg.handleEx.pllPostDiv2   = CRG_PLL_POSTDIV2_3;
//后置分频器,3分频,300/3 = 100MHz 主要用于ADC

clk_pll_pst1即是150MHz,也就是系统的时钟,大多数外设都是在这个时钟频率上工作。
clk_pll_pst2即是100MHz,是ADC工作的主要时钟。

在这里插入图片描述
ADC的时钟在使用时还需要特定的配置,进行时钟选择。

另附完整系统时钟结构图

在这里插入图片描述

http://www.lryc.cn/news/459298.html

相关文章:

  • C++入门基础知识110—【关于C++ if...else 语句】
  • 基于YOLO11深度学习的非机动车驾驶员头盔检测系统【python源码+Pyqt5界面+数据集+训练代码】深度学习实战、目标检测、卷积神经网络
  • 图像分类-demo(Lenet),tensorflow和Alexnet
  • excel 单元格嵌入图片
  • GitHub简介与安装使用入门教程
  • HTML(五)列表详解
  • SparkSQL介绍及使用
  • 【聚星文社】3.2版一键推文工具更新啦
  • C++基础补充(03)C++20 的 std::format 函数
  • [论文笔记]DAPR: A Benchmark on Document-Aware Passage Retrieval
  • Spring Boot知识管理:智能搜索与分析
  • 操作系统(2) (进程调度/进程调度器类型/三种进程调度/调度算法)
  • 鸿蒙--知乎评论
  • 2024 - 两台CentOS服务器上的1000个Docker容器(每台500个)之间实现UDP通信(C语言版本)
  • 小程序该如何上架
  • XMOJ3065 旅游线路
  • 量化之一:均值回归策略
  • NVIDIA Bluefield DPU上的启动流程4个阶段分别是什么?作用是什么?
  • 最优美公式-欧拉公式,轻松理解版
  • 【力扣 | SQL题 | 每日3题】力扣1107,1112, 1077
  • 计算机网络(十一) —— 数据链路层
  • 使用PyTorch从0实现Fashion-MNIST数据集分类
  • Java数组的值拷贝和地址拷贝
  • 类与对象 中(剩余部分) 以及 日历
  • iOS 14 自定义画中画悬浮窗 Custom AVPictureInPictureController 实现方案
  • 【C#生态园】完整解读C#网络通信库:从基础到实战应用
  • js面试题---事件委托是什么
  • 谷歌浏览器 文件下载提示网络错误
  • 【记录】PPT|PPT 箭头相交怎么跨过
  • Linux中如何修改root密码