注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

男儿当自强的博客

每天进步一点

 
 
 

日志

 
 
 
 

S3C2443时钟管理  

2010-09-24 17:15:29|  分类: S3C2440A |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

S3C2443时钟管理

 

S3C2443有两个PLL用来产生内部时钟,分别是MPLL和EPLL,其中MPLL为包括ARM,AHB和APB的总体功能模块产生内部时钟,而EPLL为比如是USB,I2S和camera等这些具体的模块产生时钟,我们可以通过软件编程来控制这个两个PLL的工作频率,可以关闭和开启内部时钟源来减少功耗。

 

1.MPLL和EPLL时钟源的选择

S3C2443时钟管理 - 男儿当自强 - 男儿当自强的博客

从上图可知主要的时钟源来之外部晶振(XTI)或者外部时钟(EXTCLK),时钟产生器由MPLL和EPLL组成,这两个PLL的作用是可以产生S3C2443所需要的高频时钟信号。由OM[0]来决定MPLL是选择XTI还是EXTCLK来作为时钟源,而OM[0]是由硬件设计来确定,下图是我们项目OM[0]的设计部分:

S3C2443时钟管理 - 男儿当自强 - 男儿当自强的博客

在此设计中,OM[0]=1,根据下表

S3C2443时钟管理 - 男儿当自强 - 男儿当自强的博客

可知MPLL的时钟源是由XTI提供,如下图所示:

  S3C2443时钟管理 - 男儿当自强 - 男儿当自强的博客S3C2443时钟管理 - 男儿当自强 - 男儿当自强的博客

由上面左图可知EXTCLK是通过0R的电阻直接接地的,所以EPLL只能选择XTI来作为EPLL的时钟源的,再根据下图:

S3C2443时钟管理 - 男儿当自强 - 男儿当自强的博客

我们可知,CLKSRC[8]=0,CLKSRC[7]=X,这里X可以是0或者1,这是需要在startup.s中做相应的设置的。

 

 

2.PLL(phase-locked-loop)

 

S3C2443时钟管理 - 男儿当自强 - 男儿当自强的博客

S3C2443的PLL主要由PFD(phase difference detector,相位差检测器)、charge pump(电荷泵)、VCO(voltage controlled oscillator压控振荡器)和off-chip loop filter(外部环路滤波器)。

 

PFD:又称为相比比较器,它的作用是检测输入信号和输出信号的相位差,并将检测出的相位差信号转换为电压信号输出。

 

Charge pump:电荷泵转变PFD的电压输出信号成一定比例的电压值发送给VCO和off-chip loop filter。

 

Off-chip loop filter:PFD输出的电压信号,进入charge pump后,可能会有高频杂波,通过Off-chip loop filter 可以输出VCO需要一个稳定的电压,在这里,Off-chip loop filter采用典型的RC低通滤波。

 

VCO:输出电压进入VCO,引起振荡器 频率的变化,压控振荡器的输出频率随其输入电压的改变而改变,当Fref和Fvco没有差别的时候,电压就会保持稳定下来,PFD就停止输出电压信号给charge pump,这样PLL系统时钟就稳定了。

 

 

3.改变PLL设置

S3C2443在平常的工作模式中,我们可以通过来写PMS的值来改变PLL的输出频率,当我们通过软件来写PMS的值时,PLL的锁存(lock time)被自动插入,在这个lock time期间,PLL是没有产生有效的时间给S3C2443的,在lock time过后,PLL才产生有效和稳定的clock给SYSCLK,见下图。

S3C2443时钟管理 - 男儿当自强 - 男儿当自强的博客

PMS分别指的是PDIV、MDIV和SDIV,而PDIV是值PLL main divider value,MDIV是指PLL pre-divider value,SDIV是指PLL post-divider value,控制MPLL和EPLL时钟的寄存器MPLLCON和EPLLCON否有这几个值的定义。

 

4.系统时钟控制

由下图可知ARMCLK是ARM920T的内核时钟,也是S3C2443的CPU时钟;HCLK是内部AHB bus和比如是内存控制器、中断控制器、LCD控制器等外围设备的基准时钟;PCLK是内部APB bus和比如是WDT、IIS、I2C等外围设备的基准时钟;DDRCLK是MDDR内存的data strobe时钟。

S3C2443时钟管理 - 男儿当自强 - 男儿当自强的博客

4.1 MPLL的时钟控制

S3C2443时钟管理 - 男儿当自强 - 男儿当自强的博客

从上图可知,MSysClk是ARMCLK、HCLK、PCLK、DDRCLK这些时钟的基准时钟,而ARMCLK、HCLK、PCLK、DDRCLK这些时钟到底有什么关系呢,通过对CLKDIVO控制寄存器的设置可以得到它们之间不同的比值关系,见下表

 S3C2443时钟管理 - 男儿当自强 - 男儿当自强的博客

4.2 EPLL的时钟控制

S3C2443时钟管理 - 男儿当自强 - 男儿当自强的博客

从上图可知EPLL的时钟ESYSCLK被用作不同的外围控制器提供基准时钟,通过divider的分频可以得到不同外围控制所需要的时钟,而这个分频值是通过对CLKDIV1寄存器的配置来实现的,也可以通过编程SCLKCON寄存器来关闭或者开启不同外围控制器的时钟。

 

在stop和sleep模式,EPLL将被自动关闭,在退出stop和sleep模式的时候,如果SCLKCON寄存器中相关位被使能的情况下,那么EPLL将为使能的外围控制器产生时钟。

 

5. 上电复位PLL时钟的启动流

S3C2443时钟管理 - 男儿当自强 - 男儿当自强的博客

在电压源提供所需要的电压给系统上电复位后,晶体振荡器在几毫秒之内起振,刚开始的时候MPLL和EPLL都是停止的。当nRESET在晶振时钟稳定后释放(由低电平变为高电平),PLL开始是使用PLL的输入时钟Fin作为SYSCLK时钟的,系统上电复位后,必须通过软件来配置MPLLCON和EPLLCON使用每个PLL,也即通过写MPLLCON和EPLLCON的PDIV、MDIV和SDIV值,接着会自动插入PLL的lock time,lock time之后,PLL的输出时钟Fout就是作为SYSCLK时钟来使用了,这些动作一般是在startup.s函数中初始化的,见下图

 S3C2443时钟管理 - 男儿当自强 - 男儿当自强的博客

  评论这张
 
阅读(825)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017