DSP——从入门到放弃系列2——PLL锁相环(持续更新)

news2024/11/24 5:33:27

1、概述   

        锁相环(Phase Locked Loop,PLL)是处理器的时钟源,控制着C6678处理器中C66x内核、各外围设备的时钟的时钟比、对准和选通功能。

2、功能描述

       

上图显示了PLL和PLL控制器的逻辑实现。PLL控制器提供通过软件可配置的分频器(PLLDIV1 至 PLLDIV16)来修改内部时钟输入信号,具有灵活性和便利性。PLL控制器还包含寄存器(PLLM和SECCTL),用于驱动PLL的PLLM(锁相环乘法器),输出分频和旁路逻辑。PLL 控制器生成的时钟被输出传递到 DSP 内核、外设和其他模块。

CLKIN:从外部晶体振荡器的输入信号(3.3V),CLKMODE0 = 1

注意: 主 PLL 控制寄存器可以被器件中的任何主设备访问。

倍频器的 PLLM[5:0]位被PLL控制器中的 PLLM 寄存器控制,PLLM[12:6]位被器件级 MAINPLLCTL0 寄存器控制。 输出除数和 PLL 旁路(Bypass)逻辑被 SECCTL 寄存器相应的域控制。

在 C6678 器件里,只有 PLLDIV2,PLLDIV5 和 PLLDIV8 是可编程的。

主PLL用于驱动内核、交叉开关网络(Swich Fabric)和大多数外围设备的时钟(除了 DDR3 和网络协处理器(PASS))。 主PLL的 PLL 控制器管理不同的时钟分频器。对准和同步。

主 PLL 的 PLL 控制器具有一些 SYSCLK 输出,每个 SYSCLK 具有 一个相应的分频器对 PLL 输出的时钟分频。

注意:除了在下面描述中明确提到可编程的 SYSCLK 外,其他时钟分频器不是可编程的。

SYSCLK1: 用于内核的全比例时钟

SYSCLK2: 1/ x 比例时钟,用于内核(仿真)。默认的比例是 1/3,这是可编程的,范围 从/1 到/32,该时钟最大不能超过 350MHz。

SYSCLK2 可以被软件关掉 SYSCLK3: 1/2 比例时钟,用于 MSMC 时钟、Hyperlink. CPU/2 SCR,DDR EMIF 和 CPU/2 EDMA.

SYSCLK4: 1/3 比例时钟,用于交又开关网络和高速外围设备。Debug_SS 和 ETBs 也 会使用这个时钟

SYSCLK5: 1/y 比例时钟,只用于系统追踪(System Trace)模块。默认比例是 1/5,可 以被配置,最大配置时钟是 210MHz最小配置时钟是 32MHz。SYSCLK5 可以被软件关掉

SYSCLK6: 1/64 比例时钟(emif_ptv),被用于驱动 DDR3 EMIF PVT 补偿缓冲

SYSCLK7: 1/6 比例时钟,用于慢速外围设备和资源的系统输出引脚

SYSCLK8: 1/z 比例时钟,该时钟被用作系统中的慢速系统时钟,默认的比例是 1/64, 可以被编程设置为/24~/80.

SYSCLK9: 1/12 比例时钟,用于 SmartReflex,

SYSCLK10: 1/3 比例时钟,只用于 SRIO。

SYSCLK11: 1/6 比例时钟,只用于 PSC. 

2.1 分频器

时钟分频器(PLLDIV1 至 PLLDIV16)的可编程范围从 ÷1 到 ÷256,并且可以被禁用。当一个时钟分频器被禁用时,该分频器不会输出任何时钟信号。只有在相应的 PLLDIV n 寄存器中启用分频器时,分频器才会输出时钟。

2.2 倍频器

PLL 控制器中的 PLLM 寄存器用于控制 PLL 的 PLLM 逻辑。

2.3 PLL 控制寄存器和次级控制寄存器


        设备复位后,PLL 控制寄存器(PLLCTL)中的 PLL 使能位(PLLEN)的值可以更改,但这不会对 PLL 控制器的功能产生任何影响。要使能 PLLEN 位,必须首先将 PLLCTL 寄存器中的 PLLENSRC 位清除为 0。一旦 PLLEN 位被使能,它就可以用来选择 PLL 控制器的旁路模式或 PLL 模式,如接下来的两节所讨论的。PLLCTL 中的 PLLRST 位用于重置 PLL 控制器。
次级控制寄存器(SECCTL)用于驱动 PLL 的输出分频和旁路逻辑。
根据 PLLCTL 和 SECCTL 寄存器中的 BYPASS、PLLENSRC 和 PLLEN 位的状态,PLL 可以在旁路模式或 PLL 模式下运行,这将在接下来的两节中讨论。

2.4 旁路模式

当BYPASS = 1(在PLL Mux中使能bypass)即处于旁路模式时,PLL的PLLM、PLLD和OUTPUT DIVIDE逻辑被旁路,PLL的输入参考时钟(CLKIN)直接输入到PLL控制器。PLL模块正在以旁路模式运行。
当PLLENSRC=0且PLLEN=0(在PLL控制器复用器中启用旁路)时,整个PLL模块将被旁路,PLL的参考输入被直接作为输入提供给PLL控制器。PLL控制器模块正在以旁路模式运行。

注意 :设备上电时,默认情况下PLL以旁路模式启动。 一旦PLL在PLL模式下初始化完成,除非用户打算关闭设备或重新编程PLL以达到更高的时钟频率,否则不应重新初始化回旁路模式。

 2.5 PLL模式

当BYPASS = 0(在PLL Mux中)即处于PLL模式时,PLL的PLLM、PLLD和OUTPUT DIVIDE逻辑被使用。PLL的输出(PLLOUT)被用作PLL控制器的输入。PLL模块正在以PLL模式运行。
当PLLENSRC=0且PLLEN=1(在PLL Controller mux中)时,PLL的输出(PLLOUT)被用作PLL控制器的输入。PLL控制器模块正在以PLL模式运行。
此外,当使能(DnEN = 1)时,系统时钟分频器(D1-D16)会根据PLLDIVn中的RATIO值对PLL的输出时钟进行分频。系统时钟分频器生成50%占空比的输出时钟SYSCLKn。     

3、主PLL初始化顺序

PLL和PLL控制器在复位后由软件初始化。PLL控制器寄存器应仅由CPU或仿真修改。外部主设备,例如PCIe,不应直接用于访问PLL控制器寄存器。应尽可能在程序开始时,初始化任何外设之前,执行PLL控制器的初始化。设备复位后,必须执行以下软件初始化程序,以正确设置PLL和PLL控制器:

1、位于Bootcfg空间的PLL配置寄存器(MAINPLLCTL0和MAINPLLCTL1)在上电时受到写保护。

2、软件在写入任何芯片级寄存器之前,必须先解锁KICK0和KICK1寄存器。软件在写入任何芯片级寄存器后,必须锁定KICK0和KICK1寄存器,以防止任何意外的更改。

3、用户在启用特定PLL之前,必须确保适用的电源域已启用。例如,在启用ARM PLL之前,必须启用ARM电源域。

3.1 PLL模式初始化


1. 如果在设备上电后立即执行此序列,必须允许时间让PLL稳定。PLL稳定时间为100μs。
2. 检查SECCTL寄存器中的BYPASS位的状态,如果BYPASS == 1(如果启用了旁路),请执行以下步骤;如果BYPASS == 0,则跳至步骤3
   (a) 在MAINPLLCTL1中,写ENSAT = 1(以获得最佳的PLL操作)
   (b) 在PLLCTL中,写PLLEN = 0(在PLL控制器复用器中启用旁路)
   (c) 在PLLCTL中,写PLLENSRC = 0(启用PLLEN控制PLL控制器复用器)
   (d) 等待参考时钟CLKIN的4个周期(以确保PLL控制器复用器正确切换到旁路)
   (e) 在SECCTL中,写BYPASS = 1(在PLL复用器中启用旁路)
   (f) 在PLLCTL中,写PLLPWRDN = 1(关闭PLL)
   (g) 根据参考时钟CLKIN至少等待5微秒(PLL关闭切换时间)
   (h) 在PLLCTL中,写PLLPWRDN = 0(开启PLL。跳至步骤4)
3. 在PLL控制器中启用BYPASS
   (a) 在PLLCTL中,写PLLEN = 0(在PLL控制器复用器中启用旁路)
   (b) 在PLLCTL中,写PLLENSRC = 0(启用PLLEN控制PLL控制器复用器)
   (c) 等待参考时钟CLKIN的4个周期(以确保PLL控制器复用器正确切换到旁路)
4. PLLM被分割在两个不同的寄存器中。在PLL乘数控制寄存器(PLLM)中设置PLLM[5:0],在MAINPLLCTL0寄存器中设置PLLM[12:6]
5. BWADJ被分割在两个不同的寄存器中。在MAINPLLCTL0中设置BWADJ[7:0],在MAINPLLCTL1中设置BWADJ[11:8]。BWADJ[11:0]应该根据方程式BWADJ = ((PLLM+1) >> 1)设置为与PLLM[12:0]值相关的值。
6. 在MAINPLLCTL0寄存器中设置PLLD
7. 在SECCTL中,写OD(输出分频)= 1(即分频为2)
8. 如有必要,设置PLLDIVn。如果PLL以前已经设置为PLL模式并且在此次初始化期间正在重新编程,则不要重新设置PLLDIVn的值。注意,您必须应用GO操作来将这些分频器更改为新的比例(见第3.2节)。
9. 在PLLCTL中,写PLLRST = 1(PLL复位被断言)
10. 根据参考时钟CLKIN至少等待7微秒(PLL复位时间)
11. 在PLLCTL中,写PLLRST = 0(PLL复位被取消断言)
12. 至少等待500 × CLKIN周期 × (PLLD + 1)(PLL锁定时间)
13. 在SECCTL中,写BYPASS = 0(启用PLL复用器切换到PLL模式)
14. 在PLLCTL中,写PLLEN = 1(启用PLL控制器复用器切换到PLL模式)
15. PLL和PLL控制器现在已在PLL模式下初始化。

注意:软件在对PLL中的任何寄存器进行操作时,必须始终执行读-修改-写操作。
这是为了确保只有寄存器中相关的位被修改,包括保留位在内的其余位不受影响。


设备上电时,默认情况下PLL处于旁路模式。一旦PLL在PLL模式下初始化完成,除非用户打算关闭设备或重新编程PLL以达到更高的时钟频率,否则不应重新初始化回旁路模式。

3.2 在PLL模式下重新编程主PLL

一些设备的拓扑结构限制了主电源可以承受的瞬态负载。这些用例可以通过分阶段地提高PLL频率来实现,以减少瞬态功率消耗。例如,可以首先将主PLL初始化为最终设备操作频率的一半,然后在短暂的时间后重新编程PLL到最终设备操作频率。

PLL的重新编程应该只在设备初始启动后的ROM引导加载程序(RBL)初始化期间进行。RBL使用启动模式引脚来确定如何首次编程PLL。如果希望RBL将PLL编程为设备数据手册中给出的选项以外的频率(例如操作频率的一半),可以通过使用启动模式引脚向RBL错误地表示输入时钟频率来实现。在RBL中,每个频率设置为了最小化系统和/或应用程序的影响,PLL的重新编程应该在RBL初始化之后进行——设备应该处于低功耗状态,其中外设应该被关闭,且没有执行应用程序级别的代码。PLL重新编程的顺序与上一节中介绍的顺序相同,只是PLLDIVn对于SYSCLKn的值不得重新编程。

4、分频器n(D1至Dn)和GO操作

4.1 GO操作

GO操作会写入PLLDIV n寄存器中的RATIO字段。寄存器不会立即改变分频器的分频比。只有在GO操作期间,PLLDIV n分频器才会改变为新的RATIO比率。

PLL控制器时钟对齐控制寄存器(ALNCTL)决定了哪些SYSCLKs需要对齐。在GO操作之前,设置ALNCTL以确保在GO操作期间适当地对齐时钟。

通过将PLLCMD中的GOSET位设置为1来启动GO操作。在GO操作期间:
- 如果ALNCTL中的相应ALN n位和DCHANGE中的SYS n位设置为1,则任何SYSCLK n在下降沿暂停。然后PLL控制器会同时重新启动所有这些SYSCLKs,并在上升沿对齐。当SYSCLKs重新启动时,SYSCLK n将以PLLDIV n中RATIO字段设置的速率切换。
- 如果ALNCTL中的相应ALN n位清除,并且DCHANGE中的SYS n位设置,则任何SYSCLK n会立即切换到RATIO字段中新设置的速率。
- PLLSTAT中的GOSTAT位在GO操作期间一直被设置。

注意:为防止错误,在执行GO操作之前,必须停止所有设备操作。

4.2 软件修改PLLDIVn Ratios的步骤

执行以下步骤修改PLLDIV n:
1. 检查PLLSTAT中的GOSTAT位是否已清除,以显示当前没有正在进行的GO操作。
2. 将PLLDIV n中的RATIO字段设置为所需的新分频率。如果RATIO字段改变,PLL控制器将在DCHANGE对应的位上标记这一变化。
3. 在ALNCTL中设置相应的ALN n位,以便在GO操作后对齐任何SYSCLKs。
4. 将PLLCMD中的GOSET位设置为启动GO操作,以改变分频值并按程序对齐SYSCLKs。
5. 读取PLLSTAT中的GOSTAT位,确保该位返回到0,表示GO操作已完成。

5、主PLL电源关闭

PLL可以被关闭电源,在这种情况下,PLL处于旁路模式,而DSP则从一个分频后的输入参考时钟运行。DSP能够响应事件,因为它仍然由旁路时钟(直接来自CLKIN)提供时钟信号,尽管频率较低。

执行以下程序关闭PLL电源:
1. 在SECCTL中,写入BYPASS = 1(旁路模式)。
2. 等待PLLOUT或CLKIN中较慢的一个的4个周期。
3. 在PLLCTL中,写入PLLPWRDN = 1以关闭PLL电源。

6、主PLL唤醒

执行以下程序来从电源关闭模式唤醒PLL:
1. 在SECCTL中,写入BYPASS = 1(旁路模式)。
2. 在PLLCTL中,写入PLLPWRDN = 0以唤醒PLL。
3. 按照第3.1.1节中的PLL复位序列(步骤3至9)来复位PLL。等待PLL锁定并从旁路模式切换到PLL模式。

7、DDR3 PLL初始化顺序

在初始化DDR3 PLL之前,必须先初始化主PLL和PLL控制器。必须按照以下顺序初始化DDR3 PLL:

1. 在DDR3PLLCTL1中,写ENSAT = 1(以获得最佳的PLL操作)。
2. 在DDR3PLLCTL0中,写BYPASS = 1(将PLL设置为旁路模式)。
3. 在DDR3PLLCTL0寄存器中设置PLLM和PLLD。
4. 在DDR3PLLCTL0中设置BWADJ[7:0],在DDR3PLLCTL1中设置BWADJ[11:8]。BWADJ[11:0]应该根据以下公式设置为与PLLM[12:0]值相关的值:BWADJ = ((PLLM+1) >> 1) - 1。
5. 在DDR3PLLCTL1中,写PLLRST = 1(PLL被断言)。
6. 根据参考时钟等待至少5微秒(PLL复位时间)。
7. 在DDR3PLLCTL1中,写PLLRST = 0(取消PLL复位)。
8. 等待至少500 × REFCLK周期 × (PLLD + 1)(PLL锁定时间)。
9. 在DDR3PLLCTL0中,写BYPASS = 0(切换到PLL模式)。
10. DDR PLL现在已初始化。

8、PASS PLL初始化顺序

在初始化PASS PLL之前,必须先初始化主PLL和PLL控制器。必须按照以下顺序初始化PASS PLL:

1. 在PASSPLLCTL1中,写ENSAT = 1(以获得最佳的PLL操作)。
2. 在PASSPLLCTL0中,写BYPASS = 1(将PLL设置为旁路模式)。
3. 在PASSPLLCTL0寄存器中设置PLLM和PLLD。
4. 在PASSPLLCTL0中设置BWADJ[7:0],在PASSPLLCTL1中设置BWADJ[11:8]。BWADJ[11:0]应该根据以下公式设置为与PLLM[12:0]值相关的值:BWADJ = ((PLLM+1) >> 1) - 1。
5. 在PASSPLLCTL1中,写PLLRST = 1(PLL被断言)。
6. 根据参考时钟等待至少5微秒(PLL复位时间)。
7. 在PASSPLLCTL1中,写PLLSELECT = 1(选择PASS PLL的输出作为PASS的输入)。
8. 在PASSPLLCTL1中,写PLLRST = 0(取消PLL复位)。
9. 等待至少500 × REFCLK周期 × (PLLD + 1)(PLL锁定时间)。
10. 在PASSPLLCTL0中,写BYPASS = 0(切换到PLL模式)。
11. PASS PLL现在已初始化。

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

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

相关文章

封装分发安装教程

【安装环境】 Linux伪静态 PHP7.1mysql5.6 SSL 证书 (使用宝塔) 1、在宝塔上面新建站点,把压缩包上传到根目录,解压出来,然后导入 sql 数据库文件,再 然后修改数据库配置 source\system\db_config.php 2、…

变量不自动初始化

代码: /*《AVR专题精选》随书例程2.编程技巧项目:不对变量进行初始化文件:main.c说明:演示不对变量进行默认初始化的方法。在proteus仿真例程中,按下按键,就可以看到两个变量输出结果的变化。作者&#xf…

深度学习(九)——神经网络:最大池化的作用

一、 torch.nn中Pool layers的介绍 官网链接: https://pytorch.org/docs/stable/nn.html#pooling-layers 1. nn.MaxPool2d介绍 nn.MaxPool2d是在进行图像处理时,Pool layers最常用的函数 官方文档:MaxPool2d — PyTorch 2.0 documentation &…

Chromium 开发指南2024 Mac篇-Xcode安装(二)

1.引言 在开始编译和开发 Chromium 之前,确保开发环境的正确配置是至关重要的。对于 Mac 用户来说,Xcode 是不可或缺的工具,因为它不仅提供了必需的编译器和工具链,还包含了与 macOS 系统深度整合的开发资源。在本系列指南的第一…

国内如何高速下载hugginging face模型

国内如何高速下载hugginging face模型 背景 如今开源大模型很多,相较于线上的调用接口,本地部署更有吸引力。这就免不了需要去Huggingface上下载模型,但因为国内管制要求,huggingface 并不能直接访问,或者下载速度很…

Flowable更改默认数据库H2到Mysql数据库

Flowable更改默认数据库H2到Mysql数据库 1、下载flowable安装包,从官方下载,下载后解压缩 2、将flowable-ui.war包拷贝到tomcat里面的webapps目录,tomcat的安装在此就不熬术了。 3、此时启动tomcat,flowable-ui会使用默认的H2…

SVN 报错Error: Unable to connect to a repository at URL解决方法

1. 报错背景: 使用ssh 用svn拉取仓库代码时,出现如下报错: Can’t create session: Unable to connect to a repository at URL svn://127.0.0.1 …. Can’t connect to host ‘127.0.0.1’: Connection refused at C:/Program Files/Git/mi…

开展“安全生产月”活动向媒体投稿的好方法找到了

作为一名单位的信息宣传员,我的职责是确保每一次重要活动的声音都能准确无误地传达到社会的每一个角落。在这样的使命驱动下,我曾一度陷入了一种传统的投稿模式——依赖电子邮件,将精心准备的稿件一封封地发送给各大媒体。初入此行,我满心以为这便是信息传播的路径,却未料到,这…

在Linux中安装中文编程语言洛书

本次安装使用的VMware中的Ubuntu系统虚拟机,尝试下中文编程。 安装洛书 下载官网:洛书——打造开源高效强大的国产编程语言 官方文档:洛书文档中心 (losu.tech) 点击获取 在终端中安装工具 dpkg和rlwrap: sudo apt install d…

代码随想录-Day35

134. 加油站 在一条环路上有 n 个加油站,其中第 i 个加油站有汽油 gas[i] 升。 你有一辆油箱容量无限的的汽车,从第 i 个加油站开往第 i1 个加油站需要消耗汽油 cost[i] 升。你从其中的一个加油站出发,开始时油箱为空。 给定两个整数数组 …

保姆级小白就业人工智能(视频+源码+笔记)

🍅我是小宋, Java学习AI,记录学习之旅。关注我,带你轻松过面试。提升简历亮点(14个demo) 🍅我的java面试合集已有12W 浏览量。🌏号:tutou123com。拉你进专属群。 ⭐⭐你的…

通义千问2(Qwen2)大语言模型在PAI-QuickStart的微调、评测与部署实践

Qwen2(通义千问2)是阿里云最近推出的开源大型语言模型系列,相比2月推出的Qwen1.5,Qwen2实现了整体性能的代际飞跃,大幅提升了代码、数学、推理、指令遵循、多语言理解等能力。其中,Qwen2系列包含5个尺寸的预…

群晖NAS部署在线PS工具Potopea并实现浏览器远程访问处理图片

文章目录 前言1. 部署Photopea2. 运行Photopea3. 群晖安装Cpolar4. 配置公网地址5. 公网访问测试6. 固定公网地址 前言 本文主要介绍如何在群晖NAS本地部署Potopea在线图片PS编辑工具,并结合cpolar内网穿透实现公网环境远程访问本地部署的Potopea处理图片. Photop…

《平衡小车控制系统》电子设计大赛校赛感悟

我们学校举行了一次电子设计大赛选拔赛,虽然我们在测试的时候全部都可以完成,最后考核的时候因为方案选择问题以及各种设计逻辑等原因没能成功晋级,但我能从这次备赛中学到很多东西,遂分享一下,与广大网友交流经验。&a…

嵌入式技术学习——c51单片机——蜂鸣器

一、蜂鸣器介绍 蜂鸣器时一种将电信号转化成声音信号的器件,常用来产生设备的按键音,报警音等提示信号。 蜂鸣器分为有源蜂鸣器,无源蜂鸣器 。 有源蜂鸣器:内部自带震荡源,将正负极街上直流电压即可持续发声&#x…

答应我,完成单位投稿任务用对的方法别让自己受投稿之苦

在这个信息爆炸的时代,单位的形象塑造与品牌传播已成为不可忽视的关键环节。作为单位的信息宣传员,我深知每一次对外发声的重要性,它不仅是展示我们工作成果的窗口,更是连接公众、塑造品牌形象的桥梁。然而,在传统的投稿方式中,尤其是依赖于邮箱投稿,我经历了太多次的挫败与无奈…

国际荐酒师香港协会受邀参加2024年美国独立日庆祝活动

国际荐酒师(香港)协会受邀参加2024年美国独立日庆祝活动促进世界酒中国菜的全球化发展 2024年6月18日,国际荐酒师(香港)协会大中华区驻广州办事处荣幸地接受了美国驻广州总领事馆 Nicholas Burns大使和Lisa Heller总领…

第十二章:会话控制

会话控制 文章目录 会话控制一、介绍二、cookie2.1 cookie 是什么2.2 cookie 的特点2.3 cookie 的运行流程2.4 浏览器操作 cookie2.5 cookie 的代码操作(1)设置 cookie(2)读取 cookie(3)删除 cookie 三、se…

使用 Web Serial API 在浏览器中实现串口通讯(纯前端)

文章目录 目的相关资料使用说明代码与演示总结 目的 串口是非常常用的一种电脑与设备交互的接口。目前在浏览器上直接使用电脑上的串口设备了,这篇文章将介绍相关内容。 相关资料 Web Serial API 相关内容参考如下: https://developer.mozilla.org/en…

【Java面试】二十、JVM篇(上):JVM结构

文章目录 1、JVM2、程序计数器3、堆4、栈4.1 垃圾回收是否涉及栈内存4.2 栈内存分配越大越好吗4.3 方法内的局部变量是否线程安全吗4.4 栈内存溢出的情况4.5 堆和栈的区别是什么 5、方法区5.1 常量池5.2 运行时常量池 6、直接内存 1、JVM Java源码编译成class字节码后&#xf…