|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
S5pv210 时钟APLL,VPLL,EPLL分析
. F$ w' m% l8 `
/ o" @9 t3 G5 i1 R' bU-BOOT在启动的过程中,需要配置系统时钟。配置系统时钟,大概是以下几个步骤:
' a' H! k! I7 `(1)设置系统PLL锁定时间+ f% M4 @- C; O. C
(2)配置PLL$ w" x( Y H" h' ^
(3)配置各模块分频系数
! e/ e; |6 [3 }(4)切换到PLL时钟
- B, h4 `" R. X( ~% q# t8 e2 |: [) t
0 d i6 k9 l2 O& s1.基本原理
5 H5 A2 C, W; O, t! D: a首先输出一个高电平,然后,通过三个晶振,输出一个频率,然后,通过倍频器(锁相环),将频率升高,然后,再通过分频,把分出来的不同的频率,提供给不同的器件,比如ARM Cotrex内核、各种设备控制器等等。
# C* `9 L) ]5 t; ^" W' ~% ~1 |9 RTiny210(S5PV210)上蓝色的框标注的就是晶振的位置,最上面的是27MHz,中间和下面两颗是24MHz,顺便讲一下另外几片东西,最左边的四片是内存DDR2-800,这表示数据传输频率为800MHz,外部时钟频率200MHz,内部时钟频率为100MHz;下面的黄色框是NAND FLASH,外部时钟频率133MHz。
; i# N1 X+ i" s: N. |' ^; \7 \: k# f+ V% G: S2 R
5 I: {5 N' C7 b6 W- B+ Y
1 z; j3 F* ` \- K' J倍频的原理:( q% m: F6 N" W! D8 F* U
下图就是上电后的XXTI输出的频率变化图(XXTI引脚见P361的系统时钟流程图最左边的XXTI引脚,XXTI的详细介绍见P354的Figure 3-2 S5PV210 Top-Level Clocks),频率从小变到指定频率需要一段时间(图中标红框的部分),当CPU频率在变化的时候,比如由复位后的初始的400HZ,我要升到1000HZ, 这时,首先把CPU的频率锁定,因这此时CPU的频率是变化的,频率变化,CPU的状态就无法确定,所以,此时用PLL--phase-locked loop锁相环,将CPU频率锁定一段时间,直到我的频率输出稳定为止。芯片手册上显示APLL默认的设置时间为30us(30毫秒)。2 i; V& e' f C6 S7 T$ u
! K+ v6 \* _/ Z# G+ P9 z* L) ^
5 o5 i: _$ {1 {
锁定频率后,此时,应该设置一个倍频因子,在ARM手册中去查表10.2,P,M,S, 设置对应的位的值,然将频率提升,比如从晶振输出的24MHz,抬升到1000MHz(S5PV210的CPU旁边有三个晶振,两个24MHz, 一个27MHz)。& ]: x6 X' R0 A' m, L8 R
; S, N0 v1 A! P
分频的原理:
9 X# O1 {2 P4 [设置不同的位,比如,设置某一位为0,那么,分频时,原来频率比如为1000HZ,那么频率就被分为1000/1=1000Hz, 这样就可以分给ARMCLK使用。2 r- F( Z- b6 s
m1 ?7 {+ N0 N4 V n v) n$ V2.开始分析
) J; w# ? t7 O! P* D0 f3 ?( Y9 T- a7 L. P
% }2 n0 z1 V1 S: B: `; K* e$ w u2 v" G6 r' D
S5PV210的Clock分为三个domain,意思是三个区域--MSYS,DSYS,PSYS,这三个区域分别都是AMBA总线,AMBA总线分为AHB和APB两种总线(这是不严格的分法,仅仅是便于理解),每种总线都有不同的时钟频率,AHB--HCLK/APB--PCLK
# \& | Y7 x. ?0 y/ v( w! f那么MSYS,DSYS,PSYS最少有6个时钟(实际上不止6个),分别为HCLK_MSYS/PCLK_MSYS、HCLK_DSYS/PCLK_DSYS、HCLK_PSYS/PCLK_PSYS,再外加一个CPU要用的时钟ARMCLK,总共7个时钟频率。MSYS,DSYS,PSYS分别管理不同的设备,为不同的设备提供不同的频率。# T0 {/ b, g5 o0 Z7 |
) V# P1 J1 z, B& J
+ j8 z2 p4 n) R; Y7 H! x0 r" A$ K1 `+ m! ?8 d# ~
再往下翻,这些不同设备的频率是如何产生的呢?由图可知最后,总共有13个CLK提供出来。
7 u3 u! q) q5 o2 K' ?
) f3 Y. \) y4 e$ A( [9 n0 ~8 D
% ?& `. R' J" A3 J! x4 b! ], `
, G# @ o/ `/ F6 `, B* B. T" o由上图可知,通过XOM[0]产生频率,然后在APLL升频,然后在分频1时,有一个两级分频,然后,在分频2又有一个8级分频,最后,就可以输出一个频率,提供给S5PV210的ARM芯片使用,P356页查到常用的CLK值,这里我们的S5PV210的ARMCLK为1000MHz。* C: p) ^ o& ~$ A" j9 d9 A2 i
那么,在硬件上是如何实现的呢?
2 d3 ~. ?" n0 _# F, e8 F观察:5 A; Z3 j! c3 f
开发板上晶振有三颗,两个24Hz,一个27Hz。(晶振,全名晶体振荡器,成份石英(二氧化硅),晶振用于通过压电效应给CPU提出振荡频率,再通过别的电路,将例如正弦曲线波转换成方波,相当于CPU的起搏器,有了晶振,CPU才有频率输出)。
4 g9 j$ P i: m; DCPU输出比如24Hz频率后,此时,就需要把频率放大了(否则CPU才24Hz的频率能干吗呢?),在频率放大的过程中,首先需要考虑的一个问题就是----phase-locked loop锁相环。简单的说,比如复位后,CPU默认工作频率在400Hz,现在需要升到1000Hz工作,那么从400-->1000Hz需要一个过程,假设为时间t1,在t1这段时间内,CPU的频率是变化的,那么CPU的状态就是不稳定的,此时,就需要把频率锁定,设置锁定时间,直到CPU稳定的输出频率。
; V, N2 q# ^4 g% z2 i% G! ^CPU第一次启动时,PLL有一个默认的初始值,芯片手册找到P522页,找到默认的初始频率:, f3 Q* M6 p* |4 o' e/ F2 x+ |
• APLL: M=200, P=6, S=1 FOUT = (MDIV X FIN )/ (PDIV X 2(SDIV-1))) = 800MHz . x. l8 ]6 v4 m
• MPLL: M=667, P=12, S=1 FOUT = (MDIV X FIN) / (PDIV X 2SDIV) = 667MHz 4 s7 q2 e4 A/ x8 T! Q9 C7 l9 @6 r
• EPLL: M=80, P=3, S=3, K=0 FOUT = ((MDIV+KDIV) X FIN) / (PDIV X 2SDIV) = 80MHz
3 R8 w, N1 D% p/ o; s l, r* b7 N4 m
7 [3 f% c1 Z0 ?5 {, H
. \9 j8 |+ V3 `) Z由上图查出可知,ARMCLK的默认频率为400MHz
. X* Z. k+ P1 y- _* D; o8 O- ~) j& J
) W0 s- D# F/ c9 l# o
! \) ^6 ~0 V' P, C1)查看芯片手册的P356页,查出总共有以下几种由CMU输出的时钟
" P" P7 h+ r. Q, F" v8 c有四种PLLs(APLL,MPLL,EPLL,HPLL),还包括USB_OTG PHY clock。
# k% V' v* D: ?To generate internal clocks, the following components are used.
7 H" }+ m. w1 Y1 t- l3 e0 H0 j• APLL uses FINPLL (refer to Figure 3-1) as input to generate 30MHz ~ 1GHz.6 U5 B4 C& `6 t _* ?/ {
• MPLL uses FINPLL as input to generate 50MHz ~ 2GHz.
2 B4 I9 e6 J; R1 x* {6 A8 ~• EPLL uses FINPLL as input to generate 10MHz ~ 600MHz. k) y$ N! r% m/ h$ K- V0 e
• VPLL uses FINPLL or SCLK_HDMI27M as input to generate 10MHz ~ 600MHz. This PLL generates 54MHz video clock.$ o. f; m# j' M/ d# d
• USB OTG PHY uses XUSBXTI to generate 30MHz and 48MHz" A& D6 ]9 k9 J; ?* B. z& X
• HDMI PHY uses XUSBXTI or XHDMIXTI to generate 54MHz
3 H& u4 @. }/ l* ]常用的APLL/MPLL/EPLL/VPLL是干什么的呢?P448页) d& }' c) F( Z. G5 Y: x. ]
• APLL: used to generate ARM clock
1 c/ m# l5 ] v' ?# _6 `+ M3 Y1 ~• MPLL: used to generate system bus clock and several special clocks
/ i4 h3 _- ^9 Z7 v6 c# U• EPLL: used to generate several special clocks4 x+ D1 Y% o4 C" |
• VPLL: used to generate Video clocks. Usually, generates 54 MHz.
+ q' W% V( ^! O. l- @4 K' n- ~
# K$ U# Q/ b0 r- Y% [3 ~$ I/ V0 g2 c, D) Q
2)先查看APLL PMS的倍频表2 @" b/ n! D! p1 y" O4 _3 L
P357 S5PV210_UM_REV1.1.pdf -- Table 3-1. APLL PMS Value
, n& K0 Q3 ~$ J+ n8 T9 F5 b: `% T$ P# v( g$ w( o0 ]' [
# f. a% A7 j4 e7 M7 K; R7 k
0 q2 A+ @' f6 L$ V h) ?& l
查看芯片手册,设置P/M/S的bit,可以将频率拉升到我们想要的频率。8 g/ G( x, E% y) T+ w6 [ B
那么我们要设置升高频,翻看手册,P371页,找到PLL CONTROL REGISTERS。 b" K2 I7 f. B @9 b! S
• (APLL_LOCK, R/W, Address = 0xE010_0000)! k0 T9 b7 L5 @# V8 j$ Q3 o$ ~
• (MPLL_LOCK, R/W, Address = 0xE010_0008)
& _* a# F q, p% l• (EPLL_LOCK, R/W, Address = 0xE010_0010)
1 `" k: G$ n9 d. n2 E• (VPLL_LOCK, R/W, Address = 0xE010_0020) : {0 \) n% f. R) |& m
. H$ Z1 K: Z! u8 I5 v$ I: Y
1 i, C( [" F, G- }+ U+ W- Y
' N1 F' a+ L- I9 [' h" P) b8 g由芯片手册上显示APLL的lock time是30us,如果是晶振输出的频率是24MHZ,lock time是30毫秒,那么PLL_LOCKTIME是720,也就是0x2D0。OK,下一篇开始结合u-boot的源码来分析如何配置系统时钟。 |
: j+ K3 O+ G5 k- S) p |
|