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手册》

S5PV210 时钟体系分析的更多相关文章

  1. S3C2440时钟体系

    注:以下内容学习于韦东山老师arm裸机第一期视频教程 一. 2440时钟简介 1.1 2440是一个SOC(system on chip)系统,不仅有很多CPU,还有很多外设,在2440芯片手册有系统 ...

  2. STM32F4时钟配置分析

    //学习STM32F4的过程中关于时钟上面讲的比较好 特地转发与大家分享 STM32F4时钟设置分析 原文博客链接:http://blog.csdn.net/jdh99,作者:jdh,转载请注明. 环 ...

  3. headfirst设计模式(5)—工厂模式体系分析及抽象工厂模式

    先编一个这么久不写的理由 上周我终于鼓起勇气翻开了headfirst设计模式这本书,看看自己下一个设计模式要写个啥,然后,我终于知道我为啥这么久都没写设计模式了,headfirst的这个抽象工厂模式, ...

  4. RFID:ISO14443、15693、18000体系分析

    射频标签的通信标准是标签芯片设计的依据,目前国际上与RFID相关的通信标准主要有:ISO/IEC 18000标准(包括7个部分,涉及125KHz, 13.56MHz, 433MHz, 860-960M ...

  5. 第九篇:S3C2400时钟体系

    S3C2400时钟体系 S3C2400时钟配置流程 该学习板使用了外部晶振12Mhz 晶振--->经过MPLL(锁相环) --->(倍频得到)FCLK--->(对FCLK分频得到)H ...

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

    Channel体系分析 接口与类结构体系 -- [I]AttributeMap, ChannelOutboundInvoker, Comparable -- [I]AttributeMap ---- ...

  7. 第010课_掌握ARM芯片时钟体系

    from:第010课_掌握ARM芯片时钟体系 第001节_S3C2440时钟体系结构 S3C2440是System On Chip(SOC),在芯片省不仅仅有CPU,还有一堆外设. 至于有哪些外设,可 ...

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

    1.总线框架 下图是2440的总线框架,其中有AHB(Advanced High performance Bus)高速总线,APB(Advanced Peripheral Bus)外围总线. 不同总线 ...

  9. 总结:S5PV210时钟系统

    在数据手册<S5PV210_UM_REV1.1>中的section 02_system/3 CLOCK CONTROLLER(354页)   一.时钟域 在S5PV210的SoC中,时钟系 ...

随机推荐

  1. 学习爬虫Scrapy遇到的错误

    1. 这个问题是由于路径中含有中文,导致编码格式出错的问题, 查看错误方法,进入到ntpath.py文件中去,找到85行,然后,print 一下result_path,因为后面报出的错误,就是因为这段 ...

  2. com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax;问题的解决

    哇,时隔两天时间,终于找到这个问题的解决办法,先看问题 这是我最近写的家庭记账本网页版,按顺序输入点击保存,总是弹出添加失败的提示 顺着找原因,把原因锁定在dao层的sql语句上,反复检查,没有找到一 ...

  3. Linux下强制杀死进程的方法

    常规篇: 首先,用ps查看进程,方法如下: $ ps -ef …… smx 1822 1 0 11:38 ? 00:00:49 gnome-terminal smx 1823 1822 0 11:38 ...

  4. Android studio提速配置

    1. C:\Program Files\Android\Android Studio\bin studio64.exe.vmoptions 2.创建 gradle.properties 配置文件

  5. elasticsearch搜索引擎环境的搭建

    elasticsearch 搜索引擎 解决了什么问题:在我们数据量很大时,我们使用模糊查询会使索引列的索引消失,这样使用elasticsearch来提高查询效率. 存在什么问题:有时我们查询的词,el ...

  6. Java连接MySQL数据库详细教程(附网盘下载地址)

    准备工具 Eclipse-oxygen-64位 http://pan.baidu.com/s/1gf48FIj MySQL-5.7.17 http://pan.baidu.com/s/1skD14Cl ...

  7. HSmartWindowControl之安装篇 (Visual Studio 2013 & Halcon 18)

    1.环境简介 Visual Studio 2013社区版 Halcon18.05 2.使用Nuget在VS工程中安装Halcon插件 搜索栏输入关键字halcon,出现两个插件,分别是halcon语言 ...

  8. 项目Alpha冲刺(团队2/10)

    项目Alpha冲刺(团队2/10) 团队名称: 云打印 作业要求: 项目Alpha冲刺(团队) 作业目标: 完成项目Alpha版本 团队队员 队员学号 队员姓名 个人博客地址 备注 221600412 ...

  9. Codeforces Round #553 (Div. 2) C. Problem for Nazar 数学

    题意:从奇数列 1 3 5 7 9 ....  偶数列2 4 6 8 10...分别轮流取 1 2 4 ....2^n 个数构成新数列 求新数列的区间和 (就一次询问) 思路:首先单次区间和就是一个简 ...

  10. UIAlertControllerStyleActionSheet 崩溃。

    即使Devices 设置为iPhone模式,在审核时还是运行在iPad的小屏模式下.因此必须 UIActivityViewController UIAlertControllerStyleAction ...