S3C2440時鐘詳細描述


  S3C2440 CPU默認的工作主頻爲12MHz或16.9344MHz,這裏使用最多的是12M。使用PLL電路可以產生更高的主頻供CPU及外圍器件使用。

    S3C2440有兩個PLL:MPLL和UPLL,UPLL專用與USB設備。MPLL用於CPU及其他外圍器件。

    通過MPLL會產生三個部分的時鐘頻率:FCLK、HCLK、PLCK。FCLK用於CPU核,HCLK用於AHB總線的設備(比如SDRAM),PCLK用於APB總線的設備(比如UART)。從時鐘結構圖中可以查看到使用不同時鐘頻率的硬件。

S3C2440時鐘詳細描述

(注:這裏要注意從圖中看出,Uart使用的是PCLK,後面Uart實驗會用到)

 

 

下面介紹MPLL的啓動流程:

下圖展示了上電後MPLL啓動的過程:S3C2440時鐘詳細描述

 

請跟隨FCLK的圖像瞭解啓動過程:

1、上電幾毫秒後,晶振輸出穩定,FCLK=晶振頻率,nRESET信號恢復高電平後,CPU開始執行指令。

2、我們可以在程序開頭啓動MPLL,在設置MPLL的幾個寄存器後,需要等待一段時間(Lock Time),MPLL的輸出才穩定。在這段時間(Lock Time)內,FCLK停振,CPU停止工作。Lock Time的長短由寄存器LOCKTIME設定。

3、Lock Time之後,MPLL輸出正常,CPU工作在新的FCLK下。

 

設置S3c2440的時鐘頻率就是設置MPLL的幾個寄存器:

1、LOCKTIME:設爲0x00ffffff

前面說過,MPLL啓動後需要等待一段時間(Lock Time),使得其輸出穩定。位[23:12]用於UPLL,位[11:0]用於MPLL。使用確省值0x00ffffff即可。

2、CLKDIVN:用來設置FCLK:HCLK:PCLK的比例關係,默認爲1:1:1

這裏值設爲0x03,即FCLK:HCLK:PCLK=1:2:4

CLKDIVN不同的設置及對應的時鐘比例關係如下圖:

S3C2440時鐘詳細描述

 

3、MPLLCON:設爲(0x5c << 12)|(0x04 << 4)|(0x00),即0x5c0040

對於MPLLCON寄存器,[19:12]爲MDIV,[9:4]爲PDIV,[1:0]爲SDIV。有如下計算公式:

MPLL(FCLK) = (m * Fin)/(p * 2^s)

其中: m = MDIV + 8, p = PDIV + 2

Fin 即默認輸入的時鐘頻率12MHz。MPLLCON設爲0x5c0040,可以計算出FCLK=200MHz,再由CLKDIVN的設置可知:HCLK=100MHz,PCLK=50MHz。

 

到這裏我們應該徹底弄清楚了程序中經常出現的幾個CLK:

Fin,MPLL,UPLL,FCLK,HCLK,PCLK.

Fin指CPU外圍接的晶振本身的頻率,通常爲12MHz。

MPLL和UPLL分別指的是用於供整機系統的PLL和專用於USB的UPLL。

FCLK = MPLL = (m * Fin)/(p + 2^s);

HCLK,PCLK受CLKDIVN寄存器的影響,即當FCLK確定後,CLKDIVN決定了HCLK和PCLK,具體如上表。

這裏UART使用PCLK,要想串口打印信息正常顯示,這裏是關鍵!

 

 通常我們將如上時鐘初始化的過程寫成clock_init函數供其他函數調用,代碼如下:

void clock_init(void)

{

        

rLOCKTIME = 0xFFFFFF;

 

   

rCLKDIVN  = 0x3;

 

   

    rMPLLCON = 0x5c0040;   

}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章