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

<RT1176系列15>clock_config代码分析

一、核心功能概览

  1. 基础时钟初始化:使能并配置外部晶振(OSC_24M)、内部 RC 振荡器(OSC_RC_16M/400M/48M 等),等待时钟稳定
  2. PLL/PFD 配置:初始化 ARM_PLL、SYS_PLL2、SYS_PLL3、VIDEO_PLL 等锁相环,及对应的 PFD(相位频率检测器),生成多档高频时钟
  3. 外设时钟分配:通过时钟根(Clock Root)为各外设(UART、I2C、SPI、定时器等)配置时钟源和分频系数
  4. 特殊模块配置:包括 SEMC(存储器控制器)、GC355(图形加速器)等特殊外设的时钟切换与适配

二、核心配置接口解析

1. 基础时钟初始化接口

基础时钟源是整个时钟系统的起点,代码中通过以下接口初始化:

// 初始化内部48MHz RC振荡器及其2分频(24MHz)
CLOCK_OSC_EnableOsc48M(true);
CLOCK_OSC_EnableOsc48MDiv2(true);// 配置外部24MHz晶振
ANADIG_OSC->OSC_24M_CTRL |= ANADIG_OSC_OSC_24M_CTRL_OSC_EN(1) | ...;
// 等待晶振稳定
while (ANADIG_OSC_OSC_24M_CTRL_OSC_24M_STABLE_MASK !=(ANADIG_OSC->OSC_24M_CTRL & ANADIG_OSC_OSC_24M_CTRL_OSC_24M_STABLE_MASK))

原理:外部晶振(OSC_24M)提供稳定的低频时钟,内部 RC 振荡器(如 OSC_RC_48M)则提供快速启动的时钟源。初始化后需等待稳定信号,避免使用不稳定的时钟。

2. PLL 配置接口

PLL(锁相环)用于将低频时钟倍频为高频时钟,代码中通过结构体定义配置参数,再调用初始化函数:

// ARM_PLL配置参数
const clock_arm_pll_config_t armPllConfig_BOARD_BootClockRUN = {.postDivider = kCLOCK_PllPostDiv2,  // 后分频系数(2分频).loopDivider = 132,                 // 环路分频系数
};
// 初始化ARM_PLL
CLOCK_InitArmPll(&armPllConfig_BOARD_BootClockRUN);

频率计算PLL输出频率 = 输入频率 × (loopDivider / (2 × postDivider))以 ARM_PLL 为例,输入为 24MHz,计算得:24 × (132 / (2×2)) = 792MHz,与代码注释中的ARM_PLL_CLK.outFreq = 792 MHz一致。

3. PFD 配置接口

PFD(相位频率检测器)是 PLL 的扩展,可生成多个不同频率的时钟,通过CLOCK_InitPfd接口配置:

// 初始化SYS_PLL2的PFD0,分频系数27
CLOCK_InitPfd(kCLOCK_PllSys2, kCLOCK_Pfd0, 27);

频率计算PFD输出频率 = PLL输出频率 × 18 / 分频系数例如 SYS_PLL2 输出 528MHz,PFD0 分频系数 27 时:528 × 18 / 27 = 352MHz,与代码中SYS_PLL2_PFD0_CLK.outFreq = 352 MHz一致。

4. 外设时钟根配置接口

每个外设通过时钟根(Clock Root) 配置时钟源和分频,核心接口是CLOCK_SetRootClock,其参数为时钟根 ID 和配置结构体:

clock_root_config_t rootCfg = {0};
rootCfg.mux = kCLOCK_UART_ClockRoot_MuxOscRc48MDiv2;  // 选择24MHz时钟源
rootCfg.div = 1;                                      // 不分频
CLOCK_SetRootClock(kCLOCK_Root_Uart, &rootCfg);        // 应用到UART外设

配置要素

  • mux:选择时钟源(如 PLL 输出、PFD 输出、外部晶振等)
  • div:分频系数(1 表示不分频,n 表示 n 分频)

三、典型外设配置

1. 内核时钟配置

MIMXRT1176 包含 M7 和 M4 两个内核,时钟配置如下:

// M7内核:使用ARM_PLL输出(792MHz),不分频
rootCfg.mux = kCLOCK_M7_ClockRoot_MuxArmPllOut;
rootCfg.div = 1;
CLOCK_SetRootClock(kCLOCK_Root_M7, &rootCfg);// M4内核:使用SYS_PLL3_PFD3输出,不分频
rootCfg.mux = kCLOCK_M4_ClockRoot_MuxSysPll3Pfd3;
rootCfg.div = 1;
CLOCK_SetRootClock(kCLOCK_Root_M4, &rootCfg);

2. 通用外设(UART/I2C/SPI)配置

多数低速外设使用 24MHz 时钟(OSC_RC_48M_DIV2),例如:

// UART时钟配置(以LPUART1为例)
rootCfg.mux = kCLOCK_LPUART1_ClockRoot_MuxOscRc48MDiv2;  // 24MHz源
rootCfg.div = 1;
CLOCK_SetRootClock(kCLOCK_Root_Lpuart1, &rootCfg);// I2C时钟配置(以LPI2C1为例)
rootCfg.mux = kCLOCK_LPI2C1_ClockRoot_MuxOscRc48MDiv2;
rootCfg.div = 1;
CLOCK_SetRootClock(kCLOCK_Root_Lpi2c1, &rootCfg);

3. 高速外设(SEMC/GC355)配置

部分高速外设需要更高频率的时钟,例如:

// SEMC(存储器控制器):使用SYS_PLL2_PFD1(594MHz),3分频后为198MHz
rootCfg.mux = kCLOCK_SEMC_ClockRoot_MuxSysPll2Pfd1;
rootCfg.div = 3;
CLOCK_SetRootClock(kCLOCK_Root_Semc, &rootCfg);// GC355(图形加速器):使用VIDEO_PLL(984MHz),2分频后为492MHz
rootCfg.mux = kCLOCK_GC355_ClockRoot_MuxVideoPllOut;
rootCfg.div = 2;
CLOCK_SetRootClock(kCLOCK_Root_Gc355, &rootCfg);

四、配置流程

1. 配置流程总结

  1. 初始化基础时钟:使能外部晶振和内部 RC 振荡器,等待稳定
  2. 配置 PLL:初始化 ARM_PLL、SYS_PLL2 等,生成高频基准
  3. 配置 PFD:为 PLL 扩展更多频率选项
  4. 配置外设时钟根:为每个外设分配时钟源和分频系数
http://www.dtcms.com/a/575464.html

相关文章:

  • 台州关键词首页优化东莞网站seo优化
  • 密云上海网站建设综合搜索引擎
  • 中国建设银行企业网站个人网站如何进行网络推广
  • 建设网站怎么克隆建设网站与服务器
  • 网站空间要备案吗东莞市网站建设分站品牌
  • 云南网站建设网站运营中英文切换的网站怎么做的
  • 网站都是怎么做的辽宁建设工程信息网上传标书时显示初始化签名证书选择模式失败
  • 长沙企业建站按效果付费wordpress随机文章
  • 可以写代码的网站有哪些问题怎么可以创建网站
  • 门户网站建设哪家便宜建设工程报建备案网站
  • [RE2] docs | FullMatch PartialMatch | 自动匹配
  • wordpress评测网站做黄金的分析师网站
  • 信阳市网站建设公司东莞企业推广网站
  • 怎样自己建个人网站wordpress文章自适应图片大小
  • 旅游网站首页图片重装电脑后没有wordpress
  • 公司专业做网站唐山网站建设zzvg
  • 建设服装网站的意义微信公众平台小程序管理
  • 北京市建设厅官方网站萧山建设银行招聘网站
  • PK10如何自己做网站做一个app开发多少钱
  • 网站流量下降管理咨询公司好不好做
  • 网络培训网站开发文献综述网页升级紧急通知域名
  • 全屏网站沈阳网势科技有限公司怎么样
  • 光触媒网站建设wordpress4.7.0下载
  • 珠海网络公司网站建设潍坊网络科技有限公司
  • 做资讯的网站黄页网怎么样
  • 网站建设优化保定织梦网站代码
  • 网站空间地址wordpress爬取豆瓣电影简介
  • 贵州网站建设推荐wordpress自带重定向
  • 【计算机软件资格考试】软考综合知识题高频考题及答案解析5
  • 网站icp备案信息是什么意思2023前端开发的就业现状