关于U-boot的IRQ处理的一些疑问:

[复制链接]
 楼主| 电子小骑兵 发表于 2009-2-4 13:53 | 显示全部楼层 |阅读模式
U-boot中IRQ的处理程序如下:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ldr&nbsp;sp&nbsp;,&nbsp;IRQ_STACK_START<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sub&nbsp;&nbsp;&nbsp;&nbsp;sp,&nbsp;sp,&nbsp;#S_FRAME_SIZE&nbsp;<br />3&nbsp;&nbsp;&nbsp;&nbsp;stmia&nbsp;&nbsp;&nbsp;&nbsp;sp,&nbsp;{r0&nbsp;-&nbsp;r12}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;@&nbsp;Calling&nbsp;r0-r12<br />4&nbsp;&nbsp;&nbsp;&nbsp;add&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r8,&nbsp;sp,&nbsp;#S_PC<br />5&nbsp;&nbsp;&nbsp;&nbsp;stmdb&nbsp;&nbsp;&nbsp;r8,&nbsp;{sp,&nbsp;lr}^&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;@&nbsp;Calling&nbsp;SP,&nbsp;LR<br />6&nbsp;&nbsp;&nbsp;&nbsp;str&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lr,&nbsp;[r8,&nbsp;#0]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;@&nbsp;Save&nbsp;calling&nbsp;PC<br />7&nbsp;&nbsp;&nbsp;&nbsp;mrs&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r6,&nbsp;spsr<br />8&nbsp;&nbsp;&nbsp;&nbsp;str&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r6,&nbsp;[r8,&nbsp;#4]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;@&nbsp;Save&nbsp;CPSR<br />9&nbsp;&nbsp;&nbsp;&nbsp;str&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r0,&nbsp;[r8,&nbsp;#8]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;@&nbsp;Save&nbsp;OLD_R0<br />10&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;&nbsp;&nbsp;&nbsp;r0,&nbsp;sp<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />11&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bl&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;do_irq<br /><br />12&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ldmia&nbsp;&nbsp;&nbsp;&nbsp;sp,&nbsp;{r0&nbsp;-&nbsp;lr}^&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;@&nbsp;Calling&nbsp;r0&nbsp;-&nbsp;lr<br />13&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;&nbsp;&nbsp;&nbsp;r0,&nbsp;r0<br />14&nbsp;&nbsp;&nbsp;&nbsp;ldr&nbsp;&nbsp;&nbsp;&nbsp;lr,&nbsp;[sp,&nbsp;#S_PC]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;@&nbsp;Get&nbsp;PC<br />15&nbsp;&nbsp;&nbsp;&nbsp;add&nbsp;&nbsp;&nbsp;&nbsp;sp,&nbsp;sp,&nbsp;#S_FRAME_SZ<br />16&nbsp;&nbsp;&nbsp;&nbsp;subs&nbsp;&nbsp;&nbsp;&nbsp;pc,&nbsp;lr,&nbsp;#4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><br />其中:&nbsp;S_FRAME_SIZE=72,&nbsp;S_PC=60.<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;do_irq为一C函数,函数原型为:void&nbsp;do_irq(struct&nbsp;pt_reg&nbsp;*pt_regs)<br /><br />仔细看了看,有几个问题百思不得其解,向大家讨教:<br /><br />1.&nbsp;第10句,为什么要保存IRQ模式下的SP?而保存之后似乎又没有使用这个保存量。至于后面第13句的mov&nbsp;ro&nbsp;ro就更不能理解了,不知何意?<br /><br />2.&nbsp;为什么要用第5句保存用户模式下的SP和LR?是为了利于在中断中返回用户模式进行中断嵌套么?<br /><br />3.&nbsp;第7和8句保存了SPSR入栈,但是后面的程序并没有使用到这个栈内的SPSR,依然是直接利用SUBS从SPSR来返回用户模式,不知怎么理解?&nbsp;<br /><br />谢谢~
 楼主| 电子小骑兵 发表于 2009-2-6 10:41 | 显示全部楼层

...

谢谢版主的加精~~<br />另外,还有个问题想一起问下:<br />在start.s中,上述IRQ_STACK_START地址处放的数值是0x0badc0de,在2410的内存分布中这是一个ROM的绝对地址,而且远大于4K,如果将程序搬运到RAM以后,发生IRQ中断,此处的IRQ中断堆栈应该是用不了的,不能写。或许这个ARM920T的start.s并不是专门针对2410的,但是如果2410用这个START.S,发生了IRQ中断,那么处理器应该是不能处理的,不知道是不是这样?如果是这样,那发生了IRQ中断怎么办呢?
kieght 发表于 2009-2-7 12:21 | 显示全部楼层

持续关注中。

avocationA 发表于 2009-2-7 17:00 | 显示全部楼层

关注中!!

  
kieght 发表于 2009-2-8 11:05 | 显示全部楼层

有懂这个的老大讲一下吗?

mxh0506 发表于 2009-2-9 10:28 | 显示全部楼层

LZ:看代码思维要灵活一点

0x0badc0de&nbsp;=&nbsp;&nbsp;bad&nbsp;code,&nbsp;明白了吗?
 楼主| 电子小骑兵 发表于 2009-2-9 14:30 | 显示全部楼层

楼上的兄台能否说的更清楚些?

楼上的兄台能否说的更清楚些?不知道看的是不是同一个版本,我看的是u-boot-1.1.6,不过好象里面没有发现0x0badc0de&nbsp;=&nbsp;&nbsp;bad&nbsp;code···<br />另外,=bad&nbsp;code代表什么?还是不解···&nbsp;请教了~
您需要登录后才可以回帖 登录 | 注册

本版积分规则

8

主题

32

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部