ARM系列之時鐘模塊詳述及其分頻系數(shù)的設(shè)定
本文引用地址:http://m.butianyuan.cn/article/201611/317000.htm
-------------------------------------o---------------------------------------------------------
關(guān)于時鐘源選擇的問題,主要時鐘源一個來自于外部晶振(XTlpll),一個來自于外部時鐘(EXTCLK)。時鐘發(fā)生器包括一個連接到外部晶振的振蕩器和兩個鎖相環(huán)(PLL)。 時鐘源的選擇可以通過芯片引腳的狀態(tài)進行配置,即芯片的OM3和OM2引腳。具體分配情況如下表所示:(原理圖中已經(jīng)將OM3和OM2都接地,即00的情況,用的是外部晶振,而且晶振頻率為12MHz)。.
---------------------------o-----------------------------------------------------
具體分頻寄存器設(shè)置時序如下圖所示:(盡管MPLL在系統(tǒng)復(fù)位的時候就開始產(chǎn)生,但是只有有效的設(shè)置好MPLLCON寄存器后才能用于系統(tǒng)時鐘。在此之前,外部時鐘將直接作為系統(tǒng)時鐘。即使不需要改變MPLLCON寄存器的初值,也必須將同樣的值寫入寄存器。設(shè)置完成后,經(jīng)過LOCKTIME的時間,設(shè)置的分頻才能起效果。)
如上圖所示,F(xiàn)CLK的啟動過程:
1、上電幾毫秒后,晶振輸出穩(wěn)定,F(xiàn)CLK=晶振頻率,nRESET信號恢復(fù)高電平后,CPU開始執(zhí)行指令。
2、我們可以在程序開頭啟動MPLL,在設(shè)置MPLL的幾個寄存器后,需要等待一段時間(Lock Time),MPLL的輸出才穩(wěn)定。在這段時間(Lock Time)內(nèi),F(xiàn)CLK停振,CPU停止工作。Lock Time的長短由寄存器LOCKTIME設(shè)定。
3、Lock Time之后,MPLL輸出正常,CPU工作在新的FCLK下。LOCKTIME默認時間為200us。
-----------------------------------------o-------------------------------------------------
時鐘分頻流程如下圖所示:(Fin默認為外部晶振時鐘頻率,12MHz。)
位于時鐘信號發(fā)生器的內(nèi)部MPLL用于將輸出信號和相關(guān)輸入信號在相位和頻率上同步起來。包括上圖所示的一些基本模塊:根據(jù)DC電壓產(chǎn)生相應(yīng)比例關(guān)系頻率的壓控振蕩器VCO,出書P(對輸入頻率Fin進行分頻),除數(shù)M(對VCO的輸出頻率進行M分頻,分頻后輸入到相位頻率探測器PFD),除數(shù)S(對MPLL輸出頻率Mpll進行分頻),相差探測器,charge pump,loop filter。
----------------------------o------------------------------------------------
時鐘頻率的計算關(guān)系:FCLK,HCLK,PCLK.(其中已經(jīng)知道用于USB的UCLK位48MHz。)
一般情況下,這三個始終之間是存在一定的額比例關(guān)系的,默認情況下為1:1:1。但是通常情況下會設(shè)置為1:4:8或者1:3:6。寄存器CLKDIVN用于設(shè)置這三者之間的比例關(guān)系。
也就是說,如果CLKDIVN設(shè)置為0x5,那么比例即為1:4:8,前提是CAMDIVN[9]為0.也就說如果主頻FLCK是400MHz,按照1:4:8的設(shè)置,那么HLCK是100MHz,PLCK是50MHz。講到這里主題也該突出,說到最后,問題的關(guān)鍵就是如何計算FCLK了吧?。?!
--------------------------------ooo------------------------------------------
現(xiàn)在的CPU主頻都是通過倍頻的技術(shù)實現(xiàn)的,下面就描述下如何個倍頻法:
1. MPLL. 對于S3C2440來說,常用的輸入Fin主要有兩種頻率:12MHz和16.935MHz。CPU通過MDIV、PDIV和SDIV進行倍頻得到MPLL,即FCLK。公式如下所示:
Mpll = (2 * m * Fin) / (p * 2^S)
m = (MDIV + 8), p = (PDIV + 2), s = SDIV; 1<=M<=248,1<=P<=62
理論上,我們可以通過設(shè)置任意值而得到我們想要的頻率,然而由于實際存在種種的約束關(guān)系,設(shè)置一個適當(dāng)?shù)念l率不容易,手冊中推薦了如下的設(shè)置值:
例如,假設(shè)輸入時鐘FIN=16.9344M,MDIV=110, PDIV=3, SDIV=1,利用上面的公式,F(xiàn)CLK=2*16.9344*(110+8)/((2+3)*2)=399.65 MHz。
2. UPLL.上面已經(jīng)詳細的描述了MPLL的設(shè)置過程。下面著重描述USB的使用頻率UPLL的設(shè)置。需要對UPLLCON寄存器設(shè)置,如上上圖所示。同樣也可以通過查表。
Upll = (m * Fin) / (p * 2^S)
m = (MDIV + 8), p = (PDIV + 2), s = SDIV
需要注意的是CLKDIVN寄存器的第三位DIVN_UPLL用來設(shè)置USB時鐘UCLK和UPLL的關(guān)系,如果UPLL已經(jīng)是48Mhz了,那么這一位應(yīng)該設(shè)置為0,表示1:1的關(guān)系,否則是1:2的關(guān)系。由于目標(biāo)USB只需要48MHz的頻率,所以源頻率,即UPLL只能為48或者96。
--------------------------------ooo------------------------------------------
講到這里,重點都說了哇,不多還有些特別的東西需要提出來下。
1. 在arm的體系中,還存在一個概念,叫做慢時鐘模式的概念,即將時鐘減半或者關(guān)閉,以減少能源消耗??梢酝ㄟ^CLKSLOW和CLKDIVN寄存器相互配合實現(xiàn)。如下圖所示:
2. arm體系中很多模塊都需要時鐘,要是能夠?qū)⒉恍枰褂脮r鐘的外設(shè)的時鐘共用給關(guān)了,也能減少消耗,在arm中提供了這樣的寄存器給予定制,即CLKCON寄存器。
3. 專門用于相機時鐘設(shè)定的寄存器CAMDIVN。如下圖所示,在分頻時候用到了HCLK4_HALF、HCLK3_HALF。
沒了~~~
------------over----------------------------------------
樣例程序如下:
[PLL_ON_START; //設(shè)置CLKDIVN的值在PLL鎖存時間LOCKTIME之后有效。
;Configure FCLK:HCLK:PCLK
ldrr0,=CLKDIVN
ldrr1,=CLKDIV_VAL;CLKDIV_VAL=7,7=1:3:6. Fclk:Hclk:Pclk
strr1,[r0]
;Configure UPLL //UPLL
ldrr0,=UPLLCON
ldrr1,=((U_MDIV<<12)+(U_PDIV<<4)+U_SDIV) ; //Fin = 12.0MHz, UCLK = 48MHz
strr1,[r0]
;Configure MPLL //MPLL
ldrr0,=MPLLCON
ldrr1,=((M_MDIV<<12)+(M_PDIV<<4)+M_SDIV) ; //Fin = 12.0MHz, FCLK = 400MHz
strr1,[r0]
]
END.!!!
評論