/******************************************************
*說 明: S3C2440FCLK、HCLK、PCLK的配置
******************************************************/
三星官方搭載的wince系統(tǒng)的FLCK值為400MHz,HCLK值為100MHz、PCLK值為50MHz。那么這些值通過什么方法計算出來呢?大概過程如下,這些值在外部晶振12MHz的基礎上通過PLL的作用倍頻到我們需要的核心頻率如400MHz,由于該頻率過高,需要通過對預分頻器進行適當?shù)脑O置獲取外圍設備能夠正常工作的頻率如HCLK 100MHz、PLCK 50MHz。
在這里有必要說明FCLK、HCLK、PCLK的含義,F(xiàn)CLK為內(nèi)核時鐘,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
從“l(fā)dr r1, = ((92 << 12) + (1 << 4) + 1) ”該代碼中可以看到數(shù)值存在移位操作,即92<<12、1<<4,這個可以參考圖2各預分頻值的配置。
圖2 MDIV、PDIV、SDIV
MDIV的配置在MPLLCON的[19:12]位,因此配置MDIV的值需要左移12位。同樣的道理,配置PDIV值需要左移4位,SDIV值需要左移0位(左移0位相當于不用偏移,廢話,嘻嘻)。
那么根據(jù)圖1計算FLCK的公式,計算過程如下:
FCLK=2*(92+8)*(12000000)/(3+2^1)=400000000=400MHz
當FCLK得到正確的配置后,這時就需要對HCLK、FCLK進行配置了,即進行預分頻操作,該配置過程很見到,只需要對CLKDIVN簡單配置一下就OK了。
CLKDIVN寄存器內(nèi)容如圖3。
;設置CLKDIVN
ldr r0,=CLKDIVN
ldr r1,=0x5
str r1,[r0]
在bsp中CLKDIVN的配置值為0x5,即FCLK:HCLK:PCLK=1:4:8。相對應的頻率將會是400MHz、100MHz、50MHz。