S5PV210时钟系统

1、什么是时钟系统?时钟系统的作用?
时钟系统指的由固有频率来控制的系统。作用:有了一定的频率,工作才能有序,有节奏的进行着。
2、S5PV210的时钟系统是怎么样的?
S5PV210:外部晶振+内部时钟发生器+内部PLL产生高频时钟+分频器
3、S5PV210时钟系统的工作流程?
S5PV210:通过外部晶振产生一个低频时钟(如果外部晶振是高频时钟的话,大家都知道高频受到的干扰会较大,并不能很好的传入到S5PV210内部)传入到内部时钟发生器,在内部有一个PLL(PLL的作用是把低频转换为高频,列如传入的是24MHZ通过PLL则会变成1GHZ)再通过分频器分频成各个器件所需要的时钟频率。
4、S5PV210的时钟系统简介

通过分析数据手册可知:
(1)S5PV210的时钟体系分成3大域(按频率的快慢划分):
-MSYS域(main system):主系统域里面包含这CPU(cortex-a8内核)、DRAM控制器(DMC0和DMC1)、3D、internal SRAM(IRAM,and IROM)
-DSYS域(display system):该域主要是一些视频显示、编解码有关的模块。
-PSYS(peripheral system):该域主要是一些外设,I/O外设,SD接口,use接口,I^2接口等等。
频率(由块到慢):MSYS>DSYS>PSYS
(2)S5PV210共有4个倍频器

APLL:Cortex-A8内核、MSYS域
MPLL&EPLL:DSYS PSYS
VPLL:Video视频相关模块
(3)S5PV210时钟域详解

-MSYS域:
*ARMCLK:给CPU内核工作的时钟,即主频。
*HCLK_MSYS: MSYS域的高频时钟,给DMC0和DMC1使用
*PCLK_MSYS: MSYS域的低频时钟
*HCLK_IMEM:给iROM和iRAM使用

-DSYS域:
*HCLK_DSYS: DSYS域的高频时钟
*PCLK_DSYS: DSYS域的低频时钟

-PSYS域:
*HCLK_PSYS: PSYS域的高频时钟
*PCLK_PSYS: PSYS域的低频时钟
为什么要知道这些域呢?
210内部的各个外设都是接在内部的(AMBA总线)AMBA总线有一个高频分支叫AHB,有一条低频分支叫APB。上面的各个域都有各个对应的HCLK_XXX和PCLK_XXX,其中HCLK_XXX就是XXX这个域中AHB总线的工作频率,PCLK_XXX就是XXX这个域APB总线的工作频率。譬如串口UART挂在PSYS域下的APB总线上,因此串口的时钟来源是PCLK_PSYS。我们通过上面的这些时钟域和总线数值,来确定我们各个外设的具体时钟频率。
(5)S5PV210典型值的设置。
默认的S5PV210上电后,从irom启动此时的时钟频率是24MHZ,我们需要通过PLL提高时钟频率,在分给各个时钟域不同的频率,最后达到各个时钟域的稳定工作,从而达到初始化时钟的作用。
S5PV210的典型值在数据手册中有相应的给出。
通过推荐的典型值我们可以通过上面的数字些写出代码。
(4)S5PV210框图详解。

(很重要)第一张图从左到右依次完成了原始时钟生成(24MHZ)->PLL倍频得到高频时钟->初次分频得到各总线时钟。这张图是理解整个时钟体系的关键。其中的MUX开关是至关重要的。MUX开关就是个或门,通过设置bit位来控制哪一个是通的。DIV则是分频器。可以通过设置分频器得到想要的频率。此图可得知FINPLL和FOUTPLL很重要

第二张图是从各中间时钟(第一张图中某个步骤生成的时钟)到各外设自己使用的时钟(实际就是个别外设再额外分频的设置)。进一步细化各外设的时钟来源。
(5)S5PV210时钟设置寄存器详解
-xPLL_LOCK:控制PLL锁定频率的周期,譬如24MHZ变为1GHZ这段是需要一段时间的,通过一个锁相环使得把24MHZ锁定为1GHZ,所以就需要锁定频率的周期了。(锁定频率)
-xPLL_CON:打开/关闭PLL电路,设置PLL的倍频参数,查看PLL锁定状态等。(决定倍频到多少)
-CLK_SRCn(n:0~6):用来设置时钟来源的,对应时钟框图中的mux开关。(决定时钟来源)
-CLK_SRC_MASKn:打开关闭时钟源。(开头部分)
-CLK_DIV_STATn:各模块的分频参数配制。(决定分频多少)
-CLK_SRC_GATE_x:打开关闭时钟门。(结尾部分)
-CLK_DIV_STATn:分频状态寄存器,确保是否已经分频完成。
-CLK_MUX_STATn:选择开关状态寄存器,确保是否已经选择开关完毕。
(6)汇编代码详情。
初始化时钟代码(5歩):
第一步:先不使用PLL,先用24MHZ时钟频率跑一段
第二歩:设置锁定时间。默认值为0x0fff,我们设置为0xffff让他多锁定一会(更保险).
第三歩:设置分频系数。
第四歩:设置PLL,提高时钟频率。
第五歩:打开PLL。

在arm的数据手册中可以分析得知,所有的寄存器都是按块分的。我们可以找到一个寄存器的基地址,再通过基址加编址寻址的方式在找到寄存器。

#define ELFIN_CLOCK_POWER_BASE 0XE0100000
#define CLK_SRC0_OFFSET        0X00000200ldr r0, =ELFIN_CLOCK_POWER_BASE
//1 设置各种时钟开关,暂时不使用PLL
ldr r1, =0x0
//通过控制SRC0寄存器使各种PLL从FINPLL那条路通过寄存器描述见下图
str r1, [r0, #CLK_SRC0_OFFSET]

#define APLL_LOCK_OFFSET 0x00000000
#define MPLL_LOCK_OFFSET    0x00000008//2 设置锁定时间ldr r1, =0x0000FFFF
str r1, [r0, #APLL_LOCK_OFFSET]
str r1, [r0, #MPLL_LOCK_OFFSET]

//3 设置分频,寄存器描述如下图
//清楚bit[0~31]#define CLK_DIV0_OFFSET 0x00000300
#define CLK_DIV0_MASK   0xffffffff
ldr r1,[r0, #CLK_DIV0_OFFSET]
ldr r2, =CLK_DIV0_MASK
bic r1, r1, r2
ldr r2, =0x14131440
orr r1, r1 ,r2
str r1, [r0, #CLK_DIV0_OFFSET]

分析0x14131440 的含义:0001 0100 0001 0011 0001 0100 0100 0000
通过分析前面给定的典型值。可以最后算出0x14131440并且可以分析(很重要)那张图的流向,一切的分析都是基于看懂那张图上作出的,能否学会时钟,即能否学会看懂那张图。
首先分析
/

bit[30~28]=1此时PCLK_PSYS_RATIO=1
PCLK_PSYS = HCLK_PSYS /(PCLK_PSYS_RATIO+1)
*/

/*
bit[27~24]=4此时HCLK_PSYS_RATIO=4
HCLK_PSYS = MOUT_PSYS / (HCLK_PSYS_RATIO + 1)
*/

/*
bit[22~20]=1此时PCLK_DSYS_RATIO=1
PCLK_DSYS = HCLK_DSYS / (PCLK_DSYS_RATIO + 1)
*/

/*
bit[19~16]=3此时HCLK_DSYS_RATIO=3
HCLK_DSYS = MOUT_DSYS / (HCLK_DSYS_RATIO + 1)
*/

/*
bit[14~12]=1此时PCLK_MSYS_RATIO=1
PCLK_MSYS = HCLK_MSYS / (PCLK_MSYS_RATIO + 1)
*/

/*
bit[10~8]=4此时HCLK_MSYS_RATIO=4
HCLK_MSYS = ARMCLK / (HCLK_MSYS_RATIO + 1)
*/

/*
bit[6~4]=0此时A2M_RATIO =0
SCLKA2M = SCLKAPLL / (A2M_RATIO + 1)
*/

/*
bit[2~0]=0此时APLL_RATIO =0
ARMCLK = MOUT_MSYS / (APLL_RATIO + 1)
*/

//这些配置值都是看三星数据手册推荐的
#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)#define APLL_CON0_OFFSET 0x100
#define MPLL_CON_OFFSET     0x108
//4 设置PLL,使得低频变成高频
//公式如下图:FOUT=MDIV*FIN/(PDIV*2^(SDIV-1))=0x7d*24/(0x3*2^(1-1))=1000MHZ
ldr r1, =APLL_VAL
str r1, [r0, #APLL_CON0_OFFSET]
//FOUT=MDIV*FIN/(PDIV*2^(SDIV-1))=0x29b*24/(0xc*2^1)=667MHZ
ldr r1, =MPLL_VAL
str r1, [r0, #MPLL_CON_OFFSET]



建议值是按数据手册给的:

//5 打开PLL,前面只是设置系数,这歩是开始工作。
ldr r1, [r0,#CLK_SRC0_OFFSET]
ldr r2, = 0x10001111
orr r1, r1, r2
str r1,[r0,#CLK_SRC0O_OFFSET]

(7)C语言代码详解

//S5PV210时钟初始化代码
#define REG_CLK_SRC0    0XE0100200
#define REG_APLL_LOCK   0XE0100000
#define REG_APLL_LOCK   0XE0100008
#define REG_CLK_DIV0    0XE0100300
#define REG_APLL_CON0   0XE0100100
#define REG_MPLL_CON    0XE0100108
#define rREG_CLK_SRC0   (*(volatile unsigned int *)REG_CLK_SRC0)
#define rREG_APLL_LOCK  (*(volatile unsigned int *)REG_APLL_LOCK)
#define rREG_MPLL_LOCK  (*(volatile unsigned int *)REG_MPLL_LOCK)
#define rREG_CLK_DIV0   (*(volatile unsigned int *)REG_CLK_DIV0)
#define rREG_APLL_CON0  (*(volatile unsigned int *)REG_APLL_CON0)
#define rREG_MPLL_CON   (*(volatile unsigned int *)REG_MPLL_CON)#define APLL_MDIV               0x7d        // 125
#define APLL_PDIV               0x3
#define APLL_SDIV               0x1#define MPLL_MDIV                0x29b       // 667
#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(void)
{//1 不使用PLL rREG_CLK_SRC0 = 0X0;//2 设置锁定时间rREG_APLL_LOCK = 0X0000FFFF;rREG_MPLL_LOCK = 0X0000FFFF;//3 设置分频rREG_CLK_DIV0 = 0X14131440;//4 设置PLLrREG_APLL_CON0 = APLL_VAL;rREG_MPLL_CON = MPLL_VAL;//5 使用PLLrREG_CLK_SRC0 = 0x10001111;
}

注:因能力有限,若文章有错请多多包涵,谢谢。

s5pv210时钟系统详解相关推荐

  1. ARM芯片的时钟系统详解(S5PV210芯片)

    1.时钟介绍 时钟是同步工作系统的同步节拍,时钟的快慢就是我们常说的工作频率,以赫兹(HZ)为单位.时钟系统指导器件的运行,我们分析器件的工作特性时,常常会看器件的时序图,时序图中的时钟周期就是时钟系 ...

  2. STM32开发 -- 时钟系统详解

    如需转载请注明出处:https://blog.csdn.net/qq_29350001/article/details/81558649 上一篇文章讲了RTC,里面其实已经包含了时钟系统的介绍了.这篇 ...

  3. S3C2440时钟系统详解

    在讲述系统时钟之前,因为这些设备都是挂靠在系统时钟上的,所以必须先说系统时钟,S3C2440的时钟系统如下 外部时钟源分两种,晶振或者外部频率,由om3-2选择,时钟电路根据两种选择也有两种 我们来分 ...

  4. 【STM32】初学者必读STM32时钟系统详解

    目录 1 前言 2 时钟系统介绍 3 时钟源 3.1 系统时钟源 3.2 次级时钟源 3.3 时钟源特点 4 时钟 4.1 AHB总线时钟 4.2 APB1总线时钟 4.3 APB2总线时钟 5 时钟 ...

  5. 朱老师ARM裸机学习笔记(四):S5PV210启动过程详解

    常用器件特性 内存: SRAM 静态内存 特点就是容量小.价格高,优点是不需要软件初始化直接上电就能用 DRAM 动态内存 特点就是容量大.价格低,缺点就是上电后不能直接使用,需要软件初始化后才可以使 ...

  6. Linux系统详解 系统的启动、登录、注销与开关机

    Linux系统详解 第六篇:系统的启动.登录.注销与开关机 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://johncai.blo ...

  7. S5PV210串口通信详解

    S5PV210串口通信详解 S5PV210概述: S5PV210有4路独立,异步,串行的输入输出IO口,UART支持的通信速率达到3Mbps. 一个周期数据的组成:1位起始位,8位有效数据位,1位奇偶 ...

  8. 基于YOLOv5的目标检测系统详解(附MATLAB GUI版代码)

    摘要:本文重点介绍了基于YOLOv5目标检测系统的MATLAB实现,用于智能检测物体种类并记录和保存结果,对各种物体检测结果可视化,提高目标识别的便捷性和准确性.本文详细阐述了目标检测系统的原理,并给 ...

  9. linux小红帽系统装打印机驱动,Linux系统详解 第三篇:红帽RHEL的安装

    Linux系统详解 第二篇:红帽RHEL的安装 前言: 本系列文章取材广泛,有来自于互联网的,有来自教科书的,有来自自己的笔记的,也有来自自己对Linux的经验积累的.此系列的文章都是经过长时间的整理 ...

  10. 【STM32学习】时钟配置详解

    [STM32学习]时钟配置详解 看懂时钟图 结合代码 外部高速时钟修改 看懂时钟图 在刚开始学习32的时候,并不会在意这些,或者即使看了也看的不是很明白.随着学习的深入,我们发现看门狗.定时器.ADC ...

最新文章

  1. 项目实践:SpringBoot三招组合拳,手把手教你打出优雅的后端接口
  2. echart的关系图高亮_echarts鼠标覆盖高亮显示节点及关系名称详解
  3. 怎么在html中设置按键,网页设计中如何设计按钮
  4. 笔记-信息系统开发基础-面向对象基本概念-多态
  5. 175 道面试必考 Go 语言题目详细解答
  6. 二值图像--形态学处理3 开操作和闭操作
  7. 管理员以标准权限运行时
  8. 计算机网络(五)——组建客户机/服务器网络
  9. html读取oss_阿里云使用js 实现OSS图片上传、获取OSS图片列表(示例代码)
  10. Arcgis Javascript那些事儿(七)--AMD详解
  11. 树莓派基础实验9:蜂鸣器实验
  12. obs 推流编码在哪设置_直播工具OBS推流配置操作指引
  13. Nginx的优点和缺点
  14. 市场对计算机应用技术的需求,计算机应用技术专业人才需求调研分析
  15. 基于 WebGL 的 3D Chart 图表
  16. 将Chrome浏览器网页背景改成豆绿色
  17. 数据仓库-Hive(一)
  18. Android 8内测版本,安卓qq v8.0.8内测版
  19. 【企业为什么要进行数字化转型】之数字时代新模式
  20. 定差幂线定理例题和练习题

热门文章

  1. iOS 5.1实现旋转屏幕
  2. E-mark认证是什么?
  3. window11下VC6复活记
  4. 腾讯裁员,裁出“财务自由”
  5. kali开机密码破解
  6. php坏处,cpu超频有什么坏处
  7. 记一次公司被勒索病毒攻击事迹,上上下下咬牙切齿
  8. ppt如何替换其他mo ban_相见恨晚的10个PPT制作小技巧!提高你的PPT制作效率
  9. HTML中如何使用JavaScript创建链接?
  10. 输入某年某月某日,判断这一天是星期几