在這裏有必要說明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