八.ARM裸机学习之S5PV210的时钟系统1(原理概念及框图分析)

1.什么是时钟?SoC为什么需要时钟?
时钟是同步工作系统的同步节拍,在SoC的时钟中也是拿来以周期计时的,以确定每个部件的工作能够在同一节奏下。
SoC需要时钟是因为SoC工作的时候,需要时钟来确定在那几个周期里面哪一个部件需要干什么事情,各个部件需要协同工作。
2、时钟如何产生
SoC的时钟获得一般有:
* 外部直接输入时钟信号,SoC有个引脚用来输入外部时钟信号,用的很少。
* 外部晶振+内部时钟发生器产生时钟,大部分低频单片机都是这么工作的。
* 外部晶振+内部时钟发生器+内部PLL(锁相环,倍频用)产生高频时钟+内部分频器分频的到各个频率的时钟。(S5PV210,STM32就是这种方式) 
3.SOC中各种设备工作时,时钟频率越高其功耗越大,发热越大,越容易不稳定,需要外设的散热条件越苛刻。
4.SOC内部有很多外设,不需要某个外设运行,断掉对应时钟即可。
1.S5PV210的时钟系统是怎么样的? 
S5PV210:外部晶振+内部时钟发生器+内部PLL产生高频时钟+分频器 
2.S5PV210时钟系统的工作流程? 
S5PV210:通过外部晶振产生一个低频时钟(如果外部晶振是高频时钟的话,大家都知道高频受到的干扰会较大,并不能很好的传入到S5PV210内部)传入到内部时钟发生器,在内部有一个PLL(PLL的作用是把低频转换为高频,列如传入的是24MHZ通过PLL则会变成1GHZ)再通过分频器分频成各个器件所需要的时钟频率。
3.S5PV210的时钟系统简介

通过分析数据手册可知: 
时钟域:MSYS、DSYS、PSYS
频率(由块到慢):MSYS>DSYS>PSYS 
(1)因为S5PV210的时钟体系比较复杂,内部外设模块太多,因此把整个内部的时钟划分为3大块,叫做3个域。
(2) MSYS : CPU(Cortex-A8内核)、DRAM控制器(DMC0和DMC1)、3D、internal SRAM(IRAM,and IROM) 。
(3) DSYS : 都是和视频显示、编解码等有关的模块
(4) PSYS : 和内部的各种外设时钟有关,譬如串口、SD接口、I2C、AC97、USB等。
(5)为什么内部要分为3个域,怎么划分的?因为210内部的这些模块彼此工作时钟速率差异太大了,所以有必要把高速的放一起,相对低速的放一起。
4.S5PV210的PLL倍频器 

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

MSYS域:
ARMCLK: 给cpu内核工作的时钟,也就是所谓的主频。
HCLK_MSYS:MSYS域的高频时钟,给DMC0和DMC1使用
PCLK_MSYS:MSYS域的低频时钟
HCLK_IMEM:给iROM和iRAM(合称iMEM)使用
DSYS域:
HCLK_DSYS:DSYS域的高频时钟
PCLK_DSYS:DSYS域的低频时钟
PSYS域:
HCLK_PSYS:PSYS域的高频时钟
PCLK_PSYS:PSYS域的低频时钟
SCLK_ONENAND:
总结 :210内部的各个外设都是接在(内部AMBA总线)总线上面的,AMBA总线有1条高频分支叫AHB,有一条低频分支叫APB。上面的各个域都有各自对应的HCLK_XXX和PCLK_XXX,其中HCLK_XXX就是XXX这个域中AHB总线的工作频率;PCLK_XXX就是XXX这个域中APB总线的工作频率。
SoC内部的各个外设其实是挂在总线上工作的,也就是说这个外设的时钟来自于他挂在的总线,譬如串口UART挂在PSYS域下的APB总线上,因此串口的时钟来源是PCLK_PSYS。
我们可以通过记住和分析上面的这些时钟域和总线数值,来确定我们各个外设的具体时钟频率。
6.S5PV210典型值的设置

通过推荐的典型值我们可以通过上面的数字些写出代码。 


这两张图就是一个时钟体系框图,
两张图是一个 渐进 的关系,
第一张是整体时钟来源,第二张是各个外设,或者说是各个模块的更进一步,更加细分的时钟来源。
第一张图从左到右依次完成了原始时钟生成 -> PLL倍频得到高频时钟 -> 初次分频得到各总线时钟;
第二张图是从各中间时钟(第一张图中某个步骤生成的时钟)到各外设自己使用的时钟(实际就是个别外设自己再额外分频的设置)
在数据手册中,
寄存器中的clock source x 就是在设置MUX开关,
寄存器中的clock divider control就是设置分频器中的系数。
xPLL_LOCK:
xPLL_LOCK寄存器主要控制PLL锁定周期的。
xPLL_CON/xPLL_CON0/xPLL_CON1:
PLL_CON寄存器主要用来打开/关闭PLL电路,设置PLL的倍频参数,查看PLL锁定状态等
CLK_SRCn(n:0~6):
CLK_SRC寄存器是用来设置时钟来源的,对应时钟框图中的MUX开关。
CLK_SRC_MASKn:
CLK_SRC_MASK决定MUX开关n选1后是否能继续通过。默认的时钟都是打开的,好处是不会因为某个模块的时钟关闭而导致莫名其妙的问题,坏处是功耗控制不精细、功耗高。
CLK_DIVn:
各模块的分频器参数配置
CLK_GATE_x:
类似于CLK_SRC_MASK,对时钟进行开关控制
CLK_DIV_STATn:
CLK_MUX_STATn:
这两类状态位寄存器,用来查看DIV和MUX的状态是否已经完成还是在进行中
总结:其中最重要的寄存器有3类: CON、SRC、DIV 其中CON决定PLL倍频到多少,SRC决定走哪一路,DIV决定分频多少。
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值