ARM中断源和中断过程分析

来源:互联网 发布:动态加载js 完成 编辑:程序博客网 时间:2024/04/29 16:56

        中断源分析

        中断分为两大类,由中断源来区分:

        内部中断,其中断源由内部外设提供。如:DMA/UART等

        外部中断,其中断源由外部请求中断。如:EINTn

        先来分析下59个中断源:35个内部中断源和24个外部请求中断源。(官方说是60个中断源)

        

        

        

        

     上面是自己用表格画了个中断源列表,其中父中断,子中断,外中断和内中断,以及功能说明和仲裁组。
     中断过程分析
        

        这是个包含了内外中断的中断流程图。

        个人还是比较习惯读未决定,因为以前学UNIX高级环境编程时信号那一章节中有个pending,我们就把这个读未决字。所以习惯了。当然也可以读源挂起寄存器。

        EINTPEND(外中断源未决寄存器):外部的子中断源未决寄存器,记录的是外部子中断源的中断情况,即是:EINT4-EINT23中任何一个的外部子中断源发生情况。

        EINTMASK(外部中断屏蔽寄存器):是否屏蔽外部子中断源发生的中断。1表示屏蔽。

        SUBSRCPND(sub Source pending):内部子中断源未决寄存器,这个寄存器是用来标志内部中断源的子中断是否发生的。如:INT_UARTn下的子中断源INT_RXDn,INT_TXDn,INT_ERRn中断是否发生。有15个内部子中断源。

        INTSUBMASK(intterupt submark):子中断屏蔽寄存器,是否屏蔽子中断。

        当子中断发生,且SUBSRCPEN寄存器相应位未被置1时,则表示系统可以接受该中断,然后SUBSRCPEN寄存器相应位置1,记录该中断已经发生,等待处理。然后检测INTSUBMASK寄存器是否屏蔽了这个位,如果没有则其父中断表示已经发生,且在SRCPND寄存器中相应位置1.

        SRCPND(Source Pending):中断源未决寄存器,记录某一个或者某一类中断(有子中断的)是否发生。

        INTMASK(interrupt Mask) 中断屏蔽寄存器,是否屏蔽了某个中断位。(只能屏蔽IRQ的中断,不能屏蔽FIQ中断)FIQ可以打断IRQ,但IRQ不能打断同类中断或者FIQ。
        INTMOD(interrupt Mode):中断模式寄存器,用来选择FIQ还是IRQ中断。当其中某个位被置为了1,则表示该位对应的中断将以FIQ中断处理。注:同一时间,只有一个快中断。     
        PRIOPITY:中断优先级寄存器,当多个IRQ发生时,要比较优先级,仲裁组的比较。
        INTPND(interrupt pending),中断未决寄存器,经过中断仲裁选择出来的优先级最高的中断,在寄存器相应位置1,处理器将处理这个中断。同时刻,只有一个位被置1.

        INTOFFSET(interrupt offset),用来表示INTPND寄存器中哪位被置1了,如果是第23位,则INTOFFSET寄存器的值就是23.

当SRCPND,INTPND寄存器清除时,该寄存器自动被清除。

1 0