1. 项目概述:从寄存器手册到实战时钟树设计
在嵌入式系统,尤其是像德州仪器(TI)Jacinto 6 Plus这样复杂的汽车级SoC设计中,时钟管理是系统稳定与性能的基石。我们常常会拿到一份动辄数千页的技术参考手册(TRM),里面充斥着像CM_CLKSEL_DPLL_MPU[6:0]、DPLL_LPMODE_EN这样的寄存器位域描述。对于刚入行的工程师,或者从应用层转向底层驱动的朋友来说,这些表格和缩写常常让人望而生畏——它们看起来冰冷、孤立,只是一堆待配置的比特位。
但我想说,这些寄存器背后,是一个活生生的、精密的“时钟心脏”——数字锁相环(DPLL)。它的核心任务很简单:把一个低频、稳定的参考时钟(比如24MHz晶振),变成CPU、GPU、DDR内存、各种高速外设所需要的高频、低抖动的工作时钟。然而,实现这个“简单”任务的过程却充满了工程权衡:如何平衡频率精度与锁定时间?如何在汽车冷启动、睡眠唤醒等场景下快速提供时钟又不浪费功耗?如何确保在芯片老化、温度电压波动时,时钟频率依然精准?
我手头这份关于DRA7xx系列SoC中DPLL模块的寄存器摘要,正是解开这些问题的钥匙。它不仅仅是一张配置清单,更是一份时钟系统的“建筑设计图”。今天,我就结合自己多年在汽车电子和工业控制领域折腾这些芯片的经验,带大家深入DPLL的内部世界。我们会超越手册的表格,去理解时钟合成(Clock Synthesis)的参数如何计算、五种功耗模式(Power Modes)在什么场景下切换、以及重校准(Recalibration)机制如何像一位细心的守护者,确保时钟长期稳定。无论你是正在为Jacinto平台进行BSP开发,还是希望深入理解复杂SoC的时钟架构,这篇文章都将提供从理论到寄存器操作的完整视角。
2. DPLL核心原理与在SoC中的角色定位
在深入寄存器细节之前,我们必须先建立起对DPLL的直观理解。你可以把DPLL想象成一个智能的频率乘法器+相位对齐器。它的核心是一个负反馈环路,由相位频率检测器(PFD)、电荷泵(CP)、环路滤波器(LF)和压控振荡器(VCO)构成。传统模拟PLL对这些模块的调整依赖于模拟电压,而DPLL的“D”(Digital)体现在其关键参数(如分频比)是数字可编程的,并通过数字逻辑进行控制,这使得它更易于集成在SoC中,且抗噪声能力更强。
在Jacinto 6 Plus这类多核异构SoC中,你不会只看到一个DPLL。输入资料中列举的DPLL_MPU、DPLL_IVA、DPLL_DSP等,就是为不同子系统服务的独立时钟源。这种设计称为时钟域隔离。例如,DPLL_MPU专门为Cortex-A15/A7应用处理器核提供时钟,DPLL_GPU驱动图形处理器,DPLL_DDR则专注于内存控制器。这样做的好处显而易见:
- 独立性:每个子系统可以独立地进行动态电压频率调整(DVFS),比如在播放音乐时,CPU可以降频节能,而负责音频处理的IVA子系统可能仍需高性能。
- 稳定性:避免一个模块的时钟抖动或模式切换影响到其他不相关的模块。
- 灵活性:为每个子系统量身定制最合适的输出频率和时钟特性。
DPLL的基本工作原理公式是:Fout = (Fref * M) / N。这里的Fref是输入参考时钟频率,M是倍频系数(Multiplier),N是预分频系数(Divider)。手册中CM_CLKSEL_DPLL_xxx[18:8] DPLL_MULT和[6:0] DPLL_DIV这两个寄存器字段,就是用来设置M和N值的。例如,如果参考时钟是20MHz,需要生成1GHz的CPU时钟,我们可以设置M=50,N=1(Fout = 20MHz * 50 / 1 = 1000MHz)。但实际配置远不止于此,因为VCO本身有一个最佳的工作频率范围,M和N的值需要落在这个范围内以保证性能和稳定性。
注意:手册中
DPLL_MULT和DPLL_DIV的位宽(如M是11位,N是7位)直接决定了可配置的频率范围和精度。11位的M最大值为2047,这提供了极高的频率调谐精度,但同时也要求驱动软件必须进行边界检查和有效性验证,防止配置出超出VCO锁定范围的非法值。
3. 时钟合成参数详解:从寄存器位到实际频率
输入资料中的Table 3-63、3-68等表格,列出了各个DPLL的“时钟合成参数”。这部分的配置直接决定了输出时钟的绝对频率,是时钟初始化的核心步骤。我们以DPLL_MPU为例,拆解其配置流程和背后的考量。
3.1 核心参数M与N的配置逻辑
寄存器CM_CLKSEL_DPLL_MPU控制着MPU域DPLL的倍频和分频。其中,位[18:8]是DPLL_MULT (M值),位[6:0]是DPLL_DIV (N值)。配置时,绝不是随意填两个数使公式成立那么简单,必须遵循以下设计约束:
- VCO工作频率范围:每个DPLL内部的VCO都有一个明确的最低和最高工作频率(例如,对于某些DPLL,范围可能是800MHz到2GHz)。计算出的
FVCO = Fref * M必须严格落在这个区间内。超出范围会导致无法锁定或输出时钟抖动极大。 - 输出分频器限制:DPLL产生的
FVCO会经过一个高速分频器(HSDIVIDER,即CLKOUT_M2等)才能输出给模块使用。这个分频器也有其分频比范围(如1到32)。因此,最终输出频率Fout = (Fref * M) / (N * M2),其中M2是输出分频值。 - 参考时钟频率:
Fref本身可能来自系统晶振,也可能来自另一个PLL的输出。必须确认其频率是准确和稳定的。
一个典型的配置流程如下:
- 步骤一:确定目标频率。例如,需要为Cortex-A15核心提供1.2GHz的时钟。
- 步骤二:选择输出分频比M2。查看
CM_DIV_M2_DPLL_MPU[4:0] DIVHS字段,假设我们暂定M2=2,这意味着VCO频率需要是2.4GHz。 - 步骤三:根据VCO范围校验并选择M/N。假设
Fref=20MHz,VCO范围是800MHz-2.5GHz。那么需要满足20MHz * M = 2.4GHz,得出M=120。同时检查N值,通常N可以设为1(即不对参考时钟进行预分频),但有时为了获得更好的相位噪声或满足某些比值约束,会设置N>1。这里我们取N=1。 - 步骤四:计算并验证。
FVCO = 20MHz * 120 = 2.4GHz,在允许范围内。最终Fout = 2.4GHz / 2 = 1.2GHz,符合目标。
在软件中,这通常体现为一段配置函数:
// 伪代码示例:配置DPLL_MPU输出1.2GHz时钟,参考时钟20MHz,输出分频M2=2 void configure_dpll_mpu(void) { // 1. 确保MPU电源域已上电(手册重要提示!) // 2. 设置DPLL为旁路或低功耗模式,以便安全配置 REG_WRITE(CM_CLKMODE_DPLL_MPU, DPLL_EN_STOP); // 进入停止模式 // 3. 配置M和N值 uint32_t m_value = 120; uint32_t n_value = 1; uint32_t clksel_reg = REG_READ(CM_CLKSEL_DPLL_MPU); clksel_reg &= ~((0x7FF << 8) | 0x7F); // 清除M和N位域 clksel_reg |= (m_value << 8) | n_value; REG_WRITE(CM_CLKSEL_DPLL_MPU, clksel_reg); // 4. 配置输出分频器M2 REG_WRITE(CM_DIV_M2_DPLL_MPU, 2); // 设置DIVHS=2 // 5. 启动DPLL并等待锁定(后续章节详述) }3.2 时钟输出分频器(HSDIVIDER)的灵活运用
除了主输出CLKOUT_M2,很多DPLL(如DPLL_GMAC、DPLL_DSP)提供了多个高速分频器输出(CLKOUT_M3,CLKOUT_H11等)。这是一个非常强大的特性。例如,DPLL_GMAC可以同时产生:
CLKOUT_M2: 用于GMAC核心的250MHz时钟。CLKOUTX2_H11: 经过不同分频,产生125MHz或2.5MHz的时钟,分别用于RGMII接口和RMII接口。CLKOUTX2_H14: 为MCAN模块提供时钟。
这意味着一个DPLL可以驱动多个时钟域,且这些��钟同源、相位关系确定,这对于需要严格同步的接口(如以太网PHY和MAC)至关重要。配置时,需要仔细计算每个分频器的分频比,确保所有输出频率都在目标模块的允许范围内。
实操心得:在计算多路输出分频时,一个常见的坑是忽略了某些分频器只支持偶數分频或特定的分频比。务必查阅数据手册中关于
DIVHS位域的详细描述。例如,某些H系列分频器可能只支持2 * N的分频。盲目配置会导致时钟无法正常产生。
4. DPLL功耗模式深度解析与应用场景
输入资料中Table 3-65、3-70等表格列出了各个DPLL支持的功耗模式,而Table 3-66、3-71等则给出了控制这些模式的寄存器位。这是DPLL动态功耗管理的核心。理解每种模式的含义和切换时机,对于实现高效的电源管理至关重要。
4.1 五种功耗模式详解
锁定模式(Lock):
- 状态:DPLL正常运作,VCO已锁定到参考时钟,输出稳定、低抖动的时钟。
- 功耗:最高。所有电路(PFD, CP, LF, VCO)均处于活动状态。
- 应用场景:系统处于高性能活跃状态,需要全速运行。
低功耗旁路模式(Low-Power Bypass):
- 状态:DPLL的反馈环路被关闭,VCO停止工作。输出时钟直接来自参考时钟(或参考时钟的分频)。输出频率低,且没有锁相环的抖动清理功能。
- 功耗:很低。
- 应用场景:对应模块处于空闲或低功耗状态,但仍需要基本时钟维持寄存器状态或等待唤醒事件。例如,CPU进入WFI(等待中断)状态时,其DPLL可切换至此模式。
快速重锁旁路模式(Fast-Relock Bypass):
- 状态:与低功耗旁路类似,输出时钟也来自旁路路径。但关键区别在于,DPLL的环路滤波器(LF)电压被保持(或缓慢刷新),VCO的控制电压得以维持。
- 功耗:介于锁定模式和低功耗旁路模式之间。
- 应用场景:系统即将从低功耗状态快速唤醒,需要DPLL能极快地(微秒级)重新锁定到目标频率。这是性能与功耗的绝佳平衡点,在汽车娱乐系统从待机到点亮屏幕的场景中极为常用。
低功耗停止模式(Low-Power Stop):
- 状态:DPLL完全关闭,不消耗动态功耗。输出时钟被门控(无输出)。
- 功耗:最低(仅漏电)。
- 应用场景:深度睡眠状态,整个时钟域可以被断电。唤醒时需要从头启动DPLL,锁定时间最长。
快速重锁停止模式(Fast-Relock Stop):
- 状态:DPLL主电路关闭,但保留部分电路(如LF的保持电路)供电,以记忆关闭前的状态。
- 功耗:比完全停止略高,但远低于活动模式。
- 应用场景:比深度睡眠稍浅的休眠状态,允许相对较快的唤醒和锁定。
4.2 模式控制寄存器实战
模式切换主要通过CM_CLKMODE_DPLL_xxx寄存器控制。以DPLL_MPU为例:
DPLL_LPMODE_EN(位10):此位置1使能低功耗模式。当DPLL_EN字段设置为STOP时,若此位为1,则进入低功耗停止模式;若为0,则进入快速重锁停止模式(如果硬件支持)。DPLL_EN(位[2:0]):手动模式控制。常见的值有:0x0:旁路模式(Bypass)0x1:锁定模式(Lock)0x3:低功耗停止模式(需结合DPLL_LPMODE_EN)0x5:快速重锁停止模式(需结合DPLL_LPMODE_EN)
AUTO_DPLL_MODE(位[2:0]):自动模式控制。当使能自动空闲(Auto-idle)功能时,硬件可以根据时钟活动自动在锁定和旁路模式间切换,进一步节省功耗。
模式切换的软件序列至关重要,错误的顺序会导致系统挂起。一个从锁定模式切换到低功耗旁路模式的安全序列如下:
// 伪代码:安全切换DPLL到低功耗旁路模式 void dpll_enter_low_power_bypass(void) { // 1. 检查目标模式是否可用(查表Table 3-65) // 2. 切换输出时钟源到旁路路径(如果模块支持动态切换) // 3. 将DPLL_EN字段设置为Bypass值(例如0x0) REG_MODIFY(CM_CLKMODE_DPLL_MPU, 0x7, 0x0); // 修改[2:0]位为0 // 4. 等待状态位确认切换完成 while(!(REG_READ(CM_IDLEST_DPLL_MPU) & ST_BYPASS)); // 5. 此时可安全降低该时钟域的电压(如果DVFS支持) }踩坑记录:切忌在DPLL还在为某个活跃模块提供时钟时,直接将其关闭或切到旁路模式。必须先确保该时钟域的所有模块都已切换到其他时钟源(如另一个DPLL或低频时钟),或者已进入无需此时钟的状态。在
DPLL_MPU的描述中,手册特别强调:“用户软件必须确保在编程DPLL_MPU之前,MPU电压域已上电。”这反过来也意味着,在关闭DPLL前,有时需要先操作电源域。
5. 漂移防护与重校准机制:时钟的“自动驾驶”
输入资料中Table 3-67、3-72等表格描述的重校准(Recalibration)功能,是确保DPLL长期运行稳定性的关键,尤其在温度、电压变化剧烈的汽车环境中。这个功能在TI的文档中常被称为“DriftGuard”(漂移防护)。
5.1 为什么需要重校准?
即使DPLL在初始上电时完美锁定,在运行过程中也会面临挑战:
- 温度漂移:芯片温度从-40°C到125°C的变化,会导致VCO的振荡特性(Kvco)和环路滤波器元件参数发生变化。
- 电源电压波动:尤其是电池供电系统,电压的纹波和负载跳变会影响VCO和电荷泵的性能。
- 器件老化:长时间运行后,半导体器件的特性会发生缓慢变化。
这些因素会导致VCO的实际输出频率与理论值产生微小偏差,即“漂移”。对于USB、以太网等对时钟精度要求极高的接口,ppm(百万分之一)级别的漂移都可能导致通信失败。
5.2 重校准的工作原理与配置
重校准机制的核心是周期性或触发式地重新比较参考时钟和反馈时钟的相位/频率,并微调控制电压,将VCO频率拉回中心点。
- 使能控制:
CM_CLKMODE_DPLL_xxx[8] DPLL_DRIFTGUARD_EN位。置1则使能漂移防护重校准功能。 - 中断状态:
PRM_IRQSTATUS_xxx[n] DPLL_xxx_RECAL_ST位。当重校准事件发生时,此位被硬件置1。 - 中断使能:
PRM_IRQENABLE_xxx[n] DPLL_xxx_RECAL_EN位。软件置1后,当重校准事件发生时,可产生处理器中断。
关键点在于,重校准中断是发给多个处理器的(MPU, IPU1, IPU2, DSP1, DSP2, EVE1, EVE2)。这种设计提供了灵活性:你可以选择让一个高性能核(如Cortex-A15)来处理所有DPLL的重校准中断,进行统一日志记录和决策;也可以让各个子系统处理自己的DPLL中断,实现更分布式的管理。
一个典型的重校准中断服务程序(ISR)可能包含以下步骤:
// 伪代码:DPLL重校准中断处理 void dpll_recal_isr(int dpll_id) { // 1. 读取中断状态寄存器,确认是哪个DPLL触发的重校准 uint32_t status = REG_READ(PRM_IRQSTATUS_MPU); if (status & (1 << dpll_id)) { // 2. 记录日志:发生了一次漂移校正,可能用于系统健康监控 log_printf("DPLL%d recalibration triggered at tick %lu\n", dpll_id, get_system_tick()); // 3. (可选)读取一些诊断寄存器,检查漂移量 // uint32_t drift_offset = REG_READ(DPLL_xxx_CALIB_OFFSET); // 4. 清除中断状态位 REG_WRITE(PRM_IRQSTATUS_MPU, (1 << dpll_id)); } }5.3 重校准策略与注意事项
- 使能时机:通常在DPLL锁定并稳定运行一段时间后,再使能重校准。刚锁定时就使能,可能会因环路未完全稳定而误触发。
- 中断频率:重校准发生的频率取决于环境变化。在温度稳定的情况下可能几小时一次,在剧烈变化时可能几秒一次。频繁的中断会增加系统负载,需要评估其影响。
- 功能支持差异:如资料所示,
DPLL_USB的重校准功能在该系列器件中不被支持(Not supported)。这意味着对于USB这类对时钟精度要求极高的模块,可能需要依赖更高精度的外部时钟源,或者其DPLL设计采用了其他稳频技术。
经验之谈:在汽车信息娱乐系统进行EMC(电磁兼容)测试时,我们曾遇到因DPLL重校准中断过于频繁,导致音频播放出现轻微“爆音”的问题。排查后发现,在特定电源负载切换的瞬间,电源纹波增大,触发了DPLL的频繁校准。解决方案是在音频播放的关键路径(如DMA传输期间),临时屏蔽相关DPLL的重校准中断,或者调整环路滤波器的带宽参数,让DPLL对短期扰动不那么敏感。这体现了功能安全与功能性能之间的权衡。
6. 不同功能DPLL的配置差异与实战要点
Jacinto 6 Plus SoC集成了近十个DPLL,虽然核心原理相同,但针对其服务的模块特性,配置上各有侧重。理解这些差异是进行正确系统初始化的关键。
6.1 DPLL_MPU:性能与功耗平衡的艺术
MPU(Microprocessor Unit)DPLL为应用处理器核供电,是系统性能的标杆。其特点包括:
- 支持多种低功耗模式:如表3-65所示,支持低功耗/快速重锁的旁路和停止模式,便于实现复杂的CPU DVFS和睡眠状态(C-states)切换。
- 重校准至关重要:CPU频率的微小漂移虽然可能不会导致立即故障,但会影响性能计数器精度和总线时序。使能重校准是保证长期计算一致性的好习惯。
- 配置前置条件:手册特别警告,编程前必须确保MPU电压域已上电。这通常通过触发电源域唤醒(
SW_WKUP)并轮询其状态位来实现。忽略这一步是导致系统启动黑屏的常见原因。
6.2 DPLL_DDR:稳定压倒一切
DDR内存控制器的时钟对稳定性要求最高,抖动必须极小。
- 有限的功耗模式:从表3-100看,
DPLL_DDR不支持任何停止模式(Stop),只支持旁路和锁定模式。这是因为DDR内存即使在系统低功耗时,也可能需要维持自刷新,时钟不能完全关闭。 - 专用输出分频器:除了
CLKOUT_M2,它还提供CLKOUTX2_H11,用于生成DDR PHY和DLL所需的差分或倍频时钟,配置时需要仔细匹配DDR规范要求的频率关系。 - 慎用重校准:DDR接口对时钟相位极其敏感。虽然
DPLL_DDR支持重校准,但在高带宽数据传输期间触发校准可能导致位错误。建议仅在DDR空闲或进入自刷新模式时,才允许进行重校准操作。
6.3 DPLL_USB:精度与特殊配置
USB协议对时钟精度有严格规定(通常±500ppm)。
- 独特的DCO控制:如表3-73和3-74所示,
DPLL_USB有一个特殊的DPLL_SELFREQDCO控制位。这通常用于控制一个数字控制振荡器(DCO)模式,可能用于产生USB所需的高精度、固定频率时钟(如480MHz)。 - 重校准不支持:表3-77的脚注明确指出,该系列器件不支持USB DPLL的重校准功能。这意味着其时钟精度完全依赖于初始锁定精度和VCO的固有稳定性。在设计时,需要选择温漂系数更小的晶振作为参考源。
6.4 DPLL_GMAC:多时钟输出的典范
以太网控制器DPLL是展示多路输出能力的典型。
- 丰富的HSDIVIDER:拥有M2, M3, H11, H12, H13, H14等多个输出分频器(表3-89),可同时产生GMAC核心时钟、RGMII/RMII接口时钟、以及MCAN模块时钟。
- 时钟使能控制:注意
CLKOUTX2_H14的使能是通过一个独立的系统控制寄存器CTRL_CORE_SMA_SW_0控制的,而非PRM模块。这体现了时钟分布网络的复杂性,配置时需要翻阅多个手册章节。 - ICSS时钟的注意点:手册注释提到PRU-ICSS模块在此系列中不支持,因此相关时钟位是无效的。这提醒我们,寄存器位不一定都有效,必须结合具体的芯片型号和版本。
7. 系统级时钟初始化与调试实战指南
掌握了单个DPLL的配置后,我们需要从系统视角看时钟树的初始化。这通常是在Bootloader(如U-Boot)的早期阶段完成的。
7.1 初始化序列设计
一个稳健的时钟初始化序列应遵循“自底向上,从稳到快”的原则:
- 使能电源和基础时钟:确保所有需要编程的电源域和基础参考时钟(如系统主晶振、辅助时钟)已经稳定。
- 配置低频、简单的时钟源:先配置始终开启的32K时钟、低速外设时钟等。
- 启动并锁定核心DPLL:通常先启动
DPLL_MPU、DPLL_DDR。配置M/N值后,将DPLL_EN设为锁定模式,然后轮询锁定状态位(CM_IDLEST_DPLL_xxx寄存器中的ST_DPLL_CLK位),确保锁定成功后再进行下一步。 - 配置输出分频和时钟复用器:DPLL锁定后,配置各个HSDIVIDER的分频比,然后将目标模块的时钟源选择器(
CLKSEL)从安全时钟(如旁路时钟)切换到该DPLL的输出。 - 配置外设DPLL:按需启动
DPLL_USB、DPLL_GMAC等,步骤同上。 - 使能高级功能:在所有DPLL稳定运行后,再使能重校准(
DPLL_DRIFTGUARD_EN)和自动空闲等动态管理功能。
7.2 调试技巧与常见问题排查
当系统无法启动或运行不稳定时,时钟问题是首要怀疑对象。
问题一:系统启动卡死在某处。
- 排查:使用仿真器或JTAG连接,在最早可能卡住的代码位置(如时钟初始化函数)设置断点。单步执行,检查每一步对寄存器的读写是否与预期相符。重点检查DPLL锁定状态。如果某个DPLL始终无法锁定,可能是:
- M/N值计算错误,导致VCO频率超出范围。
- 参考时钟没有正确使能或频率不对。
- 该DPLL所在的电源域未上电(回顾
DPLL_MPU的警告)。
- 工具:利用TI的CCS(Code Composer Studio)等工具,直接查看和修改PRCM模块的寄存器,进行实时调试。
- 排查:使用仿真器或JTAG连接,在最早可能卡住的代码位置(如时钟初始化函数)设置断点。单步执行,检查每一步对寄存器的读写是否与预期相符。重点检查DPLL锁定状态。如果某个DPLL始终无法锁定,可能是:
问题二:系统运行一段时间后,某些外设(如USB、以太网)出现偶发性故障。
- 排查:这很可能是时钟漂移或抖动过大。
- 检查是否使能了重校准功能,并查看重校准中断是否过于频繁。
- 使用示波器或逻辑分析仪测量相关时钟引脚的实际频率和抖动。与数据手册要求对比。
- 检查PCB布局,时钟走线是否远离噪声源(如开关电源、高速数据线),是否做了良好的阻抗控制和包地。
- 对策:调整DPLL环路滤波器参数(如果寄存器支持),降低带宽可以抑制高频噪声但会减慢锁定速度;增加带宽则相反。这是一个需要权衡的优化过程。
- 排查:这很可能是时钟漂移或抖动过大。
问题三:系统低功耗唤醒后,性能变差或外设失灵。
- 排查:检查DPLL从低功耗模式唤醒后的重锁定过程。
- 确认唤醒序列是否正确地将DPLL从
STOP或BYPASS模式切换回LOCK模式。 - 检查唤醒后是否等待了足够的重锁定时间(
RELOCK_TIME,在手册其他章节)���才去访问依赖此时钟的模块。 - 确认在低功耗模式下,是否有其他模块错误地请求了高时钟频率,导致DPLL模式切换冲突。
- 确认唤醒序列是否正确地将DPLL从
- 排查:检查DPLL从低功耗模式唤醒后的重锁定过程。
寄存器配置检查表:在编写或审查时钟初始化代码时,我习惯用这样一个清单来核对每个DPLL:
- [ ] 参考时钟源已使能且稳定。
- [ ] 目标电源域已上电(特别是MPU、DDR等)。
- [ ] M/N值计算正确,且在VCO频率范围内。
- [ ] 初始化时,DPLL处于停止或旁路模式。
- [ ] 配置M/N和输出分频器。
- [ ] 切换DPLL到锁定模式。
- [ ] 轮询锁定状态位直到成功。
- [ ] 将模块的时钟源切换至此DPLL输出。
- [ ] (可选)使能重校准和自动空闲功能。
时钟是数字系统的脉搏,理解并驾驭好SoC中的DPLL,是构建稳定、高效、可靠的嵌入式产品的基石。从冰冷的寄存器位到鲜活的时钟信号,这中间需要的是对硬件原理的深刻理解、对设计约束的严格遵守,以及大量的实践调试经验。希望这篇结合了TI Jacinto 6 Plus手册细节与实战经验的解析,能为你下一次的时钟设计之旅点亮一盏灯。