S3C2410下INTPND 寄存器与SRCPND的比较

 通过多方查阅资料加Google,我发现,为了让朋友们更好更容易的去理解ARM体系结构中的中断体系,下面的东西还是值得分享的。   

      在查看芯片手册时,大家会发现,INTPND 寄存器与 SRCPND 寄存器 长得几乎一模一样,但他们在中断异常处理中却扮演着不同的角色,如果说SRCPND 是中断信号进入中断处理模块后所经过的第一个场所的话,那么INTPND则是中断信号在中断处理模块里经历的最后一个寄存器。它的每个位对应一个中断请求,若该位被置1 , 则表示相应的中断请求被触发,描述到这里你可能会发现它不仅和SRCPND 长得一模一样,就连功能 都一样,其实不然,他们在功能上有着重大的区别。SRCPND 是中断源引脚寄存器,某个位被置1 表示相应的中断被触发,但我们知道在同一时刻内系统可以触发若干个中断,只要中断被触发了,SRCPND 的相应位便被置1 ,也就是说SRCPND 在同一时刻可以有若干位同时被置1 ,然而INTPND 则不同,他在某一时刻只能有1 个位被置1 ,INTPND 某个位被置1 (该位对应的中断在所有已触发的中断里具有最高优先级且该中断没有被屏蔽),则表示CPU 即将或已经在对该位相应的中断进行处理。于是我们可以有一个总结:SRCPND 说 明了有什么中断被触发了,INTPND 说明了CPU 即 将或已经在对某一个中断进行处理。
       特别注意:每当某一个中断被处理完之后,我们必须手动地 把SRCPND/SUBSRCPND , INTPND 三个寄存器中与该中断相应的位由1 设置为0 ,刚才我说INTPND 的操作很特别,它的特别之处就在于对当我们要把该寄存器中某个值为1 的位设置为0 时,我们不是往该位置0 ,而是往该位置1 。(
 应该是硬件的特性吧,为什么会这样,不去深究了 )假设SRCPND=0x00000003 ,INTPND=0x00000001, 该 值说明当前0 号中断和1 号中断被触发,但当 前正在被处理的是0 号中断,处理完毕后我们应该这样设置INTPND 和SRCPND :
SRCPND=0x00000002             //
 位0 被置为0
INTPND =0x00000001             //
 位0 被置为0 (方法是往该位写入1 )

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值