|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
S5pv210 时钟APLL,VPLL,EPLL分析 ( J( f+ \4 J0 t/ [" o
" W2 Y6 c1 b8 yU-BOOT在启动的过程中,需要配置系统时钟。配置系统时钟,大概是以下几个步骤:
2 j: t5 h" S) w. Q(1)设置系统PLL锁定时间* W1 [5 `6 L9 @% c2 R" r1 g
(2)配置PLL
. N4 u; r0 L. q2 r(3)配置各模块分频系数, z5 P* G+ d6 m1 K& Y
(4)切换到PLL时钟9 y0 E0 [% z I ^/ y* s! u' h
) o% i) g7 E1 Z* y0 v* L% }7 a: v o
1.基本原理! |# Z( ^! P! p6 g/ k) F/ {- @# b
首先输出一个高电平,然后,通过三个晶振,输出一个频率,然后,通过倍频器(锁相环),将频率升高,然后,再通过分频,把分出来的不同的频率,提供给不同的器件,比如ARM Cotrex内核、各种设备控制器等等。5 d7 _8 @' t4 h
Tiny210(S5PV210)上蓝色的框标注的就是晶振的位置,最上面的是27MHz,中间和下面两颗是24MHz,顺便讲一下另外几片东西,最左边的四片是内存DDR2-800,这表示数据传输频率为800MHz,外部时钟频率200MHz,内部时钟频率为100MHz;下面的黄色框是NAND FLASH,外部时钟频率133MHz。
0 Z, i0 n2 u' D" K {5 s+ j, Y! N2 ~1 p, u
9 w3 a4 t% b4 v! T: ]
4 _! L) a: \9 |! [* b' M倍频的原理:1 k3 o$ b' a$ [4 b
下图就是上电后的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毫秒)。" q& j& ?5 P& j0 e( U9 y
4 d3 }/ g! x! L0 q, a% m: p0 D
L% @) C9 z5 g( `
锁定频率后,此时,应该设置一个倍频因子,在ARM手册中去查表10.2,P,M,S, 设置对应的位的值,然将频率提升,比如从晶振输出的24MHz,抬升到1000MHz(S5PV210的CPU旁边有三个晶振,两个24MHz, 一个27MHz)。
: G0 G5 W% {3 t( Q4 t1 f. G3 `# u
. u+ S5 p! E; }3 c0 c分频的原理:; {7 r, X/ ~2 h) W+ S) K5 D1 T
设置不同的位,比如,设置某一位为0,那么,分频时,原来频率比如为1000HZ,那么频率就被分为1000/1=1000Hz, 这样就可以分给ARMCLK使用。, |! _+ X/ M7 M; X
8 L m! N1 L& W& h6 Z2.开始分析
+ Z. G" O8 h9 }0 ]7 L1 q
( q6 _& I7 d, i. U
" L3 i) V! q* \
% ^" y$ p- g7 M6 T$ j& p7 sS5PV210的Clock分为三个domain,意思是三个区域--MSYS,DSYS,PSYS,这三个区域分别都是AMBA总线,AMBA总线分为AHB和APB两种总线(这是不严格的分法,仅仅是便于理解),每种总线都有不同的时钟频率,AHB--HCLK/APB--PCLK: V! q R4 Z& x
那么MSYS,DSYS,PSYS最少有6个时钟(实际上不止6个),分别为HCLK_MSYS/PCLK_MSYS、HCLK_DSYS/PCLK_DSYS、HCLK_PSYS/PCLK_PSYS,再外加一个CPU要用的时钟ARMCLK,总共7个时钟频率。MSYS,DSYS,PSYS分别管理不同的设备,为不同的设备提供不同的频率。4 M: |/ S# m" P+ p: ]( T, O" j
" n5 C, _- K9 E
; F4 ?0 S6 g1 x7 m2 Q& |3 M' ?4 B, B8 V, C) B% c
再往下翻,这些不同设备的频率是如何产生的呢?由图可知最后,总共有13个CLK提供出来。
: \3 v2 u! E3 J. @+ O; a9 ~) o. ^/ c; x
. A. N: E" m( A. z! j+ d" H& _
0 Y, k4 [8 Q& q; n, x
% t* L6 L/ \: b: Y2 I
由上图可知,通过XOM[0]产生频率,然后在APLL升频,然后在分频1时,有一个两级分频,然后,在分频2又有一个8级分频,最后,就可以输出一个频率,提供给S5PV210的ARM芯片使用,P356页查到常用的CLK值,这里我们的S5PV210的ARMCLK为1000MHz。# v' N! {, z/ y7 `; _0 k7 ]
那么,在硬件上是如何实现的呢?7 h1 q* |9 y* [: [5 w
观察:
2 Z8 `- `- p; H) E T7 \ L开发板上晶振有三颗,两个24Hz,一个27Hz。(晶振,全名晶体振荡器,成份石英(二氧化硅),晶振用于通过压电效应给CPU提出振荡频率,再通过别的电路,将例如正弦曲线波转换成方波,相当于CPU的起搏器,有了晶振,CPU才有频率输出)。7 K# V4 ^' i2 g2 Y
CPU输出比如24Hz频率后,此时,就需要把频率放大了(否则CPU才24Hz的频率能干吗呢?),在频率放大的过程中,首先需要考虑的一个问题就是----phase-locked loop锁相环。简单的说,比如复位后,CPU默认工作频率在400Hz,现在需要升到1000Hz工作,那么从400-->1000Hz需要一个过程,假设为时间t1,在t1这段时间内,CPU的频率是变化的,那么CPU的状态就是不稳定的,此时,就需要把频率锁定,设置锁定时间,直到CPU稳定的输出频率。
- R" Q/ O/ v2 h& \CPU第一次启动时,PLL有一个默认的初始值,芯片手册找到P522页,找到默认的初始频率:
1 v1 N+ @0 G, P+ R1 \• APLL: M=200, P=6, S=1 FOUT = (MDIV X FIN )/ (PDIV X 2(SDIV-1))) = 800MHz
4 r& s3 t7 U- |3 d• MPLL: M=667, P=12, S=1 FOUT = (MDIV X FIN) / (PDIV X 2SDIV) = 667MHz 4 O Y+ Q; x# Q3 u
• EPLL: M=80, P=3, S=3, K=0 FOUT = ((MDIV+KDIV) X FIN) / (PDIV X 2SDIV) = 80MHz * m& s9 N9 k: w& y% S
/ D, Y( ^3 K' J7 r
6 C+ M% _, v7 a% _) G* p3 i1 S2 S
" G; y/ ]+ t; X+ Z9 d7 w由上图查出可知,ARMCLK的默认频率为400MHz9 w. C* b: K/ y+ X Y n
+ w8 s: o, m; @& b
* Q! e+ O }( y6 P+ {8 _& f' {8 L* Q1)查看芯片手册的P356页,查出总共有以下几种由CMU输出的时钟2 K* h# ?( m1 b
有四种PLLs(APLL,MPLL,EPLL,HPLL),还包括USB_OTG PHY clock。
$ y, g+ K' z0 D9 M; k- sTo generate internal clocks, the following components are used.5 P/ ?" H) p! d2 f1 F+ D* u
• APLL uses FINPLL (refer to Figure 3-1) as input to generate 30MHz ~ 1GHz.9 L/ G1 `) e7 @+ u
• MPLL uses FINPLL as input to generate 50MHz ~ 2GHz.3 Q; a* Z2 N( ~/ U, X' c- S. v3 F
• EPLL uses FINPLL as input to generate 10MHz ~ 600MHz.
. B# P( L1 e; `8 I• VPLL uses FINPLL or SCLK_HDMI27M as input to generate 10MHz ~ 600MHz. This PLL generates 54MHz video clock. a% W% V' x: b. b
• USB OTG PHY uses XUSBXTI to generate 30MHz and 48MHz
. m9 v0 i$ D4 `& m5 ~" Y; S6 r• HDMI PHY uses XUSBXTI or XHDMIXTI to generate 54MHz, l5 }" n, Z. Q! q3 O/ {$ N
常用的APLL/MPLL/EPLL/VPLL是干什么的呢?P448页- H7 i! X: A: Q& C3 o! {
• APLL: used to generate ARM clock
) z( G" j* A0 D2 S! ^/ G• MPLL: used to generate system bus clock and several special clocks
, q i; H% u: ?* x6 a• EPLL: used to generate several special clocks; d2 H0 @; f! m8 z
• VPLL: used to generate Video clocks. Usually, generates 54 MHz.0 j7 \+ ?2 R! H Z4 T$ s
7 g. {6 B& l0 [
& s- t, W; @! G8 Z7 _+ Y3 E2)先查看APLL PMS的倍频表" ^$ }9 x4 S9 p9 C! {8 c. F9 i; R6 g
P357 S5PV210_UM_REV1.1.pdf -- Table 3-1. APLL PMS Value
0 v5 J# T- m! j* g5 L# }) o- g' {
* x l8 @) s" t& Q
( Z; U( z$ |6 T O, |查看芯片手册,设置P/M/S的bit,可以将频率拉升到我们想要的频率。
0 {% i) V7 G) W4 c那么我们要设置升高频,翻看手册,P371页,找到PLL CONTROL REGISTERS。( R) ?# {8 t. Y g5 [
• (APLL_LOCK, R/W, Address = 0xE010_0000) F+ b& N. c) G4 P
• (MPLL_LOCK, R/W, Address = 0xE010_0008)0 S- K, @% d' ]6 @1 s9 X+ G
• (EPLL_LOCK, R/W, Address = 0xE010_0010)' B: S4 _( ?8 v
• (VPLL_LOCK, R/W, Address = 0xE010_0020)
( \9 g: F) g8 h1 n# E
& W8 |: d4 D1 b
8 L$ G9 F4 S! g) ~/ J/ r" C" A) i8 \; b( B" w3 h$ j, o) K2 l
由芯片手册上显示APLL的lock time是30us,如果是晶振输出的频率是24MHZ,lock time是30毫秒,那么PLL_LOCKTIME是720,也就是0x2D0。OK,下一篇开始结合u-boot的源码来分析如何配置系统时钟。 | - W8 k) m. ]9 G1 J% w6 ?
|
|