CPU 的初始化(ARM & u-boot)
扫描二维码
随时随地手机看文章
1. 设定 CPU 内部寄存器, 包括状态寄存器和SP等.
start_code:
/*
*setthecputoSVC32mode
*/
mrsr0,cpsr
bicr0,r0,#0x1f
orrr0,r0,#0xd3
msrcpsr,r0
2. 关闭看门狗.
ldrr0,=pWTCON
movr1,#0x0
strr1,[r0]
3. 设定中断向量表.
/*
*maskallIRQsbysettingallbitsintheINTMR-default
*/
movr1,#0xffffffff
ldrr0,=INTMSK
strr1,[r0]
#ifdefined(CONFIG_S3C2410)
ldrr1,=0x3ff
ldrr0,=INTSUBMSK
strr1,[r0]
#endif
4. 设定 CPU 内部各单元(包括 CPU 核与内置的其他设备如定时器, 电源管理, SDRAM控制器, LCD控制器, 时钟等)的 Clock 时钟.
/*FCLK:HCLK:PCLK=1:2:4*/
/*defaultFCLKis120MHz!*/
ldrr0,=CLKDIVN
movr1,#3
strr1,[r0]
Bus设置------设置各个外部内存的特性, 包括要插入几个 waiting cycle, 操作该内存的基本单位宽度(8/16/32bit)等.
//见MMU设置.
5. 设置 CPU 各个 PIN 引脚的用途使其符合系统或应用程序的要求. 一般都是设置选择输入输出或者其他第二功能的寄存器.
6. 设置 CPU 的工作模式, 刚开始一般都为 Full run mode.
//如上面
7. 设置 MMU等存储相关的设备.
/*
*************************************************************************
*
*CPU_init_criticalregisters
*
*setupimportantregisters
*setupmemorytiming
*
*************************************************************************
*/
#ifndefCONFIG_SKIP_LOWLEVEL_INIT
cpu_init_crit:
/*
*flushv4I/Dcaches
*/
movr0,#0
mcrp15,0,r0,c7,c7,0/*flushv3/v4cache*/
mcrp15,0,r0,c8,c7,0/*flushv4TLB*/
/*
*disableMMUstuffandcaches
*/
mrcp15,0,r0,c1,c0,0
bicr0,r0,#0x00002300@clearbits13,9:8(--V---RS)
bicr0,r0,#0x00000087@clearbits7,2:0(B----CAM)
orrr0,r0,#0x00000002@setbit2(A)Align
orrr0,r0,#0x00001000@setbit12(I)I-Cache
mcrp15,0,r0,c1,c0,0
/*
*beforerelocating,wehavetosetupRAMtiming
*becausememorytimingisboard-dependend,youwill
*findalowlevel_init.Sinyourboarddirectory.
*/
movip,lr
bllowlevel_init
movlr,ip
movpc,lr
#endif/*CONFIG_SKIP_LOWLEVEL_INIT*/
8. 其他内部设备的初始化.
=============================================================================================================================