嵌入式学习---ARM中断控制系统

  • 硬件中断处理是实时系统设计的最重要、最关键的问题。

外部事件与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。

在这里插入图片描述

相关推荐

  1. 嵌入学习-ARM

    2023-12-07 10:36:04       42 阅读
  2. 嵌入学习-ARM

    2023-12-07 10:36:04       38 阅读
  3. 嵌入学习-ARM-Day4

    2023-12-07 10:36:04       35 阅读
  4. 嵌入学习-ARM-IIC实验

    2023-12-07 10:36:04       38 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2023-12-07 10:36:04       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2023-12-07 10:36:04       100 阅读
  3. 在Django里面运行非项目文件

    2023-12-07 10:36:04       82 阅读
  4. Python语言-面向对象

    2023-12-07 10:36:04       91 阅读

热门阅读

  1. linux的权限管理

    2023-12-07 10:36:04       56 阅读
  2. Nginx的缓存配置与其他配置

    2023-12-07 10:36:04       59 阅读
  3. 计算机视觉(CV)技术的优势和挑战-AI生成版

    2023-12-07 10:36:04       51 阅读
  4. Blocking_Analyzer_1.7_For_MySQL_8.0.exe

    2023-12-07 10:36:04       52 阅读
  5. 生活、工作常用API免费接口

    2023-12-07 10:36:04       44 阅读
  6. 梦想与魔法:编程之路的挑战与荣耀

    2023-12-07 10:36:04       52 阅读