2012年(42)
分类: LINUX
2012-04-26 09:39:57
目的:熟悉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