CPU 的初始化(ARM & u-boot)
1. 設(shè)定 CPU 內(nèi)部寄存器, 包括狀態(tài)寄存器和SP等.
start_code:
/*
*setthecputoSVC32mode
*/
mrsr0,cpsr
bicr0,r0,#0x1f
orrr0,r0,#0xd3
msrcpsr,r0
2. 關(guān)閉看門狗.
ldrr0,=pWTCON
movr1,#0x0
strr1,[r0]
3. 設(shè)定中斷向量表.
/*
*maskallIRQsbysettingallbitsintheINTMR-default
*/
movr1,#0xffffffff
ldrr0,=INTMSK
strr1,[r0]
#ifdefined(CONFIG_S3C2410)
ldrr1,=0x3ff
ldrr0,=INTSUBMSK
strr1,[r0]
#endif
4. 設(shè)定 CPU 內(nèi)部各單元(包括 CPU 核與內(nèi)置的其他設(shè)備如定時器, 電源管理, SDRAM控制器, LCD控制器, 時鐘等)的 Clock 時鐘.
/*FCLK:HCLK:PCLK=1:2:4*/
/*defaultFCLKis120MHz!*/
ldrr0,=CLKDIVN
movr1,#3
strr1,[r0]
Bus設(shè)置------設(shè)置各個外部內(nèi)存的特性, 包括要插入幾個 waiting cycle, 操作該內(nèi)存的基本單位寬度(8/16/32bit)等.
//見MMU設(shè)置.
5. 設(shè)置 CPU 各個 PIN 引腳的用途使其符合系統(tǒng)或應(yīng)用程序的要求. 一般都是設(shè)置選擇輸入輸出或者其他第二功能的寄存器.
6. 設(shè)置 CPU 的工作模式, 剛開始一般都為 Full run mode.
//如上面
7. 設(shè)置 MMU等存儲相關(guān)的設(shè)備.
/*
*************************************************************************
*
*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. 其他內(nèi)部設(shè)備的初始化.
=============================================================================================================================