ARM中断机制学习记录

检查中断的两种方法: 

1.查询方式:程序不断地查询各设备的状态,并做出相庆的反应,该方式实现比较简单。常用在一些比较单一的系统中。比如一个温控系统中就可以使用查询方不断检测温度的变化。

查询方式的特点是:实现简单,但是CPU得用率很低,不适用于多任务的系统。

2.中断方式:当事件发生时,硬件会设置某个寄存器;CPU在执行完一个指令时,查看这个寄存器,如果关注的事件发生了,则中断当前程序。跳转到一个固定的地址来处理这个事件,处理完后返回到中断的程序中继续运行。

中断方式特点:实现相对复杂,但是效率较高,是常用方法。

 

中断的处理流程:

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

2.CPU保存当前程序的运行环境(包括状态),然后调用中断服务(IRS)来处理中断。

3.在ISR中通过读取外设的相关寄存器来识别中断的类型,并进行相应的处理。

4.清除中断:通过读写相关中断控制寄存器和外设相关寄存器来实现。

5.恢复被中断程序的执行环境,继续执行被中断的程序。

中断的产生过程

SUBSRCPND寄存器:用于标明子中断(如:INT_RXD0)是否发生。S3C2440有15个子中断,SUBSRCPND中的每一位对应一个子中断,当这些子中断发生时,相应的位会被标记为1,清除子中断只需向SUBSRCPND寄存器相应的位写入1就可以了。

INTSUBMSK寄存器:用于屏蔽SUBSRCPND寄存器所标示的中断,INTSUBMSK寄存器中的某一位被设为1时,刚相应的子中断也会被屏蔽掉,设为0时,表示子中断被允许。

SRCPND寄存器:中的每一位用来标明一个(或者一类)中断是否发生。例如:SUBSRCPND寄存器中的子中断INT_RXD0发生了,且没有给INTSUBMSK屏蔽,则SRCPND的INT_UART0位被置1.SRCPNG寄存器的清除与SUBSRCPND寄存器相似,若想清除某一位,就往对应的位写入1.

INTMSK寄存器:是用来屏蔽SRCPND所标示的中断。INMSK的某位被设置为1时,对应的中断会被屏蔽,设置为0时,相应中断被充许。INTMSK只能屏蔽设为IRQ的中断,不屏蔽设为FIQ的中断。

INTMOD寄存器中的某位被设置为1时,他所对应的中断源会被设置为FIQ模式,即此中断发生时,CPU将进入快速中断模式,这通常用来处理特别紧急的中断。当该位被置为0时,表示为IRQ模式。

INTPND寄存器经过中断优先级促栽器选出优先级高的中断后,这个中断在INTPND寄器上的某位会被置1,随后,CPU将进入中断模式处理它。同一时间内,此寄存器只有一位被置1;在ISR中可以根据这个确定中断类型,清除中断是要往此寄存器中写入0.

你可能感兴趣的:(学习,记录)