ARM异常、中断以及他们的向量表分析

2018-06-04 21:08:04编辑:什么鱼 关键字:ARM异常  中断以  向量表

 以前,我一直很疑惑这个“ARM异常中断以及他们的向量表”是怎么回事,他们到底是怎么实现的,没有想到今天偶然看到(ARM System Developer's Guide: Designing and Optimizing System Software的ARM异常、中断以及他们的向量表的章节,豁然开朗。——ARM嵌入式系统开发:软件设计与优化的英文原版——我个人感觉这是国内翻译ARM书籍最好的一本之一,比杜XX的ARM体系结构与编程好千倍。 本书虽然说软件设计与优化,但是讲的硬件也很多,比如MMU和cache等,讲的精彩纷呈:我刚才想写关于MMU和cache的博客,发现太庞大,看来这段时间要重新看看这本书才能写。 
下载地址:http://download.csdn.net/source/904273 

————————下面来看看

2.4 Exceptions, Interrupts, and the Vector Table

When an exception or interrupt occurs, the processor sets the pc to a specific memory
address. The address is within a special address range called the vector table. The entries
in the vector table are instructions that branch to specific routines designed to handle a
particular exception or interrupt.

——当异常或者中断发生的时候,处理器设置PC为一个特殊的内存地址。这个地址叫做中断向量表。中断向量表入口是中断、异常的分支入口((*^__^*) 嘻嘻……,这个翻译的好烂,不过大家知道就可以了)。

The memory map address 0x00000000 is reserved for the vector table, a set of 32-bit
words. On some processors the vector table can be optionally located at a higher address
in memory (starting at the offset 0xffff0000). Operating systems such as Linux and
Microsoft’s embedded products can take advantage of this feature.

——内存映射地址0x00000000 是为中断向量表保留的。在某些处理器中断向量表地址为0xffff0000。某些操作系统如linux可以利用这个特征(其实wince就是采用0xffff0000作为中断向量表的地址,但是令人奇怪的是优龙的ADS bootloader的中断向量表地址是0x00000000 ,估计这是编译器决定了)。

When an exception or interrupt occurs, the processor suspends normal execution and
starts loading instructions fromthe exception vector table (see Table 2.6). Each vector table
entry contains a form of branch instruction pointing to the start of a specific routine:

——当异常或者中断发生的时候,处理器挂起正常执行的程序并开始加载中断向量表,每个中断入口包含一个指向 specific routine(这个不知道怎么翻译)的分支指令。

■ Reset vector is the location of the first instruction executed by the processor when power
is applied. This instruction branches to the initialization code.

——复位向量是打开电源被处理器执行的第一条指令,这条指令branches to初始化代码
■ Undefined instruction vector is used when the processor cannot decode an instruction.

——未定义指令向量,被用在处理器无法解码指令的时候
■ Software interrupt vector is called when you execute a SWI instruction. The SWI
instruction is frequently used as themechanismto invoke an operating systemroutine.

——软件中断向量........软件中断指令常用在操作系统条用。
■ Prefetch abort vector occurs when the processor attempts to fetch an instruction froman
address without the correct access permissions. The actual abort occurs in the decode
stage.

——预取终止向量发生处理器试图取一个指令地址,且没有正确访问许可的时候,实际终止发生在解码阶段
■ Data abort vector is similar to a prefetch abort but is raised when an instruction attempts
to access data memory without the correct access permissions.

——数据终止向量类似预取终止,但是他发生在指令试图访问数据,且内存没有正确访问许可。
■ Interrupt request vector is used by external hardware to interrupt the normal execution
flow of the processor. It can only be raised if IRQs are not masked in the cpsr.

——中断申请向量被用在外部硬件中断正常执行的程序,它只能在IRQs 没有被cpsr屏蔽的情况下。

 ====================================================================================

总结:这个中断向量的查找是由硬件实现的,硬件指定PC跳到0xffff0000/0x00000000(具体看编译器),以前我总是从软件角度去学习,大错特错。


关键字:ARM异常  中断以  向量表

来源: eefocus 引用地址:http://www.eeworld.com.cn/mcu/article_2018060439576.html
本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

上一篇:ARM中断向量表与响应流程
下一篇:S3c2440支持中断源个数

关注eeworld公众号 快捷获取更多信息
关注eeworld公众号
快捷获取更多信息
关注eeworld服务号 享受更多官方福利
关注eeworld服务号
享受更多官方福利

推荐阅读

函数指针数组在ARM异常中断处理中的应用

介绍一种简洁、高效、灵活的ARM异常中断处理方法。       在ARM中,由于所有的中断都使用同一个异常中断入口地址,即0x00000018。因此需要在异常中断处理程序中根据相应的中断号调用对应的中断服务函数。        一般有两种处理方式:        1. 在汇编中保存现场,然后调用C语言编写的中断处理程序,任务处理完成之后,再返回到汇编中恢复现场,并返回到断点。其中C语言编写的中断处理程序,通过switch语句
发表于 2017-01-11 10:13:48

ARM异常的具体描述

FIQ(Fast Interrupt Request)FIQ异常是为了支持数据传输或者通道处理而设计的。在ARM状态下,系统有足够的私有寄存器,从而可以避免对寄存器保存的需求,并减小了系统上下文切换的开销。若将CPSR的F位置为1,则会禁止FIQ中断,若将CPSR的F位清零,处理器会在指令执行时检查FIQ的输入。注意只有在特权模式下才能改变F位的状态。可由外部通过对处理器上的nFIQ引脚输入低电平产生FIQ。不管是在ARM状态还是在Thumb状态下进入FIQ模式,FIQ处理程序均会执行以下指令从FIQ模式返回:SUBS PC,R14_fiq ,#4该指令将寄存器 R14_fiq 的值减去 4 后,复制到程序计数器 PC 中
发表于 2016-12-13 10:14:14

ARM异常向量表初始化

  域控制器失效   访问控制权限失效     因此当异常发生后,需要通过访问CP15来获知异常产生的具体原因和情况。 4. Pretetch Abort   对于ARM处理器来说,由于其内部使用了哈佛结构---独立的数据的指令总线.   因此,在数据/指令的读取过程中产生的异常也就很自然地可以区分开来   本质上而言,这些异常都是同属于存储访问失败产生的异常,因此这些异常都由MMU相关,在ARM手册中DataAbort和PrefetchAbort都   称为Memory abort。    
发表于 2016-07-25 14:04:31
ARM异常向量表初始化

ARM异常向量表中LDR指令、LDR伪指令的来龙去脉

1、问题引出 在ARM开发中,异常向量表(或者称为中断向量表)处在一个关键的位置,因为它控制了ARM芯片复位时的跳转地址,也即是调到哪里去执行启动代码。一般来说,异常向量表的形式如下   <p>Vector:         ; All default exception handlers (except reset) are         ; defined as weak symbol definitions.    
发表于 2016-07-13 16:28:07
ARM异常向量表中LDR指令、LDR伪指令的来龙去脉

对ARM异常(Exceptions)的理解

中断异常         ldr     pc, _fiq                       ;快速中断异常 从中我们可以看出,ARM支持7种异常。问题时发生了异常后ARM是如何响应的呢?第一个复位异常很好 理解,它放在0x0的位置,一上电就执行它,而且我们的程序总是从复位异常处理程序开始执行
发表于 2016-04-29 10:24:55

C51、STM32和S3C2440中断体系的比较

/* 名称:C51、STM32和S3C2440中断体系的比较 说明:对于这三个芯片的中断体系来说,就我目前了解的, 我说:差不多。这里说的差不多,是中断的本质上差不多,都是首先中断源提出申请(比如触发了外部中断,定时器中断等),然后经过中断源屏蔽寄存器,再然后中断优先级的比较,最后CPU相应中断。(我去,这好像又回到了计算机组成原理啊)。不同的是细节,C51作为低级一点的芯片,其中断少,中断能达到的功能也少,相对来说较为简单些(无论是设计还是具体使用)。而STM32和S3C2440来说,其提供的功能较多,设计起来和使用起来要复杂的多(使用的时候得配置好多好多寄存器)。目前总结的,差不多就是这些吧。*/
发表于 2018-07-21 14:40:54

小广播

何立民专栏

单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2018 EEWORLD.com.cn, Inc. All rights reserved