提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
- 前言
- 一、时钟系统四大核心组件
- [1. PLL(Phase Locked Loop,锁相环)](#1. PLL(Phase Locked Loop,锁相环))
- [2. PFD(Phase Fractional Divider,相位分数分频器)](#2. PFD(Phase Fractional Divider,相位分数分频器))
- [3. Prescaler(预分频器)](#3. Prescaler(预分频器))
- [4. CG(Clock Gating,时钟门)](#4. CG(Clock Gating,时钟门))
- 二、i.MX6ULL时钟树整体架构
- [1. 7个PLL锁相环总览](#1. 7个PLL锁相环总览)
- [2. PLL2与PLL3的PFD输出](#2. PLL2与PLL3的PFD输出)
- [3. 时钟分发全链路](#3. 时钟分发全链路)
- [三、ARM PLL的标准配置流程](#三、ARM PLL的标准配置流程)
- 四、两大定时器核心原理对比
- 五、硬件输入前端:滞回比较器(施密特触发器)
- [1. 为什么需要滞回比较器?](#1. 为什么需要滞回比较器?)
- [2. 工作原理](#2. 工作原理)
- [3. 在芯片中的应用](#3. 在芯片中的应用)
- 六、学习总结
前言
今天是ARM嵌入式学习的第六天,我们把重心从外设转向了芯片最底层的"动力心脏"------时钟系统。完整拆解了i.MX6ULL的CCM(时钟控制模块),从外部24MHz晶振输入,到PLL锁相环倍频、PFD分数分频、总线预分频,再到每个外设的时钟门控,走通了时钟分发的完整链路。同时还补充了GPIO前端的滞回比较器(施密特触发器)原理,搞懂了硬件电平防抖的底层逻辑。
本文按「基础概念→整体架构→配置流程→外设对比→硬件前端」的结构梳理所有知识点,结合架构图和硬件原理,把时钟这个嵌入式最核心也最容易懵的知识点讲透。
一、时钟系统四大核心组件

整个时钟系统本质就是「倍频→细分→降频→开关」的四级结构,对应四个核心部件,也是我们配置时钟的基本操作单元。
1. PLL(Phase Locked Loop,锁相环)
- 本质:基于闭环反馈的高频倍频电路,是整个芯片的时钟"发动机"
- 核心作用:将外部低频晶振(i.MX6ULL默认24MHz)倍频到数百MHz的高频时钟,为内核、总线、外设提供稳定的高频时钟源
- 工作逻辑:输入低频参考时钟,通过内部相位比较器、环路滤波器、压控振荡器形成闭环,输出频率稳定的高频时钟,输出频率 = 输入频率 × 倍频系数
- 特点:输出频率稳定度和参考晶振完全一致,可实现几十倍的倍频
2. PFD(Phase Fractional Divider,相位分数分频器)
- 本质:集成在PLL后端的精细分频单元,基于相位插值技术实现分数级分频
- 核心作用:在不修改PLL倍频系数的前提下,对PLL主时钟进行小范围、高精度分频,一路PLL可以输出多路不同频率的时钟,减少独立PLL的数量
- 特点:分频精度高、切换速度快,是高频时钟二次分发的核心单元
3. Prescaler(预分频器)
- 本质:串接在总线与外设之间的可编程分频电路
- 核心作用:对总线高频时钟做整数降频,得到不同外设、计数器所需的工作频率
- 分频规则 :通常为「写入值+1」的分频逻辑,不同位宽支持不同分频范围:
- 2bit分频器:支持1~4分频
- 3bit分频器:支持1~8分频
- 6bit分频器:支持1~64分频
- 定时器专用12bit预分频:支持1~4096分频
4. CG(Clock Gating,时钟门)
- 本质:每个外设独立的时钟开关
- 核心作用:控制单个外设的时钟供给,不需要工作时关闭时钟,降低芯片功耗
- 特点:是嵌入式低功耗开发的核心控制单元,每个外设都有独立的时钟门控位
二、i.MX6ULL时钟树整体架构

i.MX6ULL的时钟系统以外部24MHz晶振为唯一参考源,经过7个PLL倍频、PFD细分、多路选择器切换、总线分频、外设门控,最终分发到所有内核和外设。
1. 7个PLL锁相环总览
整个芯片共有7个独立PLL,分别负责不同的功能域,其中PLL2和PLL3集成了PFD单元,是外设时钟的主要来源:
| PLL编号 | 名称 | 输出特性 | 核心用途 | 内置PFD数量 |
|---|---|---|---|---|
| PLL1 | ARM PLL | 最高1056MHz可配置 | 为Cortex-A7内核提供工作主频 | 无 |
| PLL2 | System PLL(528 PLL) | 固定528MHz | 系统总线、AHB/IPG外设时钟的主来源 | 4路PFD |
| PLL3 | USB1 PLL(480 PLL) | 固定480MHz | USB、SDIO等外设时钟源 | 4路PFD |
| PLL4 | Audio PLL | 频率可调 | 音频编解码器精准时钟 | 无 |
| PLL5 | Video PLL | 频率可调 | LCD显示控制器像素时钟 | 无 |
| PLL6 | Ethernet PLL | 频率可调 | 以太网MAC控制器时钟 | 无 |
| PLL7 | USB2 PLL | 固定480MHz | 仅用于USB OTG测试,内部与PLL3连通 | 无 |
注:日常开发中PLL7很少用到,因此常说i.MX6ULL有6个主PLL。
2. PLL2与PLL3的PFD输出
PLL2(528MHz)和PLL3(480MHz)各集成4路独立PFD,是外设时钟的主要分支:
- PLL2的4路PFD输出:PFD0=352MHz、PFD1=594MHz、PFD2=400MHz、PFD3=297MHz
- PLL3的4路PFD输出:PFD0=720MHz、PFD1=540MHz、PFD2=508.0MHz、PFD3=454.7MHz
3. 时钟分发全链路
从PLL输出到外设正常工作,时钟要经过五级分发:
- PLL主输出:24M晶振经过PLL倍频,得到高频主时钟
- PFD细分:通过PFD对主时钟做分数分频,得到不同频率的分支时钟
- 多路选择器(MUX):选择某一路PFD或PLL输出,作为总线的时钟源
- 总线预分频:经过3bit/6bit预分频器,得到AHB总线、IPG外设总线的标准时钟
- 外设时钟门(CG):每个外设独立的时钟开关,打开后外设才能正常工作
以我们之前定时器用的IPG外设总线时钟(66MHz)为例,完整路径为: 24M晶振 → PLL2倍频到528M → 多路选择器选择PLL2主时钟 → 8分频 → IPG总线66MHz → 外设时钟门 → GPIO/UART/定时器等外设
三、ARM PLL的标准配置流程
给ARM内核配置PLL是时钟初始化的核心步骤,必须遵循「先低速运行、配置PLL、等待锁定、再切换高频」的流程,防止配置过程中系统崩溃。
步骤1:切换内核到临时低速时钟
配置CCM的CCSR寄存器,将ARM内核的时钟源先切换到外部24MHz晶振(step_clk),保证配置PLL的过程中系统可以正常运行。
步骤2:配置PLL倍频参数
写入PLL1的控制寄存器,设置参考时钟选择、倍频系数、分频系数,通过公式计算得到目标内核频率: 输出频率 = 24MHz × 倍频系数 / 分频系数
步骤3:使能PLL并等待锁定
置位PLL的使能位,启动锁相环;随后循环查询PLL的LOCK锁定标志位,直到硬件自动置位,表示PLL输出频率稳定、相位已锁定。
步骤4:切换内核时钟到PLL
时钟稳定后,配置CACRR寄存器的时钟选择位,将ARM内核的时钟源从低速晶振切换到PLL1输出的高频时钟。
步骤5:配置后端总线分频器
配置AHB预分频器、IPG预分频器等,将内核时钟分频得到系统总线、外设总线的工作频率,完成整个时钟树的初始化。
四、两大定时器核心原理对比
结合今天的时钟系统,我们也对比了i.MX6ULL里两个最常用的定时器:EPIT和GPT。它们都挂载在IPG外设总线上,使用66MHz外设时钟,但定位和工作逻辑完全不同。
| 特性 | EPIT(增强型周期中断定时器) | GPT(通用定时器) |
|---|---|---|
| 计数方向 | 32位向下递减计数 | 32位向上递增计数 |
| 核心定位 | 专为周期性定时中断设计 | 多功能通用定时器 |
| 计数模式 | 自由运行模式 / 自动重载模式 | 重启模式 / 自由运行模式 |
| 核心功能 | 周期比较中断、单路引脚输出 | 自由计时、2路输入捕获、3路输出比较 |
| 典型场景 | 固定周期任务调度、定时采样 | 精准延时、脉冲宽度测量、PWM输出 |
| 时钟来源 | 支持多路时钟源选择 | 支持5种时钟源选择 |
五、硬件输入前端:滞回比较器(施密特触发器)
除了时钟系统,今天还补充了GPIO引脚输入前端的硬件电路------滞回比较器,这是按键、外部输入能稳定工作的硬件基础。
1. 为什么需要滞回比较器?
外部输入的电平(比如按键按下的电平)会带有毛刺、抖动和噪声,如果直接接到数字电路,会导致频繁误触发。滞回比较器通过设置上下两个不同的触发阈值,实现电平的整形和防抖。
2. 工作原理
滞回比较器引入正反馈,形成两个触发阈值:
- 上触发点(上门限):输入电平上升到这个值,输出才会翻转
- 下触发点(下门限):输入电平下降到这个值,输出才会翻转
以典型的5V供电、三个等值电阻的电路为例:
- 输出高电平时,上门限电压 = 3.3V,输入超过3.3V输出才会翻转为低
- 输出低电平时,下门限电压 = 1.6V,输入低于1.6V输出才会翻转为高
两个阈值之间的差值叫滞回电压,正是这个电压差过滤掉了输入信号上的毛刺和抖动,保证输出电平的稳定。
3. 在芯片中的应用
i.MX6ULL的GPIO引脚内部就集成了施密特触发器,可以通过IOMUXC的PAD寄存器配置开启。开启后可以有效提升输入信号的抗干扰能力,这也是我们之前按键配置里0xF0B0参数的核心功能之一。
六、学习总结
今天第六天的学习,我们从芯片的"心脏"------时钟系统入手,彻底打通了从外部晶振到外设工作的完整时钟链路:
- 理解了PLL、PFD、预分频器、时钟门四个核心组件的作用和区别
- 掌握了i.MX6ULL 7个PLL的分布和时钟树的分发逻辑
- 学会了ARM PLL的标准配置流程和注意事项
- 对比了EPIT和GPT两大定时器的原理和适用场景
- 搞懂了滞回比较器的硬件防抖原理