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