s3c2440的時(shí)鐘詳解
s3c2440 cpu的默認(rèn)工作主頻有兩種12MHz和16.9344MHz,也就是我們的晶振的頻率,但一般12MHz的晶振用的比較多,F(xiàn)in就是指我們接的晶振頻率。大家都知道s3c2440上電正常工作后頻率是遠(yuǎn)遠(yuǎn)大于12MHz和16.9344MHz的,我們的s3c2440的cpu正常工作時(shí)的頻率就是405MHz,因此這就需要一個(gè)電路來(lái)提升頻率,在s3c2440的datasheet中找到了這個(gè)電路,下面這個(gè)就是PLL電路:
由圖中可以看出,F(xiàn)in進(jìn)去后,經(jīng)過(guò)PLL電路,最終輸出兩個(gè)PLL信號(hào)頻率即MPLL和UPLL,這兩個(gè)又是什么呢
UPLL是專用于USB設(shè)備的,MPLL是用于CPU及外圍電路的,不清楚,還是得找s3c2440的datasheet,下面這就是從datasheet中截取的:
圖中給出了各種接口設(shè)備使用的時(shí)鐘信號(hào)
UPLL是USB專用,這里就不講了,下面重點(diǎn)講下MPLL,剛才已經(jīng)說(shuō)了MPLL主要用于CPU和外圍設(shè)備,但外圍設(shè)備和CPU的工作頻率并不一樣啊,CPU的工作頻率肯定比外設(shè)要高,這就必然要對(duì)MPLL進(jìn)行處理,于是FCLK,HCLK,PCLK就登場(chǎng)了
首先講下FCLK,首先看下datasheet中的介紹:
The Clock control logic in S3C2440A can generate the required clock signals including FCLK for CPU, HCLK for the
AHB bus peripherals, and PCLK for the APB bus peripherals.
相信搞嵌入式的都能看的懂,F(xiàn)CLK是CPU用的,HCLK是AHB總線用的,比如說(shuō)SDRAM,PCLK是APB總線用的,比如說(shuō)UART。這三個(gè)我們一個(gè)個(gè)來(lái)講解,首先看FCLK,CPU用的,看datasheet中的關(guān)于FCLK的時(shí)序圖,我們就會(huì)看出一些東東。
從上面的圖中可以看到FCLK在CPU上電后,過(guò)了一段時(shí)間就發(fā)生了比較大的變化,明顯值變大了,從上面這個(gè)圖中我們可以大致看出s3c2440上電啟動(dòng)過(guò)程:
1、上電幾毫秒后(power由低變高),晶振輸出穩(wěn)定,此時(shí)FCLK=晶振頻率,nRESET信號(hào)恢復(fù)高電平后,CPU開始執(zhí)行指令。
2、我們可以在程序開頭啟動(dòng)MPLL,在設(shè)置MPLL的幾個(gè)寄存器后,需要等待一段時(shí)間(Lock Time),MPLL的輸出才穩(wěn)定。在這段時(shí)間(Lock Time)內(nèi),F(xiàn)CLK停振,CPU停止工作。Lock Time的長(zhǎng)短由寄存器LOCKTIME設(shè)定。
3、Lock Time之后,MPLL輸出正常,CPU工作在新的FCLK下。
現(xiàn)在對(duì)FCLK進(jìn)行總結(jié)一下,F(xiàn)CLK,在CPU上電后,晶振開始正常工作,此時(shí)FCLK=晶振頻率,注意此時(shí)不存在MPLL,經(jīng)過(guò)PLL電路后,得到MPLL,UPLL。此時(shí)FCLK=MPLL。
總的來(lái)說(shuō)分頻比為FCLK:HCLK:PCLK=1:4:8,這個(gè)分配標(biāo)準(zhǔn)是由誰(shuí)定的呢,就是我們的CLKDIVN寄存器,看下datasheet中的介紹大家就清楚了:
S3C2440使用了三個(gè)倍頻因子MDIV、PDIV和SDIV來(lái)設(shè)置倍頻,通過(guò)寄存器MPLLCON&UPLLCON可設(shè)置倍頻因子。
MPLLCON的輸入輸出頻率間的關(guān)系為
FCLK=MPLL=(2*m*Fin)/(p*2^s) ,其中m=(MDIV+8), p=(PDIV+2), s=SDIV。
UPLLCON的輸入輸出頻率間的關(guān)系為
UCLK=UPLL=(m * Fin) / (p * 2^s) ,其中m=(MDIV+8), p=(PDIV+2), s=SDIV。
手工計(jì)算相對(duì)復(fù)雜些,我們可以根據(jù)欲得到的主頻FCLK大小,直接通過(guò)查表來(lái)獲知各倍頻因子的設(shè)置參數(shù)。
對(duì)于12MHz的晶振,要想經(jīng)過(guò)PLL電路得到405MHz,查表得應(yīng)該設(shè)置MDIV、PDIV、SDIV分別為0x7f、2、1。
那在哪里設(shè)置MDIV、PDIV和SDIV這3個(gè)值呢,還是datasheet:
從上圖可以看出,我們只需要設(shè)置MPLLCON寄存器就可以確定FCLK了,再通過(guò)CLKDIVN寄存器我們就可以設(shè)置FCLK、HCLK、PCLK三者之間的比例了。
關(guān)于時(shí)鐘設(shè)置的還有一個(gè)寄存器,就是LOCKTIME,在上面的時(shí)序圖中可以看到它的身影,datasheet中介紹:
前面說(shuō)過(guò),MPLL啟動(dòng)后需要等待一段時(shí)間(Lock Time),使得其輸出穩(wěn)定。位[31:16]用于UPLL,位[15:0]用于MPLL。使用確省值0x00ffffff即可。
講到這里,相信大家對(duì)s3c2440的時(shí)鐘配置應(yīng)該都明白了吧。