[S5PV210] Clock

发布者:JoyousJourney最新更新时间:2024-12-04 来源: cnblogs关键字:Clock 手机看文章 扫描二维码
随时随地手机看文章

S5PV210 clock划分3个域:

MSYS:Main System (200MHz)

DSYS:Display System (166MHz)

PSYS:Peripheral System (133MHz)

每个域又不同器件组成,每个域之间由异步的Birdge连接。如下图:

 

时钟源

S5PV210顶层的时钟源有4个,分别是:XRTCXTI、XXTI、XUSBXTI、XHDMIXTI,他们的频率和作用各不相同。

先看硬件电路图

可以看到4个时钟源分别是2个24MHz、27MHz、32.768KHz,通过XRTCXTI、XXTI、XUSBXTI、XHDMIXTI这4根pin输入到S5PV210里面。

TODO:XRTCXTO、XXTO、XUSBXTO、XHDMIXTO作用是上电?

接着看一下4个时钟源进入S5PV210之后是怎么利用的:

首先,4个时钟源会被传送到RTC、System Timer、USB、HDMI等子系统中被使用;

除此之外,也有部分时钟源会被送入SYSCON(System Controller)里面,SYSCON会配置APLL、MPLL、VPLL、EPLL这些锁相环电路(倍频作用),并将时钟源输入到PLL中进行倍频,然后接收倍频后的clock,最后将这些clock分频,并输入到不同的子系统中。

在上图的右上角,可以看到一系列倍频和分频后的clock,大体分为3类:

ARMCLK:给CPU使用的时钟,最高可以达到1GHz,即CPU支持的最高频率。

(H/P)CLK_(M/D/P)SYS:H代表AHB、P代表APB。这6种clock可以对应 时钟域 章节的图看。

           HCLK_MSYS = 200MHz;PCLK_MSYS = 100MHz;HCLK_DSYS = 166MHz;PCLK_DSYS = 83MHz;HCLK_PSYS = 133MHz;PCLK_PSYS = 66MHz (以上均为最大频率)

Special Clock:其它clock。

 

PLL、MUX、DIV

将一下时钟源从输入到SYSCON到输出一些列clock的过程,先看下图:

上图涉及到三种电路:

PLL:锁相环电路,用于倍频; MUX:选择电路; DIV:分频电路

根据SPEC的建议,几个PLL的功用如下:

APLL:提供MSYS的时钟,最高1GHz

MPLL:提供DSYS的时钟,最高2GHz

EPLL:提供Audio时钟

VPLL:提供Video时钟,54MHz

 

寄存器设定

PLL LOCK设定

  当PLL的输入频率发生改变时,PLL需要一个lock time,根据PLL的寄存器参数不同,lock time也不同,相关寄存器:APLL_LOCK / MPLL_LOCK / EPLL_LOCK / VPLL_LOCK,使用默认值即可。

PLL设定

  设定PLL的M、P、S参数,来决定倍频倍数。

  参考SPEC:

  

DIV设定

  

  (H/P)CLK_(M/D/P)SYS 的值之前已提到,根据上图中的公式计算即可。

MUX设定

  

  这要根据上面的MUX图来设定,我们已经知道APLL提供MSYS的时钟,MPLL提供DSYS的时钟,其中:

  A/M/E/VPLL_SEL:图中前半部分的MUX。

  MUX_P/D/MSYS_SEL&ONENAND_SEL:图中后半部分的MUX。


Uboot Clock 初始化代码


#define APLL_CON (*(volatile unsigned int *)0xE0100100)

#define MPLL_CON (*(volatile unsigned int *)0xE0100108)

#define CLK_SRC0 (*(volatile unsigned int *)0xE0100200)

#define CLK_DIV0 (*(volatile unsigned int *)0xE0100300)

#define APLL_LOCK (*(volatile unsigned int *)0xE0100000)

#define MPLL_LOCK (*(volatile unsigned int *)0xE0100008)


/**

 * PLL - 只初始化 APLL 和 MPLL

 * APLL can drive MSYS domain and DSYS domain. It can generate up to 1 GHz, 49:51 duty ratio.

 * MPLL can drive MSYS domain and DSYS domain. It supplies clock, up to 2 GHz and 40:60 duty ratio.

 * EPLL is mainly used to generate audio clock.

 * VPLL is mainly used to generate video system operating clock, 54 MHz.

 * Typically, APLL drives MSYS domain and MPLL drives DSYS domain.

 */


/**

 * Values for the high-performance operation:

 * freq(ARMCLK) = 1000 MHz

 * freq(HCLK_MSYS) = 200 MHz

 * freq(HCLK_IMEM) = 100 MHz

 * freq(PCLK_MSYS) = 100 MHz

 * freq(HCLK_DSYS) = 166 MHz

 * freq(PCLK_DSYS) = 83 MHz

 * freq(HCLK_PSYS) = 133 MHz

 * freq(PCLK_PSYS) = 66 MHz

 * freq(SCLK_ONENAND) = 133 MHz, 166 MHz

 */



void clock_init(void)

{

    /* 1. 设置MUX,不使用PLL,待PLL设定完后再打开 */

    CLK_SRC0 = 0;


    /* 2. 设置PLL_LOCK time: 时钟从Fin提升到Fout的时间, 使用默认值 */

    APLL_LOCK = 0x00000FFF;

    MPLL_LOCK = 0x00000FFF;


    /**

     * 3. 设置 Divider

     * PCLK_PSYS_RATIO : [30:28]

     *         PCLK_PSYS = HCLK_PSYS / (PCLK_PSYS_RATIO + 1) -->  66 = 133 / (PCLK_PSYS_RATIO + 1)

     *         PCLK_PSYS_RATIO = 1

     * HCLK_PSYS_RATIO : [27:24]

     *         HCLK_PSYS = MOUT_PSYS / (HCLK_PSYS_RATIO + 1) -->  133 = 667 / (HCLK_PSYS_RATIO + 1)

     *         HCLK_PSYS_RATIO = 4

     * PCLK_DSYS_RATIO : [22:20]

     *         PCLK_DSYS = HCLK_DSYS / (PCLK_DSYS_RATIO + 1) -->  83 = 166 / (PCLK_DSYS_RATIO + 1)

     *         PCLK_DSYS_RATIO = 1

     * HCLK_DSYS_RATIO : [19:16]

     *         HCLK_DSYS = MOUT_DSYS / (HCLK_DSYS_RATIO + 1) -->  166 = 667 / (HCLK_DSYS_RATIO + 1)

     *         HCLK_DSYS_RATIO = 3

     * PCLK_MSYS_RATIO : [14:12]

     *         PCLK_MSYS = HCLK_MSYS / (PCLK_MSYS_RATIO + 1) -->  100 = 200 / (PCLK_MSYS_RATIO + 1)

     *         PCLK_MSYS_RATIO = 1

     * HCLK_MSYS_RATIO : [10:8]

     *         HCLK_MSYS = ARMCLK / (HCLK_MSYS_RATIO + 1) -->  200 = 1000 / (HCLK_MSYS_RATIO + 1)

     *         HCLK_MSYS_RATIO = 4

     * A2M_RATIO : [6:4]

     *         SCLKA2M = SCLKAPLL / (A2M_RATIO + 1) -->  (SCLKA2M<=400) = 1000 / (A2M_RATIO + 1)

     *         A2M_RATIO = 3

     * APLL_RATIO : [2:0]

     *         ARMCLK = MOUT_MSYS / (APLL_RATIO + 1) --> 1000 = 1000 / (APLL_RATIO + 1)

     *         APLL_RATIO = 0

     */

    CLK_DIV0 = (1 << 28) | (4 << 24) | (1 << 20) | (3 << 16) | (1 << 12) | (4 << 8) | (3 << 4) | (0 << 0);


    /* 4. 设置PLL */

    /**

     * APLL: M=125, P=3, S=1 FOUT = (MDIV X FIN )/ (PDIV X 2 (SDIV-1) )) = 1000MHz

     *

     * ENABLED [31] : 1 = enable PLL controller

     * LOCKED [29] : 1 = LOCKED

     * MDIV [25:16] : 125

     * PDIV [13:8] : 3

     * SDIV [2:0] : 1

     */

    APLL_CON = (1 << 31) | (1 << 29) | (125 << 16) | (3 << 8) | (1 << 0);


    /**

     * MPLL: M=667, P=12, S=1 FOUT = (MDIV X FIN) / (PDIV X 2 SDIV ) = 667MHz

     *

     * ENABLED [31] : 1 = enable PLL controller

     * VSEL [27] : 0

     * MDIV [25:16] : 667

     * PDIV [13:8] : 12

     * SDIV [2:0] : 1

     */

    MPLL_CON = (1 << 31) | (0 << 27) | (667 << 16) | (12 << 8) | (1 << 0);


    /**

     * 5. 设置MUX,选择PLLout

     * 下面4位表示MSYS,DSYS,PSYS选择哪个PLL作为输入原

     * ONENAND_SEL [28] : 1

     * MUX_PSYS_SEL [24] : 0

     * MUX_DSYS_SEL [20] : 0

     * MUX_MSYS_SEL [16] : 0

     * 下面4位表示是否使用倍频后的时钟信号(PLL)

     * VPLL_SEL [12] : 1

     * EPLL_SEL [8] : 1

     * MPLL_SEL [4] : 1

     * APLL_SEL [0] : 1

     */

    CLK_SRC0 = (1 << 28) | (1 << 12) | (1 << 8) | (1 << 4) | (1 << 0);

}


关键字:Clock 引用地址:[S5PV210] Clock

上一篇:[S5PV210] PWM
下一篇:[S5PV210] 网络挂载文件系统

推荐阅读最新更新时间:2026-03-25 12:35

S5PV210时钟,看门狗定时器
晶振:时钟源(操作主要有两个,倍频,分频) A8的时钟源: 时钟域,每个时钟域(不同的最高频率和最低频率)管理着不同的电路模块: 不同的时钟域对应不同电路模块表 时钟电路:懂得看时钟电路(时钟源选择开关配置(MUX_apll),倍频的配置(APLL),分频的配置(DIV_apll)) 更具体可参看arm,007笔记 ----------------------------------------------------------------------------------------------- 看门狗定时器: 功能: 1、定时器:设置一个定时器基准频率,设置一个超时数据值,数据值根据频率来不断减1,减为0
[单片机]
<font color='red'>S5PV210</font><font color='red'>时钟</font>,看门狗定时器
s5pv210时钟系统概述
S5PV210的时钟系统 (外部晶振+内部时钟发生器+内部PLL产生高频时钟+内部分频器分频得到各种频率的时钟) 1.为什么要时钟系统? SoC内部有很多器件,譬如CPU、串口、DRAM控制器、GPIO等内部外设,这些东西要彼此协同工作,需要一个同步的时钟系统来指挥 2.为什么要内部先高频然后再分频? 主要因为SoC内部有很多部件都需要时钟,而且各自需要的时钟频率不同,没法统一供应。因此设计思路是PLL后先得到一个最高的频率(1GHz、1.2GHz),然后各外设都有自己的分频器再来分频得到自己想要的频率。 3.S5PV210建议工作频率800MHz~1.2GHz,一般我们都设置到1GHz主频(CPU的频率,最高的频率,
[单片机]
s5pv210——初始化时钟
1:s5pv210的时钟域 MSYS Domain:为处理器、3D、intc(中断)、DMC0、DMC1、IRAM、IROM提供时钟,HCLK_MSYS:200MHZ、PCLK_MSYS:100MHz DSYS Domain:为音视频等设备提供时钟,HCLK_DSYS:166MHZ、PCLK_DSYS:83MHz PSYS Domain:为外设提供时钟,如GPIO、I2C、PWM、UART、WDT等。HCLK_PSYS:133MHZ、PCLK_PSYS:66MHz 2:s5pv210的晶振 s5pv210有4个晶振时钟, XRTCXTI:提供32.768KHz,RTC 使用;XRTCXTI and XRTCXTO pins
[单片机]
<font color='red'>s5pv210</font>——初始化<font color='red'>时钟</font>
S5PV210时钟域详解
1、MSYS域: ARMCLK: 给CPU内核工作的时钟,也就是所谓的主频。 HCLK_MSYS: MSYS域的高频时钟。给(DMC0和DMC1)使用。 PCLK_MSYS: MSYS域的低频时钟。 HCLK_IMEM: 给iROM和iRAM(合称iMEM)使用。 2、DSYS域: HCLK_DSYS: DSYS域的高频时钟。 PCLK_DSYS: DSYS域的低频时钟。 3、PSYS HCLK_PSYS: PSYS域的高频时钟。 PCLK_PSYS: PSYS域的低频时钟。 SCLK_ONENAND: 总结:210内部的各个外设都是接在(内部AMBA总线)总线上面的,AMBA总线有1条高频分支叫AHB,有一条低频分支
[单片机]
s5pv210时钟体系框图详解
1、两张图之间是渐进的关系。第一张图从左到右依次完成了原始时钟生成—— PLL倍频得到高频时钟—— 初次分频得到各总线时钟;第二张图是从各中间时钟(第一张图中某个步骤生成的时钟)到各外设自己使用的时钟(实际就是个别外设自己再额外分频的设置)。第一张图是理解整个时钟体系的关键,第二张图是进一步分析各外设时钟来源的关键。 2、要看懂时钟体系框图,2个符号很重要:一个是MUX开关,另一个是DIV分频器。(反应在软件编程中就是两个寄存器设置) (1)MUX开关就是个或门,实际对应某个寄 存器的某几个bit位的设置,设置值决定了哪 条通道是通的,(要对应时时钟框图分析)分析这个可以知道右边的时钟是从左边哪条路过来的,从而知道右边时钟是多
[单片机]
<font color='red'>s5pv210</font><font color='red'>时钟</font>体系框图详解
S5PV210(TQ210)学习笔记——系统时钟和串口
TQ210的系统时钟配置和串口配置非常简单,本文从TQ210的系统时钟配置开始讨论。 TQ210的时钟配置跟2440/6410的时钟配置差不多,只是锁相环的个数略有不同,配置步骤是一样的。配置系统时钟,无非要经过以下几个步骤: (1)设置系统PLL锁定时间 (2)配置PLL (3)配置各模块分频系数 (4)切换到PLL时钟 简单的看着四步似乎没有头绪,但是看到手册中的 S5PV210时钟生成线路图 就可以理解了,现在截图如下: 上图中无非就三种模块,PLL、MUX和DIV,MUX控制时钟源选择,PLL负责生成PLL时钟,DIV负责分频。 为了系统稳定,在设计电路时我们一般不会使用太高频率的晶振(避免高频线间/层间干
[单片机]
<font color='red'>S5PV210</font>(TQ210)学习笔记——系统<font color='red'>时钟</font>和串口
S5PV210 三个Camera Interface/CAMIF/FIMC的区别
S5PV210有三个CAMIF单元,分别为CAMIF0 CAMIF1和CAMIF2。对应着驱动中的fimc0, fimc1, fimc2。在三星datasheet和驱动代码中CAMIF和FIMC(Fully Interactive Mobile Camera)这两个术语基本上可以互换的,后面我们都用FIMC代替CAMIF。这两个术语的称呼有很强的模糊性,尤其刚刚接触三星平台,会觉得这三个接口设备都是用来控制camera,实际上三个接口并不局限于只控制camera。 我们先看下datasheet中定义的CAMIF feature - 输入支持 1. ITU-R BT601/656/709 mode 2. DMA模式 3.
[单片机]
Linux-3.0.8中基于S5PV210的IRQ模块代码追踪和分析
init/main.c: 1 asmlinkage void start_kernel(void) 2 { 3 ...... 4 early_irq_init(); 5 init_IRQ(); 6 ...... 7 } early_irq_init()函数有两种实现,一种是基于radix tree,一种是定义静态数组,如果要使用radix tree实现的,那么需要打开SPARSE_IRQ配置选项,由于我对数据结构不了解,所以分析以下静态数组实现方式版本的。 /kernel/irq/irqdesc.c 1 struct irq_desc irq_desc __cacheline_aligned_in_
[单片机]
小广播
最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

厂商技术中心

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2026 EEWORLD.com.cn, Inc. All rights reserved