好文档就是一把金锄头!
欢迎来到金锄头文库![会员中心]
电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本

异常及中断处理讲解.docx

19页
  • 卖家[上传人]:汽***
  • 文档编号:522438429
  • 上传时间:2023-11-30
  • 文档格式:DOCX
  • 文档大小:109.03KB
  • / 19 举报 版权申诉 马上下载
  • 文本预览
  • 下载提示
  • 常见问题
    • ARM 异常中断处理概述1、中断的概念中断是一个过程,是 CPU 在执行当前程序的过程中因硬件或软件的原因插入了另一段程序 运行的过程 因硬件原因引起的中断过程的出现是不可预测的, 即随机的, 而软中断是事先 安排的2、中断源的概念我们把可以引起中断的信号源称之为中断源3、中断优先级的概念ARM 处理器中有 7 种类型的异常,按优先级从高到低的排列如下:复位异常( Reset)、数据异常(Data Abort )、快速中断异常 ( FIQ)、外部中断异常 (IRQ)、预取异常 (Prefetch Abort )、 软件中断 (SWI)和未定义指令异常( Undefined instruction )ARM体系异常种类面是 ARM 的 7 种异常当异常发生时,处理器会把 PC设置为一个特定的存储器地址这一地址放在被称为向量表 ( vector table )的特定地址范围内向量表的入口是一些跳转指令,跳转到专门处理某个异 常或中断的子程序当异常产生时 , ARM core:拷贝 CPSR 到 SPSR_ 设置适当的 CPSR 位: 改变处理器状态进入 ARM 状态 改变处理器模式进入相应的异常模式 设置中断禁止位禁止相应中断 (如果需要 )保存返回地址到 LR_ 设置 PC 为相应的异常向量 返回时 , 异常处理需要 :从 SPSR_恢复 CPSR从 LR_恢复 PCNote:这些操作只能在 ARM 态执行 .当异常发生时,分组寄存器 r14 和 SPSR用于保存处理器状态,操作伪指令如下。

      R14_ = return link SPSR_ = CPSR0x1C快速中断请求 FIQ外部中断请求 IRQ0x18保留0x10数据异常预取异常CPSR[4∶ 0] = exception mode numberCPSR[5] = 0 /* 进入 ARM状态 */If = = reset or FIQ thenCPSR[6] = 1 /* 屏蔽快速中断 FIQ*/CPSR[7] = 1 /* 屏蔽外部中断 IRQ*/PC = exception vector address 异常返回时, SPSR内容恢复到 CPSR, 连接寄存器 r14 的内容恢复到程序计数器 PC注:cortex-A8系统中支持通过设置 CP15的 c12 寄存器将异常向量表的首地址设置在任意地 址例如: mcr p15, 0, r0, c12, c0, 01.复位异常当处理器的复位引脚有效时, 系统产生复位异常中断, 程序跳转到复位异常中断处理程序处 执行复位异常中断通常用在下面两种情况下系统上电系统复位 当复位异常时,系统执行下列伪操作:R14_svc = UNPREDICTABLE valueSPSR_svc = UNPREDICTABLE valueCPSR[4∶0] = 0b10011 /* 进入特权模式 */CPSR[5] = 0 /* 处理器进入 ARM 状态 */CPSR[6] = 1 /* 禁止快速中断 */CPSR[7] = 1 /* 禁止外设中断 */If high vectors configured thenPC = 0xffff0000ElsePC = 0x00000000复位异常中断处理程序的主要功能: 设置异常中断向量表。

      初始化数据栈和寄存器初始化存储系统,如系统中的 MMU 等 初始化关键的 I/O 设备使能中断 处理器切换到合适的模式初始化 C 变量,跳转到应用程序执行2.未定义指令异常当 ARM 处理器执行协处理器指令时,它必须等待一个外部协处理器应答后,才能真正执行 这条指令若协处理器没有相应,则发生未定义指令异常 当未定义异常发生时,系统执行下列的伪操作:r14_und = address of next instruction after the undefined instruction SPSR_und = CPSRCPSR[4∶0] = 0b11011CPSR[5] = 0/* 进入未定义指令模式 *//* 处理器进入 ARM 状态 *//*CPSR[6]保持不变 */CPSR[7] = 1/* 禁止外设中断 */If high vectors configured thenPC = 0xffff0004ElsePC = 0x000000043.软中断 SWI软中断异常发生时, 处理器进入特权模式, 执行一些特权模式下的操作系统功能 软中断异 常发生时,处理器执行下列伪操作r14_svc = address of next instruction after the SWI instructionSPSR_und = CPSRCPSR[4∶0] = 0b10011CPSR[5] = 0/* 进入特权模式 *//* 处理器进入 ARM 状态 *//*CPSR[6]保持不变 */CPSR[7] = 1/* 禁止外设中断 */If high vectors configured then PC = 0xffff0008ElsePC = 0x000000084.预取指令异常预取指令异常是由系统存储器报告的。

      当处理器试图去取一条被标记为预取无效的指令时, 发生预取异常如果系统中不包含 MMU 时,指令预取异常中断处理程序只是简单地报告错误并退出 若包 含 MMU ,引起异常的指令的物理地址被存储到内存中 预取异常发生时,处理器执行下列伪操作:r14_svc = address of the aborted instruction + 4SPSR_und = CPSRCPSR[4∶0] = 0b10111 /* 进入特权模式 */CPSR[5] = 0 /* 处理器进入 ARM 状态 *//*CPSR[6]保持不变 */CPSR[7] = 1 /* 禁止外设中断 */If high vectors configured thenPC = 0xffff000CElsePC = 0x0000000C5.数据访问中止异常数据访问中止异常是由存储器发出数据中止信号, 它由存储器访问指令 Load/Store 产生 当 数据访问指令的目标地址不存在或者该地址不允许当前指令访问时, 处理器产生数据访问中 止异常当数据访问中止异常发生时,处理器执行下列伪操作r14_abt = address of the aborted instruction + 8 SPSR_abt = CPSRCPSR[4∶0] = 0b10111CPSR[5] = 0/*CPSR[6]保持不变 */CPSR[7] = 1 /* 禁止外设中断 */If high vectors configured thenPC = 0xffff000C10ElsePC = 0x00000010 当数据访问中止异常发生时,寄存器的值将根据以下规则进行修改:① 返回地址寄存器 r14 的值只与发生数据异常的指令地址有关,与 PC 值无关② 如果指令中没有指定基址寄存器回写,则基址寄存器的值不变③ 如果指令中指定了基址寄存器回写,则寄存器的值和具体芯片的 Abort Models 有关,由 芯片的生产商指定④ 如果指令只加载一个通用寄存器的值,则通用寄存器的值不变⑤ 如果是批量加载指令,则寄存器中的值是不可预知的值⑥ 如果指令加载协处理器寄存器的值,则被加载寄存器的值不可预知6.外部中断 IRQ当处理器的外部中断请求引脚有效,而且 CPSR寄存器的 I 控制位被清除时,处理器产生外部中断 IRQ 异常。

      系统中各外部设备通常通过该异常中断请求处理器服务当外部中断 IRQ 发生时,处理器执行下列伪操作r14_irq = address of next instruction to be executed + 4SPSR_irq = CPSRCPSR[4∶0] = 0b10010 /* 进入特权模式 */CPSR[5] = 0 /* 处理器进入 ARM 状态 *//*CPSR[6]保持不变 */CPSR[7] = 1 /* 禁止外设中断 */If high vectors configured thenPC = 0xffff0018ElsePC = 0x000000187.快速中断 FIQ当处理器的快速中断请求引脚有效且 CPSR寄存器的 F 控制位被清除时,处理器产生快速中断请求 FIQ 异常当快速中断异常发生时,处理器执行下列伪操作r14_fiq = address of next instruction to be executed + 4 SPSR_fiq = CPSRCPSR[4∶0] = 0b10001 /* 进入 FIQ模式*/CPSR[5] = 0CPSR[6] = 1CPSR[7] = 1If high vectors configured thenPC= 0xffff001cElsePC = 0x0000001c三. ARM 异常的优先级四. ARM 处理器模式和异常ARM 处理器异常及其对应的模式:每一种异常都会导致内核进入一种特定的模式。

      也可以通过编程改变 CPSR,进入任何一种ARM 处理器模式注:用户模式和系统模式是仅有的不可以通过异常进入的两种模式,也就是说,要进入这 两张模式必须通过编程改变 CPSR五. ARM 异常响应和处理程序返回1.中断响应的概念中断响应大致可以分为以下几个步骤:1、 保护断点,即保存下一将要执行的指令的地址,就是把这个地址送入堆栈Sub lr, lr, #4Stmfd sp!, {r0-r12, lr}2、 寻找中断入口,根据不同的中断源所产生的中断,查找不同的入口地址Bl c_irq_handler3、 执行中断处理程序可以写在 main 函数中4、 中断返回:执行完中断指令后,就从中断处返回到主程序,继续执行Ldmfd sp!, {r0-r12, pc}^2.ARM异常响应流程1.判断处理状态2.向量表跳转指令 B 的跳转范围为± 32MB ,但很多情况下不能保证所有的异常处理函数都定位在向 量的 32MB 范围内, 需要更大范围的跳转, 而且由于向量表空间的限制, 只能由一条指令完 成具体实现方法有下面两种1)MOV PC,# imme_value 这种办法将目标地址直接赋值给 PC。

      但这种方法受格式限制不能处理任意立即数这个立即数由一个 8 位数值循环右移偶数位得到2)LDR PC, [PC+offset] 把目标地址先存储在某一个合适的地址空间,然后把这个存 储器单元的 32 位数据传送给 PC 来实现跳转这种方法对目标地址值没有要求。

      点击阅读更多内容
      关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
      手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
      ©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.