S5pv210 时钟体系分析

S5PV210 时钟体系

如下面时钟结构图所示,S5PV210 中包含 3 大类时钟域, 分别是主系统时钟域(简称 MSYS)、显示相关的时钟域(简称 DSYS)、 外围设备的时钟域(简称 PSYS)。

1) MSYS:用来给 cortex a8 处理器、DRAM 控制器、3D、IRAM、IROM、INTC(中断控制器)等提供时钟;
2) DSYS:用来给显示相关的部件提供时钟,包括 FIMC、FIMD、JPEG 和 multimedia IPs;
3) PSYS:用来给外围设备提供时钟,如 i2s、spi、i2c、uart 等。

Mini210S 外接的晶振频率(简称 Fin)为 24MHz,通过时钟控制逻辑 PLL 可以提高系统时钟。
S5PV210 共有 4 个倍频器,即 PLL, 包括 APLL(供 MSYS 使用),MPLL(供 DSYS 使用),EPLL(供 PSYS使用),VPLL(供 video 相关的时钟使用)。 3 大类时钟域中,可以使用不同的分频,使其给不同部件输出所需要的时钟,各类时钟的关系如下图:

芯片手册上给出了参考值, 我们按照参考值设置即可, 各类时钟的参考值如下图:

时钟初始化程序

#define APLL_MDIV        0x7d
#define APLL_PDIV        0x3
#define APLL_SDIV        0x1
#define MPLL_MDIV        0x29b
#define MPLL_PDIV        0xc
#define MPLL_SDIV        0x1

#define set_pll(mdiv, pdiv, sdiv)   (1<<31 | mdiv<<16 | pdiv<<8 | sdiv)
#define APLL_VAL        set_pll(APLL_MDIV,APLL_PDIV,APLL_SDIV)
#define MPLL_VAL        set_pll(MPLL_MDIV,MPLL_PDIV,MPLL_SDIV)

void clock_init()
{
    /* 1 设置各种时钟开关, 暂时不使用 PLL */
    CLK_SRC0 = 0x0;

    /* 2 设置锁定时间,使用默认值即可 */
    APLL_LOCK = 0x0000FFFF;
    MPLL_LOCK = 0x0000FFFF;

    /* 3 设置分频 */
    CLK_DIV0 = 0x14131440;

    /* 4 设置 PLL */
    APLL_CON0 = APLL_VAL;
    MPLL_CON = MPLL_VAL;

    /* 5 设置各种时钟开关,启用 PLL */
    CLK_SRC0 = 0x10001111;
}

程序分析:

第一步 设置各种时钟开关,暂时不使用 PLL

在未设置 PLL 和各种分频系数之前,我们不能使用 PLL, 为了保险起见, 暂时直接使用频率较低的外接的 24MHz 晶振,待设置好 PLL 和分频系数后再重新设置各种时钟开关。

第二步 设置锁定时间

设置 PLL 后,时钟从 Fin 提升到目标频率时,需要一定的时间,即锁定时间,使用默认值即可。

第三步 设置分频

与分频相关的寄存器是 CLK_DIV0,见下图:

根据手册中给出的参考值来设置该寄存器。

ARMCLK = 1000MHz = MOUT_MSYS / (APLL_RATIO + 1),经过在第四和第五步的设置后, MOUT_MSYS会被设置为 1000MHz,所以 APLL_RATIO=0 即可
SCLKA2M = 200MHz = SCLKAPLL / (A2M_RATIO + 1),由于 SCLKAPLL = 1000MHz,所以 A2M_RATIO=4。
HCLK_MSYS = 200MHz = ARMCLK / (HCLK_MSYS_RATIO + 1),所以 HCLK_MSYS_RATIO=4
PCLK_MSYS = 100MHz = HCLK_MSYS / (PCLK_MSYS_RATIO + 1),所以 PCLK_MSYS_RATIO=1
HCLK_DSYS = 166MHz = MOUT_DSYS / (HCLK_DSYS_RATIO + 1), 经过在第四和第五步的设置后,MOUT_DSYS =667MHz, 所以 HCLK_DSYS_RATIO=3
PCLK_DSYS = 83MHz = HCLK_DSYS / (PCLK_DSYS_RATIO + 1),所以 PCLK_DSYS_RATIO=1
HCLK_PSYS = 133Mhz = MOUT_PSYS / (HCLK_PSYS_RATIO + 1), 经过在第四和第五步的设置后,MOUT_PSYS =667MHz 所以 HCLK_PSYS_RATIO=4
PCLK_PSYS = 66Mhz = HCLK_PSYS / (PCLK_PSYS_RATIO + 1), 所以 HCLK_PSYS_RATIO=1

第四步 设置 PLL

PLL 即倍频器,用来放大运行频率。 设置好分频后,我们就需要设置 PLL 了。 APLL 和 MPLL 的启动是通过分别设置 APLL_CON0 和 MPLL_CON 寄存器,我们逐个来设置。

APLL_CON0

APLL_CON0 负责设置 APLL, FINPLL=24MHz,经过 APLL 后,我们将输出 FOUT=1000Mhz 的时钟频率, FOUT 的计算公式如下:

FOUT=MDIV*FIN/(PDIV*2^(SDIV-1)) = 1000 MHz

由于 FIN=24MHz,FOUT=1000MHz,我们可以这样取值: MDIV= 0x7d, PDIV= 0x3, SDIV=1。这 3 个值并不是固定死的,只要能使 FOUT=1000Mhz,任意搭配都是可以的。

MPLL_CON

MPLL_CON 寄存器负责设置 MPLL,经过 MPLL 后,我们将输出 FOUT=667Mhz 的时钟频率, FOUT 的计算公式如下:

FOUT=MDIV*FIN/(PDIV*2^SDIV) = 667 MHz

由于 FIN=24MHz,FOUT=667MHz,我们可以这样取值: MDIV=0x29B,PDIV= 0xC, SDIV=1。这 3 个值并不是固定死的,只要能使 FOUT=667Mhz,任意搭配都是可以的。

第五步 设置各种时钟开关

参考 S5PV210 时钟结构图,设置各种时钟开关:

APLL_SEL = 1,使用 FOUTAPLL
MPLL_SEL = 1,使用 FOUTMPLL
EPLL_SEL = 1, 使用 FOUTEPLL
VPLL_SEL = 1,使用 FOUTVPLL
MUX_MSYS_SEL = 0, 使用 SCLKAPLL
MUX_DSYS_SEL = 0, 使用 SCLKMPLL
MUX_PSYS_SEL = 0,使用 SCLKMPLL
ONENAND_SEL = 1, 使用 HCLK_DSYS
所以 CLK_SRC0 = 0x10001111;

以上程序,通过设置时钟相关的寄存器,达到了初始化时钟的目的(实际上我们并不需要设置好所有部件的工作时钟,我们只需设置好我们需要使用的硬件部件的工作时钟即可)。

本篇文章参考:《友善之臂210手册》

原文地址:https://www.cnblogs.com/GyForever1004/p/8447294.html

时间: 2024-11-07 09:46:02

S5pv210 时钟体系分析的相关文章

嵌入式Linux裸机开发(六)——S5PV210时钟系统

嵌入式Linux裸机开发(六)--S5PV210时钟系统 一.时钟系统简介 外设工作需要一定频率的时钟,这些时钟都由系统时钟提供.系统时钟一般由外部低频24MHZ晶体振荡器通过锁相环电路PLL倍频产生.通过外部的低频晶体振荡器产生系统时钟不仅可以减少干扰还可以降低成本.外设的工作频率越高,功耗越高,越不稳定.通过关闭外设的时钟可以关闭外设. 二.时钟域 S5PV210 中包含 3 大类时钟 domain, 分别是主系统时钟 domain (简称 MSYS).显示相关的时钟 domain (DSY

STM32F4时钟配置分析

//学习STM32F4的过程中关于时钟上面讲的比较好 特地转发与大家分享 STM32F4时钟设置分析 原文博客链接:http://blog.csdn.net/jdh99,作者:jdh,转载请注明. 环境: 主机:WIN7 开发环境:MDK4.72 MCU:STM32F407VGT6 STM32F4启动与STM32F10X不同,时钟已经默认配置好. 1.启动代码: 文件:startup_stm32f4xx.s [cpp] view plain copy <span style="font-f

[netty4][netty-transpot]Channel体系分析

Channel体系分析 接口与类结构体系 -- [I]AttributeMap, ChannelOutboundInvoker, Comparable -- [I]AttributeMap ---- [I]Channel ---- [C]DefaultAttributeMap -- [I]Channel, [C]DefaultAttributeMap ---- [AC]AbstractChannel ------ [AC]AbstractNioChannel -------- [AC]Abstr

s3c2440裸机编程-时钟编程(一、2440时钟体系介绍)

1.总线框架 下图是2440的总线框架,其中有AHB(Advanced High performance Bus)高速总线,APB(Advanced Peripheral Bus)外围总线. 不同总线对应不同的时钟. SOC <-> FCLK AHB <-> HCLK APB <-> PCLK 其中: 1.使用AHB总线的有:LCD控制器.usb控制器.中断控制器.内存控制器等... 2.使用APB总线的有:i2c.spi.timer.gpio.adc等...具体上图.

总结:S5PV210时钟系统

在数据手册<S5PV210_UM_REV1.1>中的section 02_system/3 CLOCK CONTROLLER(354页) 一.时钟域 在S5PV210的SoC中,时钟系统分为三个区域:MSYS.DSYS.PSYS. (1)MSYS:CPU(Cortex-A8内核).DRAM控制器(DMC0和DMC1).IRAM.IROM等 (2)DSYS:主要是视频图像解码相关的时钟 (3)PSYS:内部外设相关(串口.SD.USB.GPIO.IIC.SPI等) 二.时钟源 可以通过四个晶振作

S5pv210中断体系结构分析

我们按照Tiny210官方的裸板程序来梳理S5PV210的中断体系. 关于 S5PV210 的中断体系结构 S5PV210 的中断控制器是由 4 个向量中断控制器(VIC). ARM PrimeCell PL192 和 4 个 TrustZone Interrupt Controller (TZIC)共同组成. S5PV210 共支持 93 个中断源(具体见官方手册). 首先看 Start.S .global _start .global IRQ_handle _start: @ 关闭看门狗 l

门控时钟-理论分析 ---- 转载

转载自:http://www.chipsbank.com/news_detail/newsId=123.html 门控的基本要求: 1. 所需要的沿(对于正沿触发的寄存器是正沿,对于负沿触发的寄存器是负沿)不增加,不减少: 1. 不会产生毛刺: 1. 使用后功耗要能够降低: 1. 最好面积还会减小. 1. 上升沿触发的门控时钟的结构研究:应用与上升沿触发的寄存器的门控. 1. 直接与门结构: 1. 高电平使能Latch + 与门结构: 1. 低电平使能Latch + 与门结构: 1. 波形研究:

Unity3d开发(十七)UGUI 事件体系分析

div#cpcontent2 {height:215px;width:215px;float:left;} div#cpmenu {height:200px;float:left;} div#cpcontent {height:200px;width:150px;float:left;} 文章作者:松阳 原文链接:http://blog.csdn.net/fansongy/article/details/52778862 很多Unity3D项目都使用了UGUI,但并不是所有人都研究过它的内部结构

R语言结合概率统计的体系分析---数字特征

现在有一个人,如何对这个人怎么识别这个人?那么就对其存在的特征进行提取,比如,提取其身高,其相貌,其年龄,分析这些特征,从而确定了,这个人就是这个人,我们绝不会认错. 同理,对数据进行分析,也是提取出数据的特征,对其特征进行分析,从而确定这些数据所呈现的信息状况,从而确定了这些数据的独特性和唯一性,因为他呈现的信息是唯一的,绝不与别的是相同的. 那么这些特征是什么呢?拥有哪些特征呢?似乎应该是经过无数科学家的总结,终于发现了几个重要的特征,包括数字特征和分布特征,这个数字特征,包括集中位置,分散