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

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.mzph.cn/news/855387.shtml

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

相关文章

MT8766安卓4G核心板_MTK联发科PCBA方案开发

MT8766是联发科四核4G模块方案,安卓一体板。 采用台积电 12 nm FinFET 制程工艺,4*A53架构,Android 9.0操作系统,搭载2.0GHz 的 Arm NEON 引擎。提供了支持最新 OpenOS 及其要求苛刻的应用程序所需的处理能力,专为具有…

自然语言处理(NLP)—— 神经网络自然语言处理(Neural NLP)基础知识

1. 文章概览 本文是关于神经网络自然语言处理(Neural NLP)的概览,涵盖了基础原则、历史概览、处理流程、神经网络架构以及最近的训练范式。 1.1 基本原则 这部分会讲述自然语言处理(NLP)与神经网络在处理语言任务时遵…

关于UnityWebgl缓存机制

最近在做UnityWebgl热更的时候,我的热更程序集更新,而我所有运行过项目的设备都没有更新成功。而没运行过的设备则运行的是最新的程序集。那么说明必然是和缓存有关系了。 特意查了一下问题,发现Edge浏览器会把一些比较小的图片、脚本等资源进…

Android framework配置默认屏幕亮度值源码分析

1、概述 在Android中,config.xml文件用于配置各种系统设置和资源。对于屏幕亮度的配置,config.xml并不是直接用于设置屏幕亮度的地方,但它可以包含默认的系统设置和一些相关的参数。以下是如何在config.xml中配置一些与屏幕亮度相关的设置的…

yolov9-pytorch 深度学习目标检测算法模型

YOLOv9 论文 https://arxiv.org/abs/2402.13616 模型结构 YOLOv9将可编程梯度信息 (PGI) 概念与通用 ELAN (GELAN)架构相结合而开发,代表了准确性、速度和效率方面的重大飞跃。 算法原理 Yolov9将可编程梯度信息(PGI)和GLEAN&#xff08…

Swagger3.0接口生成并导入YApi

一、引入依赖 <!--Swagger-UI API文档生产工具--><dependency><groupId>io.springfox</groupId><artifactId>springfox-boot-starter</artifactId><version>3.0.0</version></dependency><!--解决Swagger访问主页时的…

PHP实现企业微信素材上传与获取的完整指南与踩坑日记

企业微信作为一款专门为企业打造的即时通讯工具&#xff0c;提供了丰富的功能和接口&#xff0c;其中包括素材管理。素材管理在企业内部的沟通、分享和展示中起着重要的作用。本篇文章将介绍如何使用PHP语言对接企业微信素材上传和获取的功能。 ## 1. 准备工作 首先&#xff0…

课设--学生成绩管理系统(三)

欢迎来到 Papicatch的博客 文章目录 &#x1f349;报告目的 &#x1f349;总体设计 &#x1f348; 模块处理逻辑 &#x1f349;数据库设计 &#x1f348;总览表 &#x1f348;表设计 &#x1f34d;管理员信息表 &#x1f34d;课程基本信息表 &#x1f34d;课程扩展信息…

19.Docker跨宿主机容器之间的通信macvlan

Docker跨宿主机容器之间的通信macvlan&#xff0c;类似桥接网络模式 macvlan通信类型&#xff0c;设置IP地址只能手动指定&#xff08;–ip&#xff09;一台一台设置IP地址 默认一个物理网卡&#xff0c;只有一个物理mac地址&#xff0c;虚拟多个mac地址&#xff08;让人感觉是…

Vue62-配置代理-方式一

一、业务场景 有两个服务器&#xff1a; 二、可用的ajax请求 推荐使用&#xff1a;axios。 三、axios发送请求 报错原因&#xff1a;跨域&#xff0c;违背了同源策略&#xff1a;协议名&#xff0c;主机名&#xff0c;端口号&#xff01; 四、同源策略 4-1、跨域请求问题…

python5 正则表达式

Python中的正则表达式是一种强大的工具&#xff0c;用于在文本中搜索、匹配和处理特定模式的字符串。它们通过定义一种模式&#xff0c;使得可以轻松地搜索、替换、提取和验证文本数据&#xff0c;在Python中的正则表达式由re模块提供支持的。 正则表达式通常用于以下任务&…

UE4_材质_雨滴涟漪效果ripple effect_ben教程

学习笔记&#xff0c;不喜勿喷&#xff01;侵权立删&#xff0c;祝愿生活越来越好&#xff01; 雨水落下时会产生这些非常漂亮的同心环波纹&#xff0c;我们要做的第一件事是创建一个单个的圆环遮罩动画&#xff0c;我们希望环在开始的时候在中心很小&#xff0c;然后放大&…

音频基础知识和音频指标

音频基础知识 声音 声音&#xff08;sound)是由物体振动产生的声波。物体在一秒钟之内振动的次数叫做频率&#xff0c;单位是赫兹&#xff0c;字母Hz。人耳可以识别的声音频率在 20 Hz~20000 Hz之间&#xff1b; 声音三要素&#xff1a; 响度 响度&#xff0c;…

kaggle notebook和jupyter notebook读取csv

kaggle本地比赛用打开notebook的示例代码可以获取当前比赛的文件数据路径&#xff0c;进而后续直接复制读取 jupyter notebook读取csv 直接下载数据集到电脑上&#xff0c;并用本地路径读取就行。

无线备网,保障连锁零售数字化运营

为了提升运营效率、改进客户体验&#xff0c;零售商们不断引入新的数字化工具和平台&#xff0c;包括数字化收银、客流统计、客户关系管理系统等。现代化智慧零售的运营更加依赖于稳定、高效的网络连接&#xff0c;数字化网络不仅是提升运营效率和客户体验的关键&#xff0c;还…

HTML+CSS+PHP实现网页留言板功能(需要创建数据库)

话说前头&#xff0c;我这方面很菜滴。这是我网页作业的一部分。 1.body部分效果展示&#xff08;不包括footer&#xff09; 2、代码 2.1 leaving.php&#xff08;看到的网页&#xff09; <!DOCTYPE html> <html lang"en"> <head> <met…

分数限制下,选好专业还是选好学校

目录 1.概述 1.1.综合考虑 1.2.个人经验分享 2.专业解析 2.1. 计算机科学与技术 2.2. 英语 2.3. 法学 2.4.专业VS学校 2.5.建议 3.名校效应分析 3.1. 名校声誉&#xff08;品牌效应&#xff09; 3.2. 资源获取 3.3. 学术氛围 3.4. 就业优势 3.5.小结 4.好专业和…

【启明智显产品分享】Model4 工业级HMI芯片详解(三):高安全、防抄板

Model4 工业级HMI芯片详解系列专题&#xff08;三&#xff09;【高安全、防抄板】 随着物联网和智能设备的快速发展&#xff0c;设备安全认证的需求日益迫切。硬件安全认证和保护在确保设备和身份安全中发挥着不可替代的作用&#xff0c;需要与软件安全相结合&#xff0c;共同构…

vue修改node_modules打补丁步骤和注意事项_node_modules 打补丁

1、vue-pdf问题解决及patch-package简介&#xff1a;https://www.jianshu.com/p/d1887e02f8d6 2、使用“黑魔法”优雅的修改第三方依赖包&#xff1a;https://zhuanlan.zhihu.com/p/412753695 3、使用patch-package定制node_modules中的依赖包&#xff1a;https://blog.csdn.…

git使用摘樱桃的方式,实现特定需求进行提交合并

文章目录 先checkOut到主要的分支(需求提交到这) 然后双击点别的需求分支,对提交内容选定 进行摘樱桃操作 然后双击回到主要分支,会发现那2个提交内容代码已经在主要分支的本地里,选中其 右键选择Squash Commits进行合并 标注自己的需求标题提交名更改后, 最后进行push推送到…