ARM的异常中断机制 .

2024-04-09 00:38
文章标签 机制 arm 异常中断

本文主要是介绍ARM的异常中断机制 .,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在我们平时使用计算机时我们敲击键盘,计算机会对我做出响应。这是什么原因呢?处理器又是如何响应外围请求的呢?其实这都是通过处理器的中断机制实现的。ARM又是怎样的中断机制?让我们一起探讨吧!

在ARM处理器里主要是通过3中情况在控制程序执行的:
1.流水方式执行程序,PC的值是下一条指令的地址,即每执行一条指令PC都加一个字的偏移。
2.通过跳转指令来控制程序执行。
   B 跳转到指定的指令处执行。
   BL 跳转执行,保存子程序地址并返回。
   BX 跳转执行并切换到Thumb状态。
   BLX 三种方式组合。
3.通过异常中断机制控制程序执行。
   当异常中断发生时,系统执行完当前指令后,将跳转到相应的异常中断处理程序处执行。在进入异常中断处理程序执行完时,程序返回到发生到产生中断指令的下一条指令处执行。在进入异常中断处理程序时,要保存被中断的程序的执行现场,从异常中断处理程序退出时,要恢复被中断的程序的执行现场。
在实际情况中ARM处理器在控制程序执行时往往是以上3种方式结合执行的。

ARM有以下几种异常中断种类:

异常中断名称 含义
Reset   复位中断,
当处理器复位引脚有效时,如系统产生复位中断则跳转至复位中断异常处理程序处执行。
有两种情况:
系统加电,
系统复位
Undefined instruction  当ARM处理器认为当前指令未定义时,产生未定义的指令异常中断。
Software interrupt软中断,这是有用户定义的中断指令。可用于用户模式下的程序调用的特权操作指令,在RTOS中可以通过该机制实现系统功能调用。
Prefech Abort 指令预取中止,预读指令地址不存在或不能访问则产生该中断。
Data Abotr 数据访问中止,数据访问指令地址不存在或不能访问则产生该中断。
IRQ 外部中断请求,当处理器外部引脚有效时,且CPSR的寄存器I被清除时,产生该中断,并调用中断服务子程序。
FIQ快速中断请求,当处理器快速外部引脚有效时,且CPSR的寄存器F被清除时,产生该中断,并调用中断服务子程序。

呵呵,让我们来看看ARM的异常中断响应过程吧!
1.保存处理器当前状态、中断屏蔽位及各条件标志位。怎样保存呢?
  ARM的6种模式下都有自己的SPSR,它就是通过把当前的CPSR保存到将要执行异常中断的SPSR_mode实现的。
2.设置当前的CPSR的相应的标志位。
  设置M、I、F等控制位。
3.将lr_mode设成返回地址。
4.将PC指向中断向量表的地址,跳转到对应的中断服务程序处执行。
5.恢复被中断处理的处理器状态。(将SPSR_mode复制到CPSR)
6.返回到发生异常中断的下一条指令处执行。(即PC = lr_mode)

用伪代码描述如下:
lr_mode = pc
spsr_mode = cpsr
cpsr[4:0] =  exception mode
if <exception mode> == Reset or FIQ then
    cpsr[6] = 1
cpsr[7] = 1
pc = exception mode vector address
cpsr = spsr_mode
pc = lr_mode

这篇关于ARM的异常中断机制 .的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/886777

相关文章

SpringRetry重试机制之@Retryable注解与重试策略详解

《SpringRetry重试机制之@Retryable注解与重试策略详解》本文将详细介绍SpringRetry的重试机制,特别是@Retryable注解的使用及各种重试策略的配置,帮助开发者构建更加健... 目录引言一、SpringRetry基础知识二、启用SpringRetry三、@Retryable注解

SpringKafka错误处理(重试机制与死信队列)

《SpringKafka错误处理(重试机制与死信队列)》SpringKafka提供了全面的错误处理机制,通过灵活的重试策略和死信队列处理,下面就来介绍一下,具有一定的参考价值,感兴趣的可以了解一下... 目录引言一、Spring Kafka错误处理基础二、配置重试机制三、死信队列实现四、特定异常的处理策略五

java中反射(Reflection)机制举例详解

《java中反射(Reflection)机制举例详解》Java中的反射机制是指Java程序在运行期间可以获取到一个对象的全部信息,:本文主要介绍java中反射(Reflection)机制的相关资料... 目录一、什么是反射?二、反射的用途三、获取Class对象四、Class类型的对象使用场景1五、Class

Nginx之upstream被动式重试机制的实现

《Nginx之upstream被动式重试机制的实现》本文主要介绍了Nginx之upstream被动式重试机制的实现,可以通过proxy_next_upstream来自定义配置,具有一定的参考价值,感兴... 目录默认错误选择定义错误指令配置proxy_next_upstreamproxy_next_upst

Spring排序机制之接口与注解的使用方法

《Spring排序机制之接口与注解的使用方法》本文介绍了Spring中多种排序机制,包括Ordered接口、PriorityOrdered接口、@Order注解和@Priority注解,提供了详细示例... 目录一、Spring 排序的需求场景二、Spring 中的排序机制1、Ordered 接口2、Pri

MySQL 缓存机制与架构解析(最新推荐)

《MySQL缓存机制与架构解析(最新推荐)》本文详细介绍了MySQL的缓存机制和整体架构,包括一级缓存(InnoDBBufferPool)和二级缓存(QueryCache),文章还探讨了SQL... 目录一、mysql缓存机制概述二、MySQL整体架构三、SQL查询执行全流程四、MySQL 8.0为何移除查

一文详解Java Condition的await和signal等待通知机制

《一文详解JavaCondition的await和signal等待通知机制》这篇文章主要为大家详细介绍了JavaCondition的await和signal等待通知机制的相关知识,文中的示例代码讲... 目录1. Condition的核心方法2. 使用场景与优势3. 使用流程与规范基本模板生产者-消费者示例

一文带你理解Python中import机制与importlib的妙用

《一文带你理解Python中import机制与importlib的妙用》在Python编程的世界里,import语句是开发者最常用的工具之一,它就像一把钥匙,打开了通往各种功能和库的大门,下面就跟随小... 目录一、python import机制概述1.1 import语句的基本用法1.2 模块缓存机制1.

Redis主从/哨兵机制原理分析

《Redis主从/哨兵机制原理分析》本文介绍了Redis的主从复制和哨兵机制,主从复制实现了数据的热备份和负载均衡,而哨兵机制可以监控Redis集群,实现自动故障转移,哨兵机制通过监控、下线、选举和故... 目录一、主从复制1.1 什么是主从复制1.2 主从复制的作用1.3 主从复制原理1.3.1 全量复制

Redis缓存问题与缓存更新机制详解

《Redis缓存问题与缓存更新机制详解》本文主要介绍了缓存问题及其解决方案,包括缓存穿透、缓存击穿、缓存雪崩等问题的成因以及相应的预防和解决方法,同时,还详细探讨了缓存更新机制,包括不同情况下的缓存更... 目录一、缓存问题1.1 缓存穿透1.1.1 问题来源1.1.2 解决方案1.2 缓存击穿1.2.1