ARM处理器7种类型异常

  按优先级从高到低的排列如下:

  复位异常(Reset)

  数据异常(Date Abort)

  快速中断异常(FIQ)

  外部中断异常(IRQ)

  预取异常(Prefetch Abort)

  软件中断异常(SWI)

  未定义指令异常(Underfined instruction)


当异常发生时

  处理器会把PC设置为一个特定的存储器地址。

  这一地址放在被称为向量表(vector table)的特定地址范围内。

  向量表的入口是一些跳转指令,跳转到专门处理某个异常或中断的子程序。

  当异常发生时,分组寄存器r14和SPSR用于保存处理器状态。


ARM异常处理器模式

  每一种异常都会导致内核进入一种特定的模式。

  用户和系统模式是仅有的不可通过异常进入的两种模式,也就是说,要进入这两种模式,必须通过编程改变CPSR。


FIQ和IRQ异常中断

  ARM内核只有两个外部中断输入信号nFIQ和nIRQ。但对于一个系统来说,中断源可有多达几十个。

  为此,在系统集成的时候,一般都会有一个异常控制器来处理异常信号。

  这时候用户程序可能存在多个IRQ/FIQ的中断处理函数。为了使从向量表开始的跳转始终能够找到正确的处理函数入口,需要设置一套处理机制和方法。

  多数情况下是由软件来处理异常分支的,因为软件可以通过读取中断控制器来获得中断源的信息。


S3C2410X中断控制

  1)程序状态寄存器的F位和I位。如果CPSR程序状态寄存器的F位被设置为1,那么CPU将不接受来自中断控制器的FIQ;如果CPSR程序状态寄存器的I位被设置为1,那么CPU将不接受来自中断控制器的IRQ。因此,为了使能FIQ和IRQ,必须先将CPSR程序状态寄存器的F位和I位清零,并且中断屏蔽寄存器INTMSK中相应的位也要清零。

  2)中断模式(INTMOD)

  ARM920T提供了两种中断模式,即FIQ模式和IRQ模式。

  所有的中断源在中断请求时都要确定使用了哪一种中断模式

  3)中断挂起寄存器(INTPND)

  S3C2410X有两个中断挂起寄存器:源中断挂起寄存器(SRCPND)中断挂起寄存器(INTPND),用于指示对应的中断是否被激活。

  当中断源请求中断的时候,SRCPND寄存器的相应位被置为1,同时INTPND寄存器中也有唯一的一位在仲裁程序后被自动置1。

  如果屏蔽位被设置为1,相应的SRCPND位会被置为1,但是INTPND寄存器不会有变化;

  如果INTPND被置位,只要标志I或标志F一旦被清零,就会招待相应的中断服务程序。

  在中断服务子程序中要先向SRCPND中的相应位写1来清除挂起状态,再用同样的方法来清除INTPND的相应位的挂起状态

  4)中断屏蔽寄存器(INTMSK)

  当INTMSK寄存器的屏蔽位为1时,对应的中断被禁止;当INTMSK寄存器的屏蔽位为0时,则对应的中断正常执行。

  如果一个中断的屏蔽位为1,在该中断发出请求时挂起位还是会被设置为1,但中断请求都不被受理


S3C2410中断控制寄存器

  S3C2410X的中断控制器有5个控制寄存器:

源挂起寄存器(SRCPND)、中断模式寄存器(INTMOD)、中断屏蔽寄存器(INTMSK)、中断优先权寄存器(PRIORITY)、中断挂起寄存器(INTPND)。

中断源发出的中断请求首先被寄存器在中断源挂起寄存器(SRCPND)中,INTMOD把中断请求分为两组:快速中断请求(FIQ)和中断请求(IRQ),PRIORITY处理中断的优先级。

  1)中断模式控制器(INTMOD)

  <注意>中断控制寄存器中只有一个中断源可以被设置为FIQ模式,因此只能在紧急情况下使用FIQ。

  2)中断挂起寄存器(INTPND)

  当中断请求被响应的时候,相应的位会被设置为1。

  在某一时刻只有一个位能为1,因此在中断服务子程序中可以通过判断INTPND来判断哪个中断正在被响应。

  在中断服务子程序中必须在清零SRCPND中相应位后清零相应的中断挂起位,清零方法和SRCPND相同

  <注意>向INIPND等于“1”的位写入“0”时,INTPND寄存器和INTOFFSET寄存器会有无法预知的结果,因此,千万不要向INTPND的“1”位写入“0”。推荐方法是把INTPND的值重新写入INTPND。

【ARM】arm异常中断处理知识点的更多相关文章

  1. ARM异常中断处理

    ARM异常中断处理 在ARM体系中,通常有以下3种方式控制程序的执行流程: 在正常程序执行过程中,每执行一条ARM指令,程序计数器寄存器(PC)的值加4个字节:每执行一条Thumb指令,程序计数器寄存 ...

  2. ARM—异常中断处理

    文章目录 一. ARM程序执行流程 二. ARM工作模式 三. ARM中异常中断的种类 四. 异常中断向量表及优先级 五. 异常中断用到的寄存器 六. ARM进入处理异常中断时的操作 七. ARM退出 ...

  3. 浅析arm的异常、中断和arm工作模式的联系

    说到异常向量,会让人联想到中断向量.其实,中断是属于异常的子集的,也就是说中断其实是异常其中的一种. 回到异常向量,他其实是一张表格,每个格子里存放的是一个地址,或者是一个跳转命令,不管是哪个,其目的 ...

  4. ARM对异常的处理

    所谓中断就是中断SoC的CPU核(异常可以引起CPU的中断) ARM对异常的处理 1.初始化: 1)设置中断源让它可以产生中断.如某个按键可以产生中断,那么可以设置它的GPIO引脚为中断引脚: 2)设 ...

  5. C++异常机制知识点

     在这里总结一下,C++中的异常机制,以及如何使用异常的知识点 C++中处理异常的过程是这样的:在执行程序发生异常,可以不在本函数中处理,而是抛出一个错误信息,把它传递给上一级的函数来解决,上一级解决 ...

  6. STM32程序异常——中断处理要谨慎

    问题背景 最近有一个新项目(车载项目),板子上除了原来的ARM + STM32F030K6Tx又多了一个8bit的mcu的单片机,这可真是嵌入式全家福了. 系统的主要核心工作是由arm来完成,但是在开 ...

  7. 异常 Exception 知识点总结 MD

    Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...

  8. java异常基础知识点

    @firstmiki 2017年1月12日12:03:32 一.异常的产生和捕获: package Exception; /** * 演示了java中异常的产生和捕获 * @firstmiki */ ...

  9. 关于LIst Set Map 异常的知识点---我的笔记

    今天新的内容1.List接口2.Set接口3.Map集合4.异常==================================================================== ...

随机推荐

  1. Easyui + asp.net MVC 系列教程 第19-23 节 完成注销 登录限制过滤 添加用户

    前面视频 文章地址 Easyui + asp.net MVC 系列教程 第09-17 节 完成登录 高清录制  Easyui + asp.net mvc + sqlite 开发教程(录屏)适合入门  ...

  2. Notes of O_DIRECT flag

    What is O_DIRECT Starting with kernel 2.4, Linux allows an application to bypass the buffer cache wh ...

  3. NoSQL生态系统(nosql ecosystem)

    Unlike most of the other projects in this book, NoSQL is not a tool, but an ecosystem composed of se ...

  4. Rot13加密算法

    Rot13是一种非常简单的替换加密算法,只能加密26个英语字母.方法是:把每个字母用其后第13个字母代替. 因为有26个字母,取其一半13. s = "xrlvf23xfqwsxsqf&qu ...

  5. Raspberry pi 使用python+pySerial实现串口通信(转)

    Raspberry pi 使用python+pySerial实现串口通信 转:http://blog.csdn.net/homeway999/article/details/8642353   目录( ...

  6. iOS中消息传递方式

    iOS中消息传递方式 在iOS中有很多种消息传递方式,这里先简单介绍一下各种消息传递方式. 1.通知:在iOS中由通知中心进行消息接收和消息广播,是一种一对多的消息传递方式. NSNotificati ...

  7. 怎样看待IT界业务,技术,管理的各自比重

    怎样看待IT界业务,技术,管理的各自比重   技术是根本,业务是个人能力的体现,管理一般随意,追求简单,眼光向IBM等有优秀管理经验的大公司看齐   重点从个人的喜好.性格方面来考虑分配比重,可以加上 ...

  8. POJ 1862 Stripies (哈夫曼树)

    Stripies Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 10263   Accepted: 4971 Descrip ...

  9. 用十条命令在一分钟内检查Linux服务器性能[转]

    概述 通过执行以下命令,可以在1分钟内对系统资源使用情况有个大致的了解. uptime dmesg | tail vmstat 1 mpstat -P ALL 1 pidstat 1 iostat - ...

  10. webservice复杂类型实例

    1.准备工作: 概念:SOAP(简单对象访问协议).WSDL(web服务描述语言).XML(可扩展标记语言).axis(阿帕奇可扩展交互系统) (1)     下载axis1.4,将axis1.4中的 ...