标题:
U-Boot启动过程完全分析(2)
[打印本页]
作者:
yuyang911220
时间:
2015-9-22 16:12
标题:
U-Boot启动过程完全分析(2)
(
2
)
CPU
进入
SVC
模式
start_code:
/*
* set the cpu to SVC32 mode
*/
mrs
r0, cpsr
bic
r0, r0, #0x1f
/*
工作模式位清零
*/
orr
r0, r0, #0xd3
/*
工作模式位设置为
“10011”
(管理模式),并将中断禁止位和快中断禁止位置
1 */
msr
cpsr, r0
以上代码将
CPU
的工作模式位设置为管理模式,并将中断禁止位和快中断禁止位置一,从而屏蔽了
IRQ
和
FIQ
中断。
(
3
)设置控制寄存器地址
# if defined(CONFIG_S3C2400)
#
define pWTCON
0x15300000
#
define INTMSK
0x14400008
#
define CLKDIVN
0x14800014
#else
/*s3c2410
与
s3c2440
下面
4
个寄存器地址相同
*/
#
define pWTCON
0x53000000
/* WATCHDOG
控制寄存器地址
*/
#
define INTMSK
0x4A000008
/* INTMSK
寄存器地址
*/
#
define INTSUBMSK
0x4A00001C
/* INTSUBMSK
寄存器地址
*/
#
define CLKDIVN
0x4C000014
/* CLKDIVN
寄存器地址
*/
# endif
对与
s3c2440
开发板,以上代码完成了
WATCHDOG
,
INTMSK
,
INTSUBMSK
,
CLKDIVN
四个寄存器的地址的设置。各个寄存器地址参见参考文献
[4]
。
(
4
)关闭看门狗
ldr
r0, =pWTCON
mov
r1, #0x0
str
r1, [r0]
/*
看门狗控制器的最低位为
0
时,看门狗不输出复位信号
*/
以上代码向看门狗控制寄存器写入
0
,关闭看门狗。否则在
U-Boot
启动过程中,
CPU
将不断重启。
(
5
)屏蔽中断
/*
* mask all IRQs by setting all bits in theINTMR - default
*/
mov
r1, #0xffffffff
/*
某位被置
1
则对应的中断被屏蔽
*/
ldr
r0, =INTMSK
str
r1, [r0]
INTMSK
是
主中断屏蔽寄存器,每一位对应
SRCPND
(
中断源引脚寄存器)中的一位,表明
SRCPND
相应位代表的中断请求是否被
CPU
所处理
。
根据参考文献
4
,
INTMSK
寄存器是一个
32
位的寄存器,每位对应一个中断,向其中写入
0xffffffff
就将
INTMSK
寄存器全部位置一,从而屏蔽对应的中断。
# if defined(CONFIG_S3C2440)
ldr
r1, =0x7fff
ldr
r0, =INTSUBMSK
str
r1, [r0]
# endif
INTSUBMSK
每一位对应
SUB
SRCPND
中的一位,表明
SUB
SRCPND
相应位代表的中断请求是否被
CPU
所处理
。
根据参考文献
4
,
INTSUBMSK
寄存器是一个
32
位的寄存器,但是只使用了低
15
位。向其中写入
0x7fff
就是将
INTSUBMSK
寄存器全部有效位(低
15
位)置一,从而屏蔽对应的中断。
欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/)
Powered by Discuz! 7.0.0