网站大量收购独家精品文档,联系QQ:2885784924

武汉创维特ARM教学系统 06 异常中断处理.ppt

  1. 1、本文档共29页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
武汉创维特ARM教学系统06异常中断处理整理

嵌入式系统教案 武汉创维特信息技术有限公司 ARM异常中断处理概述 当正常的程序执行流程发生暂时的停止时,称之为异常,例如处理一个外部的中断请求。在处理异常之前,当前处理器的状态必须保留,这样当异常处理完成之后,当前程序可以继续执行。处理器允许多个异常同时发生,它们将会按固定的优先级进行处理。 ARM体系结构中的异常,与8位/16位体系结构的中断有很大的相似之处,但异常与中断的概念并不完全等同。 ARM体系结构所支持的异常类型 异常向量表(Exception Vectors) 异常优先级(Exception Priorities) 对异常的响应 当一个异常出现以后,ARM微处理器会执行以下几步操作 将下一条指令的地址存入相应连接寄存器LR,以便程序在处理异常返回时能从正确的位置重新开始执行。 将CPSR复制到相应的SPSR中。 根据异常类型,强制设置CPSR的运行模式位。 强制PC从相关的异常向量地址取下一条指令执行,从而跳转到相应的异常处理程序处。 异常响应伪代码 处理器处于Thumb状态,则当异常向量地址加载入PC时,处理器自动切换到ARM状态。ARM微处理器对异常的响应过程用伪码可以描述为: R14_Exception_Mode = Return Link SPSR_Exception_Mode = CPSR CPSR[4:0] = Exception Mode Number CPSR[5] = 0 If Exception_Mode == Reset or FIQ then CPSR[6] = 1 CPSR[7] = 1 PC = Exception Vector Address 从异常返回 异常处理完毕之后,ARM微处理器会执行以下几步操作从异常返回: 将连接寄存器LR的值减去相应的偏移量后送到PC中。 将SPSR复制回CPSR中。 若在进入异常处理时设置了中断禁止位,要在此清除。 可以认为应用程序总是从复位异常处理程序开始执行的,因此复位异常处理程序不需要返回。 中断处理程序的安装 一般在系统的启动代码中安装异常处理程序。大致可以分为两种情况: 0地址处存储器为ROM/FLASH 0地址处存储器为RAM 在ROM/FLASH中安装中断处理程序 在ROM/FLASH的异常中断向量表中,可以使用LDR指令直接向程序计数器PC中赋值,也可以直接使用跳转指令转到异常中断处理程序。 使用LDR指令: Vector_entry: LDR PC, Reset_Handle LDR PC, Undef_Handle LDR PC, SWI_Handle 在ROM/FLASH中安装中断处理程序 LDR PC, Prefetch_Handle LDR PC, Abort_Handle NOP LDR PC, IRQ_Handle LDR PC, FIQ_Handle Vector_table: Reset_Handle: .LONG Start_Boot Undef_Handle: .LONG Undef_Isr …… 在ROM/FLASH中安装中断处理程序 使用跳转指令: Vector_entry: B Reset_Handle B Undef_Handle B SWI_Handle B Prefetch_Handle B Abort_Handle NOP B IRQ_Handle B FIQ_Handle RAM中安装中断处理程序 当0地址处为RAM时,中断向量表必须使用数据读取指令直接指向PC中赋值的形式。而且必须把中断向量从ROM中复制到RAM地址的0地址处。 MOV r8, #0 ADR r9, Vector_Init_Block LDMIA r9!, {r0-r7} STMIA r8!, {r0-r7} 在C程序中安装异常中断处理程序 中断向量表使用数据处理指令的情况 在中断向量vector处安装location处指向的处理程序 unsigned ist_handler( unsigned location, unsigned *vector) { unsigned vec, oldvec; vec = (location – (unsigned)vector – 0x08) | 0xe59ff000; oldvec = *vector; *vector = vec; return oldvec; } 在C程序中安装异常中断处理程序 中断向量表使用跳转指令的情况 在中断向量vector处安装routine处理程序 unsigned ist_handler(

文档评论(0)

chenchena + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档