s3c2440有兩個pll(phase locked loop)乙個是mpll,乙個是upll。mpll用於cpu及其他外圍器件,upll用於usb。
s3c2440a 中的時鐘控制邏輯可以產生必須的時鐘訊號,包括cpu 的fclk,ahb 匯流排外設的hclk 以及
apb 匯流排外設的pclk。s3c2440a 包含兩個鎖相環(pll):乙個提供給fclk、hclk 和pclk,另乙個專用於
usb 模組(48mhz)。時鐘控制邏輯可以不使用pll來減慢時鐘,並且可以由軟體連線或斷開各外設模組的時鐘,
從s3c2440的datasheet裡可以看到,s3c2440最大支援400mhz的主頻,但是這並不意味著一定工作在400mhz下面,可以通過設定mpll, upll暫存器來設定cpu的工作頻率。
儘管在cpu上電(power-on)或者復位(reset)後,mpll就開始進入工作狀態,但是此時mpll的輸出(mpll)並不作為系統的時鐘,而是直接使用外部訊號extclk或者外部時鐘晶振作為系統時鐘。直到軟體初始化mpll暫存器(rmpllcon),寫入了有效的值過後,系統才開始使用mpll的輸出(mpll)作為系統時鐘。雖然很多時候我們不必重新設定mpll暫存器(rmpllcon)新的值,但是為了使系統使用其輸出作為時鐘訊號,在軟體初始化系統部分,還是要向rmpllcon寫入乙個有效的舊的值。這樣子才使系統處於正確的工作狀態。
關於mpll的計算方法
1.u32 mpll_val=0;
mpll_val = (92<<12)|(1<<4)|(1);
算得mpll_val
的二進位制:
0101 1100 0000 0001 0001
注意:(92<<12)
中的92
為十進位制數,轉換為二進位制為
0x5c。2.
changempllvalue((mpll_val>>12)&0xff, (mpll_val>>4)&0x3f, mpll_val&3);代入1
算得:changempllvalue(0x5c,1,1);
3.找到
changempllvalue
子函式void changempllvalue(int mdiv,int pdiv,int sdiv)
4.呼叫子函式,得到
rmpllcon
二進位制為:
0101 1100 0000 0001 0001
5.根據
s3c2440a
官方datasheet
:pllcon bit deion
mdiv [19:12] main divider control
pdiv [9:4] pre-divider control
sdiv [1;0] post divider control
以及mpll control register
mpll=(2*m*fin)/(p*2s)
m=(mdiv+8) p=(pdiv+2) s=sdiv
因rmpllcon
二進位制為:
0101 1100 0000 0001 0001,
所以m=(mdiv+8)=([19:12]+8)=92+8=100
p=(pdiv+2)=([9:4]+2)=1+2=3
s=sdiv=[1:0]=1
mpll=(2*m*fin)/(p*2s)=(2*100*12)/(3*2)=400m
pclk是為apb匯流排提供的時鐘訊號,advanced peripherals bus,主要用於低速外設,比如看門狗,uart控制器, iis, i2c, sdi/mmc, gpio,rtc and spi等。
源文件<
>
S3C2440時鐘計算
關於mpll的計算方法 1.u32 mpll val 0 mpll val 92 12 1 4 2 算得mpll val 的二進位制 0101 1100 0000 0001 0010 注意 92 12 中的92 為十進位制數,轉換為二進位制為 0x5c。2.changempllvalue mpll ...
S3C2440 時鐘計算
s3c2440有兩個pll phase locked loop 乙個是mpll,乙個是upll。mpll用於cpu及其他外圍器件,upll用於usb。s3c2440a 中的時鐘控制邏輯可以產生必須的時鐘訊號,包括cpu 的fclk,ahb 匯流排外設的hclk 以及 apb 匯流排外設的pclk。s...
S3C2440時鐘描述
1 上電幾毫秒後,晶振輸出穩定,fclk 晶振頻率,nreset訊號恢復高電平後,cpu開始執行指令。2 我們可以在程式開頭啟動mpll,在設定mpll的幾個暫存器後,需要等待一段時間 lock time mpll的輸出才穩定。在這段時間 lock time 內,fclk停振,cpu停止工作。loc...