目录
- 外部事件与CPU的交互方式
- 查询方式
- 中断方式
- 什么是中断源
- S3C2440支持60个中断源
- FIQ和IRQ
- 中断处理流程
- 将外设中断通知给CPU
- SUBSRCPND寄存器
- INTSUBMSK寄存器
- SRCPND寄存器
- INTMSK寄存器
- INTMOD寄存器
- INTPND寄存器
- 硬件中断处理是实时系统设计的最重要、最关键的问题。
外部事件与CPU的交互方式
查询方式
- 程序不断地查询各设备的状态,并做出相应的反应。该方式实现比较简单,常用在比较单一的系统中,比如一个温控系统中可以使用查询方式不断检测温度的变化。
- 特点:实现简单;但CPU利用率很低,不适合多任务的系统。
中断方式
- 当事件发生时,硬件会设置某个寄存器;CPU在每执行完一个指令时,查看这个寄存器,如果所关注的事件发生了,则中断当前程序,跳转到一个固定的地址处理这个事件,处理完后返回到被中断的程序中继续运行。
- 特点: 实现相对复杂,但效率较高,是常用的方法。
什么是中断源
- 中断源是指能够触发中断请求的事件或信号源。在计算机系统中,中断源可以是硬件设备(如键盘、鼠标、定时器等)或软件程序(如操作系统或应用程序)发出的信号。当中断源触发中断请求时,处理器会立即中断当前正在执行的任务,转而去处理中断服务程序,以响应中断事件。中断源的存在可以提高系统的响应速度和处理效率,使得处理器能够及时处理重要的事件或任务。
S3C2440支持60个中断源
FIQ和IRQ
FIQ(Fast Interrupt Request)和IRQ(Interrupt Request)是两种不同类型的中断请求。
- IRQ是一种标准的中断请求,用于处理一般的中断事件。它是由外部设备(如键盘、鼠标、定时器等)或软件程序发出的中断信号。当IRQ中断请求被触发时,处理器会中断当前正在执行的任务,保存当前的上下文,并跳转到IRQ中断服务程序去处理中断事件。IRQ中断请求具有较低的优先级,可以被其他中断请求打断。
- FIQ是一种快速中断请求,用于处理紧急或高优先级的中断事件。与IRQ相比,FIQ具有更高的优先级和更快的响应速度。FIQ中断请求通常由特定的硬件设备(如DMA控制器、硬盘控制器等)发出,用于处理一些需要快速响应的关键任务。当FIQ中断请求被触发时,处理器会立即中断当前任务,保存当前的上下文,并跳转到FIQ中断服务程序去处理中断事件。由于FIQ具有较高的优先级,它可以打断正在执行的IRQ中断请求。
总结来说,IRQ用于处理一般的中断事件,而FIQ用于处理紧急或高优先级的中断事件。FIQ具有更高的优先级和更快的响应速度,适用于一些对实时性要求较高的任务。
- IRQ模式下,中断处理程序需要自己保存R8到R12这几个寄存器,退出中断处理时需要自己恢复这几个寄存器,而FIQ模式由于这几个寄存器都有back寄存器(fiq_R8…),模式切换时CPU自动保存这些值到back寄存器,退出FIQ模式时自动恢复,所以这个过程FIQ比IRQ快。FIQ比IRQ有更高优先级,如果FIQ和IRQ同时产生,那么FIQ先处理。
中断处理流程
- 中断控制器汇集各类外设发出的中断信号【中断控制器通常具有多个中断输入引脚,每个引脚对应一个外设的中断信号。当外设发出中断请求时,相应的中断输入引脚会被置为高电平或触发一个特定的信号。中断控制器会监测这些引脚的状态,并确定哪个外设发出了中断请求】,中断控制器会将中断请求的优先级进行排序,然后将最高优先级的中断请求发送给CPU。
- CPU保存当前程序的运行环境,然后调用中断服务程序 (ISR)来处理中断。
- 在ISR中通过读取外设的相关寄存器来识别中断的类型,并进行相应的处理。
将外设中断通知给CPU
SUBSRCPND寄存器
- SUBSRCPND寄存器用来标明子中断 (如:INT_RXDO)是否发生。S3C2440有15个子中断,SUBSRCPND中每一位对应一个子中断,当这些子中断发生时,相应的位被置为1清除子中断只需向SUBSRCPND寄存器中相应位写入1。
INTSUBMSK寄存器
- INTSUBMSK寄存器用来屏蔽SUBSRCPND寄存器所标示的中断。INTSUBMSK寄存器中某位被设为1时,相应的子中断被屏蔽。设为0时,表示子中断被允许。
SRCPND寄存器
- SRCPND中每一位用来标明一个 (或一类)中断是否已经发生。例如: SUBSRCPND寄存器中的子中断INT_RXDO发生了,且没有被INTSUBMSK屏蔽,则SRCPND的INT UARTO位被置1。SRCPND寄存器的清除与SUBSRCPND寄存器相似,若想清除某一位,往此位写入1。
INTMSK寄存器
- INTMSK寄存器用来屏蔽SRCPND所标示的中断。INTMSK某位被设置为1时,对应的中断被屏蔽,设置为0时,相应中断被允许。INTMSK只能屏蔽设为IRQ的中断,不能屏蔽设为FIQ的中断。
INTMOD寄存器
- 当INTMOD寄存器中某位被设置为1时,它所对应的中断源会被设置为FIQ模式,即此中断发生时,CPU将进入快速中断模式,这通常用来处理特别紧急的中断。当该位被置为0时,表示为IRQ模式。
INTPND寄存器
- 经过中断优先级仲裁器选出优先级高的中断后,这个中断在INTPND寄存器中的相应位被置1,随后,CPU将进入中断模式处理它。同一时间内,此寄存器只有一位被置1;在ISR中可以根据这个位确定中断类型。清除该中断时,往这个位写入0。