共有几个寄存器
SRCPND: 共有32位每一位对应一个中断源,置1表示有中断请求,在中断服务程序里要对相应的位置0,具体32位中的每一位
代表什么中断可以查看手册
INTMOD: 共有32位,用来决定32个中断源的模式(FIQ或IRQ),另外注意在FIQ模式下只能有一个中断被服务,因此INTMOD的
32位中只能有一个为1
INTMASK:共32位,用来决定32个中断源中的某此是否被CPU服务,如果设置为1对屏蔽中断,设置为0则此中断被服务。
PRIORITY: 优先级判定,主中断源共有32个分为6组,如图
他们的优先级被PRIORITY的ARB_MODE和ARB_SEL控制,
如果ARB_MODE为1,则ARB_SEL会自动的改变,规则如下:
If REQ0 or REQ5 is serviced, ARB_SEL bits are not changed at all.
If REQ1 is serviced, ARB_SEL bits are changed to 01b.
If REQ2 is serviced, ARB_SEL bits are changed to 10b.
If REQ3 is serviced, ARB_SEL bits are changed to 11b.
If REQ4 is serviced, ARB_SEL bits are changed to 00b.
注意REQ0始终为最高优先级,REQ5始终为最低优先级。
但如果ARB_MODE设置为0,则ARB_SEL不会自动改变,但可以手动设置。
INTPND:决定32个中断的哪一个中断被CPU服务,此寄存器在“判优”逻辑的后面,它的32中只能有一位被置1,中断服务程序
应该查询此位并将其清零。
INTOFFSET:指示INTPND中的哪一个中断源在被服务,感觉此寄存器没有什么用?
=============================================================================================================
下面为子中断部分:
SUBSRCPND:
SUBINTMASK:
子中断部分的处理逻辑还不太清晰,感觉不能准确定位到底是哪一个子中断发生了!