Chinaunix
标题:
我对这个版比较依赖,因为高手多。发在其它版的帖子没人回复。
[打印本页]
作者:
冬天的落阳
时间:
2012-05-25 16:20
标题:
我对这个版比较依赖,因为高手多。发在其它版的帖子没人回复。
http://bbs.chinaunix.net/forum.p ... ;extra=#pid22126501
u-boot-2012.04版本,arch/arm/cpu/arm920t/start.S中有这么一句:
# if defined(CONFIG_S3C2410)
ldr r1, =0x3ff
ldr r0, =INTSUBMSK
str r1, [r0]
# endif
大意是通过设置INTSUBMSK屏蔽中断。代码将INTSUBMSK赋值为3FF,而我的理解应该赋值为7FF。
理由:
2410芯片的pdf(英文)中14-18页有个表,上面说INTSUBMSK的[0:10]为各种中断。那么,为了屏蔽所有中断,bit[0:10]都应该set 1,也就是0x7FF。而uboot的代码中,赋值为3FF,也就是说,bit10(对应的为INT_ADC)没有赋值。
很奇怪,没听说启动时用到ADC中断呀。
作者:
冬天的落阳
时间:
2012-05-27 09:38
自己顶。。。。。
作者:
amarant
时间:
2012-05-27 09:53
上下文没说清楚呀。这里是為什麼屏蔽中断?是刚上电吗?那么可能有两种可能:
1,代码写错了,但是因为刚上电没用到ADC的功能,所以一直也不会出现问题。
2,代码就是这么写的,出于某些原因
作者:
冬天的落阳
时间:
2012-05-27 13:51
感谢回复。
是u-boot刚上电的时候的底层初始化代码。我个人觉得原代码是写错了,确切的说,是bug。
当然正如你说的,一直也没出什么问题,所以大家都忽略了。
贴一下start.s的部分代码:
/*
* the actual reset code
*/
reset:
/*
* set the cpu to SVC32 mode
*/
mrs r0,cpsr
bic r0,r0,#0x1f
orr r0,r0,#0xd3
msr cpsr,r0
/* turn off the watchdog */
#if defined(CONFIG_S3C2400)
# define pWTCON 0x15300000
# define INTMSK 0x14400008 /* Interupt-Controller base addresses */
# define CLKDIVN 0x14800014 /* clock divisor register */
#elif defined(CONFIG_S3C2410)
# define pWTCON 0x53000000
# define INTMSK 0x4A000008 /* Interupt-Controller base addresses */
# define INTSUBMSK 0x4A00001C
# define CLKDIVN 0x4C000014 /* clock divisor register */
#endif
#if defined(CONFIG_S3C2400) || defined(CONFIG_S3C2410)
ldr r0, =pWTCON
mov r1, #0x0
str r1, [r0]
/*
* mask all IRQs by setting all bits in the INTMR - default
*/
mov r1, #0xffffffff
ldr r0, =INTMSK
str r1, [r0]
# if defined(CONFIG_S3C2410)
ldr r1, =0x3ff
ldr r0, =INTSUBMSK
str r1, [r0]
# endif
复制代码
欢迎光临 Chinaunix (http://bbs.chinaunix.net/)
Powered by Discuz! X3.2