日期:2008.9.25
目的:熟悉cpu初始化過程細節
題目:關閉看門狗、設置主機頻率、關閉中斷。
明細:
@ turn off the watchdog
#if defined(CONFIG_S3C2400)
# define pWTCON 0x15300000
# define INTMSK 0x14400008
# define CLKDIVN 0x14800014
#elif defined(CONFIG_S3C2410)
# define pWTCON 0x53000000
# define INTMSK 0x4A000008
# define INTSUBMSK 0x4A00001C
# define CLKDIVN 0x4C000014
#endif
@ 宏定義以S3C2410的SOC爲例:
@ pWTCON定義爲:看門狗計數器控制寄存器.
@ INTMSK定義爲:中斷控制寄存器.
@ INTSUBMSK定義爲:子中斷控制寄存器.
@ CLKDIVN定義爲:時鐘分頻控制寄存器.
#if defined(CONFIG_S3C2400) || defined(CONFIG_S3C2410)
ldr r0, =pWTCON @ 僞指令,(注:=號後邊跟的是立即數),把看門狗計數器控制寄存器地址存於r0
mov r1, #0x0 @ r1 寫0,mov指令與ldr指令實現的功能相當,它們之間的區別是於尋址方式梢有差異
str r1, [r0] @ 非使能看門狗計數器,pWTCON中的最後一比特寫0表示不會輸出復位信號
@ mask all IRQs by setting all bits in the INTMR - default
mov r1, #0xffffffff @ r1寫全1
ldr r0, =INTMSK @ 中斷控制器的基址存於r1
str r1, [r0] @ 注:因爲INTMSK是立即數,故不能寫成"str r1, INTMSK",關閉所有中斷源.(1表示非使能)
# if defined(CONFIG_S3C2410)
ldr r1, =0x3ff
ldr r0, =INTSUBMSK
str r1, [r0]
@ 分析同上.另外,子中斷有11箇中斷源,INTSUBMSK寫成0x3ff(0011 1111 1111).bit10對應的中斷源爲INT_ADC,此處寫爲0爲使能狀態,個人認爲應該最好寫爲0x7ff.*/
# endif
@ FCLK:HCLK:PCLK = 1:2:4
@ default FCLK is 120 MHz !
ldr r0, =CLKDIVN
mov r1, #3
str r1, [r0]
@ 分析同上.時鐘分頻控制寄存器bit1(HDIVN)寫1表示HCLK=FCLK/2;寫0表示HCLK=FCLK.bit0(PDIVN)寫1表示PCLK=HCLK/2;寫0表示PCLK=HCLK.
#endif @ CONFIG_S3C2400 || CONFIG_S3C2410