FCLK/HCLK/PCLK的配置

三星官方搭載的wince系統的FLCK值爲400MHz,HCLK值爲100MHz、PCLK值爲50MHz。那麼這些值通過什麼方法計算出來呢?大概過程如下,這些值在外部晶振12MHz的基礎上通過PLL的作用倍頻到我們需要的核心頻率如400MHz,由於該頻率過高,需要通過對預分頻器進行適當的設置獲取外圍設備能夠正常工作的頻率如HCLK 100MHz、PLCK 50MHz。

在這裏有必要說明FCLK、HCLK、PCLK的含義,FCLK爲內核時鐘,HCLK爲總線時鐘(包括USB時鐘),PCLK爲I/O接口時鐘(如常用的SPI、I2C、UART的時鐘配置都是通過PCLK時鐘爲基準的)。

在WINCE6.0 BSP中,設置MPLLCON與設置CLKDINV的代碼如下:



;設置MPLLCON

ldr r0, = MPLLCON

ldr r1, = ((92 << 12) + (1 << 4) + 1)

str r1, [r0]



MPLLCON的配置是用來確定FCLK頻率的,計算公式如下:


圖1 計算FLCK

從“ldr r1, = ((92 << 12) + (1 << 4) + 1) ”該代碼中可以看到數值存在移位操作,即92<<12、1<<4,這個可以參考圖2各預分頻值的配置。


圖2 MDIV、PDIV、SDIV

MDIV的配置在MPLLCON的[19:12]位,因此配置MDIV的值需要左移12位。同樣的道理,配置PDIV值需要左移4位,SDIV值需要左移0位(左移0位相當於不用偏移,廢話,嘻嘻)。



那麼根據圖1計算FLCK的公式,計算過程如下:



FCLK=2*(92+8)*(12000000)/(3+2^1)=400000000=400MHz



當FCLK得到正確的配置後,這時就需要對HCLK、FCLK進行配置了,即進行預分頻操作,該配置過程很見到,只需要對CLKDIVN簡單配置一下就OK了。



CLKDIVN寄存器內容如圖3。


;設置CLKDIVN

ldr r0,=CLKDIVN

ldr r1,=0x5

str r1,[r0]



在bsp中CLKDIVN的配置值爲0x5,即FCLK:HCLK:PCLK=1:4:8。相對應的頻率將會是400MHz、100MHz、50MHz。

原文地址:http://www.cnblogs.com/wenziqi/archive/2010/09/13/1824865.html

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