2440的時鐘模塊如下圖(2440芯片手冊237頁) ,下載鏈接見上一篇博客。
S3C2440可以使用外部晶振(XTIpll)(默認爲12MHZ)
和外部時鐘(EXTCLK)兩種方式輸入時鐘信號。它由跳
線OM[3:2]決定。 S3C2440 默認的工作主頻爲12MHz
(晶振頻率),S3C2440有兩個PLL:MPLL和UPLL。通
過MPLL會產生三個部分的時鐘頻率:FCLK、HCLK、
PLCK。UPLL則負責產生USB所需時鐘UCLK。如下圖
開發板上電後,時鐘初始化流程如下圖,剛通電時,FCLK爲晶振頻率12MHz,經過軟件配置及Lock Time之後,FCLK變爲高頻(本例中爲405MHz)。
從2440芯片手冊243頁可以看到下圖所示的信息
於是,可以總結出時鐘初始化的流程:
配置Lock Time —》 設置分頻係數 —》設置CPU總線模式爲異步模式 —》 設置FCLK
首先,
設置Lock Time的寄存器如下圖,(2440芯片手冊254頁)。但由於Lock Time一般取默認值,所以可以省去“配置Lock Time”這一步驟。
之後,
2440設置FCLK、PCLK、HCLK的比例關係如下圖所示,本例選1:4:8的比例。(2440芯片手冊242頁)。
設置分頻係數所使用的寄存器如下圖所示,(2440芯片手冊258頁)
接下來,
根據243頁的NOTES,將CPU總線模式設置爲異步模式。
最後,
設置FCLK的寄存器如下圖(2440芯片手冊第255頁)
得到以上信息後,時鐘初始化的代碼如下
#define CLKDIVN 0x4c000014
#define MPLLCON 0x4c000004
#define MPLL_405MHZ ((127<<12)|(2<<4)|(1<<0))
init_clock:
ldr r0, =CLKDIVN
mov r1, #0x5
str r1, [r0]
mrc p15,0,r0,c1,c0,0
orr r0,r0,#0xc0000000
mcr p15,0,r0,c1,c0,0
ldr r0, =MPLLCON
ldr r1, =MPLL_405MHZ
str r1, [r0]
mov pc, lr