本文转自:http://blog.csdn.net/eshing/article/details/37521789

这一章说明配置时钟频率基本原理

OK,接着说,这次先讲讲CPU的系统时钟。U-BOOT在启动的过程中,需要配置系统时钟,没有这东西,CPU就跑不起来。配置系统时钟,大致是以下几个步骤:

(1)设置系统PLL锁定时间

(2)配置PLL

(3)配置各模块分频系数

(4)切换到PLL时钟

一、基本原理

如下图3-1所示是Tiny4412 (Exynos4412)的核心板,板子最上面的是27MHz的晶振,下面一颗是24MHz,顺便讲一下另外几片东西,最左边的两片是内存DDR3-800,这表示数据传输频率为800MHz,外部时钟频率200MHz,内部时钟频率为100MHz(时钟可能有误),背面还有两片;下面的MCL FLASH,外部时钟频率133MHz。

图3-1、Tiny4412核心板图

1、倍频的原理

图3-2、Exynos4412上电启动时序图

上电后时钟设置和上电时序的详细介绍见手册第7章和第60章。上图截取第60章,上电后的XXTI输出的频率变化图,XXTI频率从小变到指定频率需要一段时间(图中标红框的部分),当CPU频率在变化的时候,比如由复位后的初始化值为400MHZ,我要升到1400MHZ,这时,首先把CPU的频率锁定,因为此时CPU的频率是变化的,频率变化,则CPU的状态就无法确定,所以,此时用PLL--phase-lockedloop锁相环,将CPU频率锁定一段时间,直到我的频率输出稳定为止。芯片手册上第2837页上显示APLL默认的设置时间最大要100us(100微秒)。

图3-3、Exynos4412PLL 锁定时间表

锁定频率后,此时,应该设置一个倍频因子,在Exynos4412手册中去查表7-2到7-4中,P,M,S设置对应位的值,然后,将频率提升,比如从晶振输出的24HZ,抬升到1400MHz。

图3-4、P,M,S设置值查找表

接着就是分频了,设置分频相关寄存器中不同的位即可实现分频,比如,设置某一位为0,那么,分频时,原来频率假设为1000MHZ,那么频率就被分为1000/1=1000MHz,这样就可以分给ARMCLK等使用了。

2、开始分析

下图3-5取自芯片手册section02_system的第3章 CLOCKCONTROLLER,在开篇的P353页的第一张图就是这个。

图3-5、Exynos4412时钟框图

Exnnos4412的Clock分为5个大的domain,分别是LEFTBUSS,MAUDIO(CMU_TOP),DMC,CPU,RIGTHBUS,这五个区域分别管理不同的设备,为不同的设备提供不同的频率,如下表3-1所示。

表3-1、Exynos4412时钟频率说明表

再往下翻,这些不同设备的频率是如何产生的呢?可以查看手册P451页图表,下图3-6为部分图片截图。

图3-6、Exynos4412各模块时钟产生过程

由上图3-6可知,通过XOM[0]选择产生频率输入源,由于启动设置时,XOM[0]被设置为0,那么APLL的时钟源应是XXTI,但电路板中XXTI是没有用的,通过一个电阻接地了,如下图2-7所示,这一点我也一直没有想明白?有谁明白了可以告诉我。我暂且认为内部有什么寄存器,可以改变这个值,设置成了1,通过APLL倍频后得到时钟FOUTapll,可以做为新的时钟源进行分频后给其他IP核使用。

那么,在硬件上是如何实现的呢?观察开发板上晶振有三颗,一个24MHz,一个27MHz。晶振,(全名晶体振荡器,成份石英(二氧化硅),晶振用于通过压电效应给CPU提出振荡频率,再通过别的电路,将例如正弦曲线波转换成方波,相当于CPU的起搏器,有了晶振,CPU才有频率输出)。如果CPU输入24MHz频率后,此时,就需要把频率放大了(否则CPU才24MHz的频率能干吗呢?所以,CPU并不是一上电就跑到几GHz上面去了,跑车再好,跑的再快,从0加速到100码,也需要一段时间,所以没有一上电就几G这回事儿),在频率放大的过程中,首先需要考虑的一个问题就是——锁相环。简单的说,比如复位后,CPU默认工作频率在400MHz,现在需要升到1400MHz工作,那么从400-->1400MHz需要一个过程,假设为时间t1,在t1这段时间内,CPU的频率是变化的,那么CPU的状态就是不稳定的,此时,就需要把频率锁定,设置锁定时间,直到CPU稳定的输出频率。

图3-7、Exynos4412外部时钟连接图

CPU第一次启动时,第五章中已有说明,IROM中的代码将PLL已默认的初始化了,在芯片手册找到93页,可查看到其默认的初始频率:

图3-8、Exynos4412默认频率设置说明图

可见,当外部晶振是24MHz时,内部APLL和MPLL分别为400MHZ

由上图3-8查出可知,ARMCLK的默认频率为400MHz

1)查看芯片手册的P444页,查出总共有以下几种由CMU输出的时钟

有四种PLLs(APLL,MPLL,EPLL,HPLL),还包括USB_OTGPHY clock。

The components to generate internalclocks are:

•APLL uses FINPLL as input to generatefrequencies from 22 to 1400 MHz.

•MPLL uses FINPLL as input to generatefrequencies from 22 to 1400 MHz.

•EPLL uses FINPLL as input to generatefrequencies from 22 to 1400 MHz. This PLL generates a 192 MHz clock for theAudio Sub-system. It divides EPLL output to generate 24 MHz SLIMbus clock.

•VPLL uses FINPLL or SCLK_HDMI24M asinput to generate frequencies from 22 to 1400 MHz. This PLL generates 54 MHzvideo clock or G3D clock.

•USB Device PHY uses XUSBXTI to generatefrequencies of 30 and 48 MHz.

•HDMI PHY uses XUSBXTI to generate 54MHz.

常用的APLL/MPLL/EPLL/VPLL是干什么的呢?看P446页

•APLLmainly drives the CPU_BLK clocks. It generates frequencies up to 1.4 GHz with aduty ratio of 49:51. APLL also generates DMC_BLK, LEFTBUS_BLK, RIGHTBUS_BLK,and CMU_TOP clocks as supplement of MPLL.

•MPLL mainly drives the DMC_BLK,LEFTBUS_BLK, RIGHTBUS_BLK, and CMU_TOP clocks. It generates frequencies up to 1GHz with a duty ratio of 49:51. MPLL also generates CPU_BLK clocks when itblocks APLL for locking during the Dynamic Voltage Frequency Scaling(DVFS).

•EPLL mainly generates an audio clock.

•VPLL mainly generates video systemoperating clock of 54 MHz, or a G3D clock, or 440 MHz clock at 1.1 V.

先查看APLLPMS的倍频表,如下表3-2所示,看P447的Table7-2 APLL and MPLL PMS Value。

表3-2、APLLand MPLL PMS Value

可查看到设置P/M/S的值,可以将频率拉升到我们想要的频率。设置的寄存器名称一般是:xPLL_CONx。如APLL的倍频寄存器的为APLL_CON0。

但在倍频之前,我们说过,先要让锁相环锁频功能成功,前面说过我们要等待一定的locktime时间,而手册上显示APLL的locktime最大为100us,如果是晶振输出的频率是24MHZ,locktime取值30毫秒,那么PLL_LOCKTIME是720,也就是0x2D0。那么我们就用这个值去设置APLL_LOCK寄存器。

翻看查找手册,基他相关的寄存器地址如下:

• (APLL_LOCK,R/W, Address = 0x1004_0000)

• (MPLL_LOCK, R/W, Address =0x1004_0000)

• (EPLL_LOCK, R/W, Address = 0x1003_0000)

• (VPLL_LOCK, R/W, Address =0xE010_0020)

下一节,结合实际的代码来说明如何设置这些值。

第三章、Tiny4412 U-BOOT移植三 时钟设置【转】的更多相关文章

  1. 进击的Python【第三章】:Python基础(三)

    Python基础(三) 本章内容 集合的概念与操作 文件的操作 函数的特点与用法 参数与局部变量 return返回值的概念 递归的基本含义 函数式编程介绍 高阶函数的概念 一.集合的概念与操作 集合( ...

  2. 第三章Android移植平台工具介绍

    第三章Android移植平台工具介绍 进行 Android 移植的学习并不一定需要一款 Android 手机,但必须要有一款主流的开发板,开发板是用来进行嵌入式系统开发的电路板,包括中央处理器.存储器 ...

  3. spring boot 笔记--第三章

    spring boot 笔记 第三章,使用Spring boot 构建系统: 强烈建议支持依赖管理的构建系统,Maven或Gradle 依赖管理: Spring Boot的每版本都会提供它支持的依赖列 ...

  4. Android系统移植与驱动开发--第三章 Git使用入门及在学习中有感

    第三章 Git使用入门 使用Git的目的是减少各种版本的Linux的压缩大小,提供源代码在Linux上进行编译. 在这一个章节中,其实就是关键步骤的操作,虽然Git与我们学习的android没有很大的 ...

  5. [转]Windows Shell 编程 第三章 【转自:http://blog.csdn.net/wangqiulin123456/article/details/7987901】

    第三章 操作文件 我依然清楚地记得,Windows95 的贝塔版出现的情形,它在朋友之间和学院中传播,好酷,全新的文件管理器,一种全图标,全彩色可客户化的界面,以及活泼的动画标识使得在文件拷贝和删除方 ...

  6. 第三章 传奇的开始--Delphi(附读书笔记)

    第三章 传奇的开始--Delphi "是惊世之作的Delphi让Borland重新站了起来,没有当初的Delphi,就没有今日的Borland!" "是Turbo Pas ...

  7. 精读《C++ primer》学习笔记(第一至三章)

    第一章: 重要知识点: 类型:一种类型不仅定义了数据元素的内容,还定义了这类数据上可以进行的运算:所以说类定义,实际上就是定义了一种数据类型: >>和<<运算符返回其左侧的运算 ...

  8. CentOS 7.4 初次手记:第三章 CentOS基础了解

    第三章 CentOS基础了解... 36 第一节 语言编码.终端... 36 I 查看语言编码... 36 II Tty?.pts/?. 36 第二节 bash/sh command. 38 I 查找 ...

  9. [转]TEC1401.Report开发技术总结 - 第三章 使用Oracle Reports开发报表-创建一个分组报表(2/4)

    本文转自:http://blog.csdn.net/deepsea_allen/article/details/53900284 第三章   创建一个分组报表 1.     建立数据模型 数据模型用于 ...

随机推荐

  1. centos右上角wired图标消失有效解决方案

    最近在学习Linux配置nginx时,左上角的wired图标突然没了,很神奇.然后在网上按着很多博客说的去改,都没用,最后终于根据下面参考博客内的方案解决了问题,嘿嘿. mv /var/lib/Net ...

  2. TWaver 3D应用于大型数据中心(续)

    在2014年11月份,我们当时发了一篇有关TWaver HTML5 3D应用于大型数据中心的文章,该blog比较详细的描述一些常用的功能的实现方法,比如:动态添加机柜,告警,温度,湿度等相关的功能的具 ...

  3. 13jsp、javaWeb开发模式

    13jsp.javaWeb开发模式-2018/07/25 1.jsp jsp实际上就是servlet.jsp=html+java,为用户提供动态内容 不适合编写Java逻辑 2.JSP原理 翻译(生成 ...

  4. HDU - 2050 - 折线分割平面(数学 + dp)

    题意: 我们看到过很多直线分割平面的题目,今天的这个题目稍微有些变化,我们要求的是n条折线分割平面的最大数目.比如,一条折线可以将平面分成两部分,两条折线最多可以将平面分成7部分 思路: 记住结论.. ...

  5. python3.x Day3 文件编码

    文件编码: 知识点不多,但及其重要,python2和python3处理机制还有不同点,需要注意. 首先: 编码.数据类型,完全不同的概念. 文件编码:可以遵循开发环境.可以自行设定. 变量值编码:py ...

  6. 【jenkins】UnicodeEncodeError: 'ascii' codec can't encode character

    https://stackoverflow.com/questions/6076203/how-do-you-set-the-default-encoding-in-jenkins

  7. vue中axios设置

    //设置默认全局baseURL axios.defaults.baseURL=process.env.BASE_API; //设置默认全局携带浏览器cookie axios.defaults.with ...

  8. https://segmentfault.com/a/1190000012844836---------关于SpringBoot上传图片的几种方式

    关于SpringBoot上传图片的几种方式 https://segmentfault.com/a/1190000012844836

  9. 清北学堂模拟赛d1t1 位运算1(bit)

    题目描述LYK拥有一个十进制的数N.它赋予了N一个新的意义:将N每一位都拆开来后再加起来就是N所拥有的价值.例如数字123拥有6的价值,数字999拥有27的价值.假设数字N的价值是K,LYK想找到一个 ...

  10. poj 2112

    #include <cstdio> #include <cstring> ;//点数的最大值 ;//边数的最大值 const int INF=0x3fffffff; struc ...