肯定有的朋友和我一样,对2440里面的中断寄存器迷惑,屡不清脉络。结合网上资料和自己的琢磨,我大概搞清楚了。先上图,以飨读者。
1. 中断分为两大类
(1)外部中断
24个外部中断占用GPF0-GPF7(EINT0-EINT7),GPG0-GPG15(EINT8-EINT23)。这些中断对应的是片子上的引脚,用的时候,需要把引脚配置为中断模式,并且不要上拉。他们的触发方式由寄存器EXTINT0-EXTINT2设置(比如上升沿,下降沿等)。
EINTPEND:这个是中断挂起寄存器,清除时要写1。当一个外部中断(EINT4-EINT23)发生后,那么相应的位会被置1。
EINTMASK:这个是屏蔽中断用的,尽管 EINTPEND你置位了,但是这个寄存器可以把你屏蔽掉。如果你没有被屏蔽,那么恭喜你闯入下一关—— SRCPND。
对于EINT4-EINT23,他们比较幸运,根本不受EINTPEND和EINTMASK的控制,直接进入SRCPND关卡与其他中断源“PK”。
(2)内部中断
带子中断的内部中断有15个(见图表1),他们受控于寄存器SUBSRCPND和 INTSUBMSK,这两个寄存器的功能和上面的EINTPEND和EINTMASK类似,如果能闯过这两关,自然进入下一关—— SRCPND。
对于不带子中断的内部中断(一共20个),也算是种子选手了,不受上面2个寄存器的控制,直接进入SRCPND关卡与其他中断源“PK”。
2. SRCPND平台来PK,快中断耍大牌
好了,现在闯入SRCPND关卡的选手开始PK了。规则是什么呢?
SRCPND:来自四个参赛组的中断源,如果占据天时地利的话,会在这个寄存器占有一席之地。接下来,考察一下他们的中断模式。
INTMOD:一个中断可以是普通中断,也可以是快中断。需要在这里设置,但最多只能有一个快中断。
如果有幸被设置成唯一的快中断,那么你就坐上了中断服务的快车,享受最高优先级,系统优先响应你的需求,进入FIQ服务函数哦!如果没有,也不要灰心,还有机会。
3. 普通中断竞争激烈
INTMSK :中断屏蔽寄存器。在SRCPND中出现的普通中断,又要在这个平台筛选一下,如果没有被屏蔽,恭喜进入下一关哦。
PRIORITY:优先级寄存器。来到这一关的中断源会决一死战,只能有一个胜出。
4. 最后的胜利
上一轮胜出的选手也就是最后的赢家了,得到的奖赏就是 INTPND 寄存器的对应位置1,同时 INTOFFSET 寄存器保存对应的值(0-31)。当然,最大的实惠就是进入IRQ服务函数。