一、ARM中断机制

    1、查询方式:程序不断地查询各设备的状态,并做出相应的反映。该方式实现比较简单常用在比较单一的系统中,比如一个温控系统中可以使用查询方式不断检测温度的变化。
        
    特点:实现简单;但 CPU 利用率低,不适合多任务的系统
    
    2、中断方式:当事件发生时,硬件会设置某个寄存器;CPU在每执行完一个指令,查看这个寄存器,如果所关注的事件发生了,则中断当前程序,跳转到一个固定的地址处理这个事件,处理完后返回到被中断的程序继续执行。
    
    特点:实现相对复杂,但效率高,是常用的方法。
    
二、中断处理流程

    1、中断控制器汇集各类外设发出的中断信号,然后通知CPU。

    2、CPU保存当前程序的运行环境,然后调用中断服务程序(ISR),来处理中断。
    
    3、在ISR中通过读取外设的相关的寄存器来识别中断的类型,并进行相应的处理。
    
    4、清除中断:通过读写相关中断控制寄存器和外设相关寄存器来实现。
    
    5、恢复被中断程序的执行环境,继续执行被中断的程序。

三、中断源

    S3C2440支持60个中断源,含子中断源
    
四、中断通知

    1、中断源

    2、SUBSRCPND寄存器用来标识子中断(如:INT_RXD0)是否发生。S3C2440有15个子中断,SUBSRCPND中每一为对应一个子中断,当这些子中断发生时,相应位被设置为1。清除子中断只需向SUBSRCPND寄存器中相应位写入1。

    3、INTSUBMSK寄存器用来屏蔽SUBSRCPND寄存器所标识的中断。INTSUBMSK寄存器某位被设为1时,相应的子中断被屏蔽。设为0时,表示子中断被允许。

    4、SRCPND中每一位用来标明一个(或一类)中断是否已经发生。例如:SUBSRCPND寄存器中子中断INT_RXD0发生了,且没有被INTSUBMSK屏蔽,则SRCPND的INT_UART0位被置1。SRCPND寄存器的清除与SUBSRCPND寄存器类似,若想清除某一位,往该位写入1。
    
    5、INTMSK寄存器用来屏蔽SRCPND所标识的中断。INTMSK某位被设置为1时,对应的中断被屏蔽,设置为0时,相应中断被允许。INTMSK只能屏蔽设为IRQ的中断,不能屏蔽设为FIQ的中断。
    
        FIQ vs IRQ
        
    6、S3c2440是通过Priority寄存器来控制32个中断请求的,而在这个寄存器中是通过ARB_MOD(PRIORITY[6:0])和ARB_SEL(PRIORITY[20:7])来区分优先级的。参考这里:http://hi.baidu.com/jianqi2009/blog/item/2cc7c9d6733513c8a044df49.html
    
    7、INTPND经过中断优先级仲裁选择器选出优先级高的中断后,这个中断在INTPND寄存器中相应位被置1,随后,CPU将进入中断模式处理它。同一时间内,此寄存器只有一位被置1;ISR中可以根据这个位确定中断类型。清除该中断时,往这个位写入0。


01-19 21:28