news 2026/9/26 6:45:47

ARM裸机开发-时钟

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
ARM裸机开发-时钟

目录

一.基本概念

1.变频​编辑

2.时钟树

3.基本流程

二.具体实现

1.配置ARM时钟

1.CCSR寄存器

2.CCM_ANALOG->PLL_ARM寄存器

3.CACRR

2.配置PLL2和PLL3

3.配置三大根时钟

1.CBCMR寄存器

2.CBCDR寄存器

3.CSCMR1寄存器


一.基本概念

1.变频

使用的芯片imx6ull是无源晶振,表示在工作时不需要额外电压,

下图为该芯片的时钟配置

PLL1为内核配置时钟,PLL2为外设配置时钟,PLL3为USB设备配置时钟,一共7个PLL,8个PFD。

2.时钟树

时钟根产生器:负责对不同频率设备牵线

分频器,2位分频器表示从1到4的分频,3位则表示1到8

OSC晶振,24Mhz

3.基本流程

配置步骤如下:

1.配置ARM时钟为528MHZ

2.配置PLL2下的4个PFD和PLL3下的4个PFD

3.配置三大根时钟(132MHZ,66MHZ,66MHZ)

二.具体实现

1.配置ARM时钟

在配置频率时,先将cg门关闭,配置频率稳定后再打开cg门传给外设,否则若当外设频率较低时,打开cg门,将高频传给外设,由于频率急剧升高,可能导致外设死机,而由于ARM没有配置cg门,所以要更改ARM的时钟频率应特殊处理,如下:

先采用step_clk路,通过选通门选择osc_clk或者下面的时钟频率,先将ARM的工作频率切换为24MHZ,再配置PLL,设置二分频率,待稳定后切换为pll1_main_clk传给ARM.

1.CCSR寄存器

选通线路

2.CCM_ANALOG->PLL_ARM寄存器

设置PLL频率为1056

3.CACRR

设置PLL1为二分频

unsigned int t = 0; // 1. 配置ARM时钟 CCM->CCSR &= ~(1 << 8);//1,选择24MHZ CCM->CCSR |= (1 << 2);//2,切换step_clk t = CCM_ANALOG->PLL_ARM;//3,设置频率1056 t &= ~(3 << 14); t |= (1 << 13); t |= (88 << 0); CCM_ANALOG->PLL_ARM = t; CCM->CACRR |= (1 << 0); //设置二分频 CCM->CCSR &= ~(1 << 2);//4.切换回pll1_main

2.配置PLL2和PLL3

按照下图配置

PLL2锁倍频,所以参考手册没有,只需修改PLL2下的4个PFD

可见,只需修改FRAC域配置PFD倍频因子,CLKGATE打开cg门

// 2. 配置PLL2 PFD t = CCM_ANALOG->PFD_528; t &= ~((0x3F << 0) | (0x3F << 8) | (0x3F << 16) | (0x3F << 24));//先将倍频因子位清零 t &= ~((1 << 7) | (1 << 15) | (1 << 23) | (1 << 31));//打开4个PFD的cg门 t |= (27 << 0) | (16 << 8) | (24 << 16) | (32 << 24);//配置倍频因子,由图中公式528*18/对应频率得到 CCM_ANALOG->PFD_528 = t; // 3. 配置PLL3 PFD,同上 t = CCM_ANALOG->PFD_480; t &= ~((0x3F << 0) | (0x3F << 8) | (0x3F << 16) | (0x3F << 24)); t &= ~((1 << 7) | (1 << 15) | (1 << 23) | (1 << 31)); t |= (12 << 0) | (16 << 8) | (17 << 16) | (19 << 24);

3.配置三大根时钟

按照下图时钟树红线走向配置相应的寄存器

设置为最大频率,运行速度快

1.CBCMR寄存器

选中PLL2具体所对应的哪个PFD

2.CBCDR寄存器

选中PLL2,设置AHB倍频因子,IPG倍频因子

3.CSCMR1寄存器

选中PERCLK根时钟,配置一分频因子

// 4. 配置三个根时钟 t = CCM->CBCMR; t &= ~(3 << 18); t |= (1 << 18); //选中PFD2 CCM->CBCMR = t; t = CCM->CBCDR; t &= ~(1 << 25); //选通PLL2 t &= ~((7 << 10) | (3 << 8)); //清空分频因子位 t |= (1 << 11) | (1 << 8); //设置分频因子,bit11为设置AHB_CLK3分频,bit8位为设置二分频给IPG_CLK CCM->CBCDR = t; CCM->CSCMR1 &= ~(1 << 6);//设置PERCLK继承来自IPG_CLK CCM->CSCMR1 &= ~(0x3F << 0);//设置一分频
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/26 6:45:19

SpringBoot自动配置内幕:手写报表Starter,掌握条件装配

最近在给公司一个维护了四五年的老项目做基础设施改造&#xff0c;要把散落在三个业务系统里的报表导出、导入、打印逻辑全部收敛到一个公共组件里。最开始我估了两天工作量&#xff1a;写个工具类&#xff0c;把代码复制过去&#xff0c;完事。结果真正动手以后我决定不复制了…

作者头像 李华
网站建设 2026/9/26 6:45:11

SpringBoot全局过滤器扫描PDF,拦截XSS攻击实战

前几天在内部文档平台上了个上传模块&#xff0c;刚交付没两天&#xff0c;安全团队就甩过来一条通告&#xff1a;有人上传了一份PDF&#xff0c;里面被人塞了一段JavaScript&#xff0c;只要有人打开这份PDF&#xff0c;脚本就会在浏览器上下文里执行。排查到后半夜&#xff0…

作者头像 李华
网站建设 2026/9/26 6:44:29

AI编程范式迁移:从代码补全到智能体工程实践指南

1. 这不是“又一个AI编程工具测评”&#xff0c;而是2026年工程师的生存地图你打开IDE&#xff0c;敲下fetch&#xff0c;光标停在括号前——不是等你手动补全url, options&#xff0c;而是弹出一个带注释的、已预填了cache: no-store和错误处理骨架的完整调用&#xff1b;你提…

作者头像 李华
网站建设 2026/9/26 6:44:27

字节跳动启用800V高压直流,数据中心供电架构迎来新变革

字节跳动给数据中心上了800V高压直流&#xff0c;这事值得细聊。它不是车企宣传的那种800V快充平台&#xff0c;而是把数据中心供配电母线的直流电压从传统的240V/336V/380V&#xff0c;直接跳到750-800V档位。按理说这种高压直流方案在舰船、电解铝、轨道交通里早就成熟了&…

作者头像 李华
网站建设 2026/9/26 6:42:48

实测Codex操控达芬奇:筛片粗剪调色能省多少时间?

这个周末我把半年前拍的一段企业采访素材翻了出来&#xff0c;三十多个片段、总时长将近三个小时。一想到要筛片、粗剪、调色&#xff0c;整个人都不想开机——这类内容不是不能做&#xff0c;是绝大多数时间都耗在“看素材”“拖时间线”“反复调参数”这种重复劳动上。正好这…

作者头像 李华
网站建设 2026/9/26 6:41:39

codex上传流量失控?token消耗的真相与优化实战

我最近把 codex 的流量跑了一遍&#xff0c;上传量直接飙到 GB 级别&#xff0c;一开始我还以为是网速统计坏了。后来把日志拉下来逐段看&#xff0c;才发现真正的浪费根本不是网络问题&#xff0c;而是 token 在以一种相当隐蔽的方式被烧掉。如果你也在用 codex 做自动化编码&…

作者头像 李华