02.07.2013 Views

kernel 里面的中断代码分析

kernel 里面的中断代码分析

kernel 里面的中断代码分析

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

打个比方: 一个傻子让妈妈喂饭: “妈妈, 我饿了”(SRCPND 对应bit 置1 ) , 但是啥子不知道吃多少<br />

才能饱(脑子坏掉了,要不怎么傻呢?) 。 妈妈知道喂两碗就行了 。 所以当妈妈喂了两碗之后, 不再喂了(相当于中断处<br />

理完毕) 。<br />

然后告诉傻子, 行了 ,饱了(相当于SRCPND 清0) ,傻子相信妈妈的话, only相信妈妈的话 。<br />

否则 ,如果妈妈不说“行了, 吃饱了,不要再吃了”这样的话, 傻子就一个劲的问问“ 妈妈, 我饿,俄” ,结果妈妈(也<br />

是个傻妈妈,难怪啥子是遗传的) ,一个劲的喂 , 结果什么活也干不了了,同时也把傻儿子撑死了。<br />

我怎么会突然想到这么一个比喻, 我真是个天才啊! --bob<br />

?对于CPU都是这样的吗? 就是 interrupt service<br />

routine 里面必须清除中断的标志bit吗?<br />

我的理解,都应该这样的。<br />

这里面说得也很清楚了, 就是 INTPND 中的每一个bit 表示是否有对应的中断请求,这个请求没有被屏蔽掉 ,正等着CPU来<br />

处理这个中断(即to be serviced) 。 一旦这个某个bit被置1了, 就表示这个中断的优先级是最高(因为是经过仲裁的) 。<br />

这样的话, 用户就可以读INTPND寄存器, 哪个bit置1了(32个bit只能有一个bit是1) , 就表示哪个中断源产生了中断。<br />

其实关于INTPND , 中断控制器的介绍的开头说的比较清楚了:<br />

也就是说, 经过仲裁后,最后的结果(也就是中断号) 被写入pending 寄存器,表明在许多个中断源中,到底谁产生了中断。<br />

---总结: 一句话 INTERRUPT PENDING REGISTER 就表示最终谁触发了中断。

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!