`
helloyesyes
  • 浏览: 1335235 次
  • 性别: Icon_minigender_2
  • 来自: 武汉
文章分类
社区版块
存档分类
最新评论

关于ARM核异常与中断处理机制研究

阅读更多

哈尔滨理工大学软件工程专业08-7李万鹏原创作品,转载请标明出处

http://blog.csdn.net/woshixingaaa/archive/2011/03/15/6249768.aspx

一.ARM处理器异常及其对应的模式

当一个异常发生时,ARM处理器总是切换到ARM状态(即非Thumb状态)。Thumb指令集没有包含进行异常处理时需要的一些指令,因此在异常中断时,还是要使用ARM指令。

每种异常都导致内核进入一种特定的模式。此外,可以通过修改cpsr,进入任何ARM处理器模式。用户和系统模式是仅有的可不通过相应异常进入的2中模式。

当一个异常导致模式的改变时,内核自动的:

l cpsr保存到相应异常模式下的spsr

l pc保存到相应模式下的lr

l 设置cpsr为相应异常模式

l 设置pc为相应异常处理程序的入口地址

二.向量表

异常发生时,ARM跳转地址组成的表。

三.异常优先级

复位异常是优先级最高的异常,一旦复位异常产生,总是会发生复位异常。注意:当一条不属于ARMThumb指令集的指令到达流水线的执行阶段时,若此时没有其它异常发生,就会产生未定义指令异常。ARM处理器会“询问”协处理器,看它能否将其作为一条协处理器指令来处理。由于协处理器在流水线之后,所以指令确认可以在内核的执行阶段进行。如果这条指令不属于任何一个协处理器,则会产生未定义指令异常。

四.中断

中断延时是指:从外部请求信号发出到取出对应的中断服务程序(ISR)的第一条指令,这期间的间隔时间。

五.中断源及其识别方法

S3C2440A60个中断源,IRQ有两种中断识别方法:向量中断和非向量中断。FIQ只有非向量中断。在IRQ各个中断源中的某一个中断源的中断请求被响应时,CPU转至0x18处自动加载一条转移指令转至相应中断源的固定中断向量处。IRQ各个中断源的向量地址是固定的,每个占用一个字单元。IRQ各个中断源若采用非向量中断,任意一个中断源发出中断请求,都认为发生了IRQ中断请求,并自动转入IRQ中断服务程序执行。IRQ中断服务程序主要功能是将软件设定的中断向量表中相应的中断源服务程序入口地址送给PC,并转其执行。在非向量中断模式下,一般在IRQ处放置一条转移指令:B IsrIRQ 。其中,IsrIRQ为所有IRQ中断服务程序的总入口地址,也是非向量中断模式的中断源判别及散转程序。

六.中断堆栈设计

在堆栈设计时,须确定2点:

l 位置

决定了在存储器映射中,堆栈从何处开始。大多数基于ARM系统设计的堆栈是采用向下递减式的,栈顶位于存储器的高端地址。

l 堆栈大小

依赖于处理程序的类型-嵌套的还是非嵌套的。一个嵌套中断处理程序需要更多的存储器空间,因为堆栈将随中断嵌套的深度而增加。

第一种方式A,说明了一个传统的堆栈安排,中断的堆栈位于代码段之下。第二种方式B,中断堆栈在用户堆栈之上,位于存储器的顶端。B优于A之处是,B在堆栈溢出时不会破坏向量表,因此系统在确认堆栈溢出后,还有机会纠正自己的错误。每一种处理器模式都要建立一个堆栈,这是在处理器每次复位时完成的。因为系统复位是从管理模式开始的,所以不用再切换到管理模式,而其他模式堆栈的建立要切换到相应模式。用于模式堆栈-通常是最后设置的,因为当处理器处于用户模式时,没有直接修改cpsr的方法。由于系统模式和用户模式共享寄存器,所以可以强制处理器进入系统模式来设置用户模式堆栈。

七.中断处理方法

1)非嵌套中断处理

最简单的中断处理是非嵌套的:只有当控制权回到被中断的任务或过程时,才允许再次相应中断。由于一个非嵌套的中断处理程序在一个时段内只能为一个中断处理程序服务,所以这种形式的中断处理程序不适合需要为多个不同优先级中断服务的复杂嵌入式系统。

2)嵌套中断处理

在处理程序完成当前中断的服务前重新允许中断,可以实现中断嵌套。嵌套的中断处理程序入口代码与简单的非嵌套中断处理程序类似。不同之处在于,在推出时,处理程序要测试被ISR更新过的一个标志。这个标志表明,是否需要做进一步的处理,如果不要求更多的处理,那么这个中断服务例程就完成了,处理程序也可以退出;如果需要进一步处理,处理程序可能要采取若干措施:重新允许中断,并/或执行一次上下文切换。重新允许中断包括把IRQ模式切换到SVC或系统模式。在IRQ模式下,不能简单的允许中断,因为这可能会导致链接寄存器r14_irq遭到破坏,特别是在执行完BL后即发生一次中断。执行上下文切换包括复位(清空)IRQ堆栈,因为当IRQ堆栈中还有数据的时,处理程序不会执行上下文切换。所有保存在IRQ堆栈的寄存器必须转移到任务堆栈,典型地是放在管理模式堆栈上。然后,其余的寄存器也必须被保存到任务堆栈。在那里,他们会被转移到堆栈中一个称为堆栈帧的保留存储块上。

如下恢复现场的指令:

LDMFD R13!,(R0R3PC^

这里,寄存器列表后(其中必须包括PC)的后面的“^”表示这是一条特殊形式的指令。在从存储器装入PC的同时,CPSR也得到恢复。

分享到:
评论

相关推荐

    ARM中异常中断处理

    ARM 体系中的异常中断机制是一种复杂的机制,它允许处理器在执行程序时,能够及时地响应和处理各种异常中断请求,从而确保系统的稳定性和安全性。下面我们将详细介绍 ARM 体系中的异常中断机制。 一、异常中断处理...

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

    以上便是ARM异常、中断和工作模式的联系,了解这些概念对于设计高性能的嵌入式应用至关重要。开发者需要深入理解这些机制,以便在编写中断服务程序和异常处理代码时,能够更加高效和准确地控制处理器的行为。

    ARM对异常中断的响应过程

    ARM异常中断的处理是一个非常复杂的过程,涉及到处理器状态的保存、中断向量的跳转、处理器状态的恢复以及流水线状态的管理等多个方面。处理器的设计使得大部分的异常处理过程是自动完成的,这减轻了开发人员的负担...

    ARM异常处理机制ARM异常处理机制

    ### ARM异常处理机制详解 #### 一、ARM异常处理机制概述 ARM处理器作为一种广泛应用的嵌入式系统核心,为了确保系统的稳定性和实时性,设计了一套完善的异常处理机制。异常处理是嵌入式系统中非常重要的一个方面,...

    基于ARM Linux的中断、异常的处理分析

    在ARM架构中,每个中断或异常向量都与一个特定的处理程序关联起来,这一处理程序的入口地址存储在一个特殊的表——中断描述符表(Interrupt Descriptor Table, IDT)中。在内核允许中断发生前,必须适当地初始化IDT...

    第7章 ARM异常中断处理及编程《从实践中学ARM体系结构与接口技术》

    在探讨ARM异常中断处理及编程的过程中,首先需要理解中断的基本概念。中断是处理器在执行程序过程中,遇到外部或内部的紧急事件需要处理时,暂时中止当前程序的执行,转而去处理这些紧急事件的过程。在日常生活中,...

    ARM的异常中断机制

    首先,要理解ARM异常中断机制的前提是先了解ARM处理器如何控制程序执行。在ARM处理器中有三种控制程序执行的情况: 1. 流水方式执行程序:在ARM处理器中,程序计数器(PC)指向下一条指令的地址,每次执行一条指令...

    ARM处理器异常处理步骤

    ARM处理器异常处理是指ARM微处理器对各种异常情况作出响应和处理的过程。异常指的是处理器在正常执行程序时遇到的特殊...对于开发者而言,深入理解ARM处理器的异常处理机制对于编写高效、稳定的ARM平台软件至关重要。

    ARM的中断机制

    ARM的中断机制设计得非常灵活且高效,不仅能够处理复杂的系统事件,还能保证系统的实时响应能力。在嵌入式系统、移动设备和服务器等应用场景中,ARM处理器的中断机制是实现高性能和低功耗的关键技术之一。通过对ARM...

    ARM 异常处理机制参考1

    ARM 异常处理机制是 ARM 处理器中的一种机制,当正常的程序流被暂时中断时,处理器就会进入异常模式。例如响应一个来自外设的中断。在处理异常之前,ARM 内核保存当前的处理器状态,这样当处理程序结束时可以恢复...

    第四章ARM存储与异常中断处理.pptx

    ARM存储与异常中断处理是嵌入式系统设计中的关键环节。ARM处理器的存储体系结构和异常中断管理对于优化程序执行效率和系统响应至关重要。下面将详细讲解这些知识点。 首先,ARM存储器组织包括多种数据类型和存储...

    ARM 异常处理机制参考

    ARM 处理器共有 7 种异常中断,每种异常都有自己固定的异常向量地址,并且在异常响应后,处理器会切换至相应的异常中断模式。 ARM 异常处理机制的主要流程包括: 1. 异常发生时处理器的动作:当 7 种异常中的任何...

    亚嵌教育内部培训资料 - ARM异常和中断处理

    ### ARM异常和中断处理知识点详解 #### 一、基本概念辨析:异常 vs 中断 在探讨ARM架构下的异常和中断之前,我们首先需要明确两者之间的区别与联系。 **异常**通常指的是ARM处理器的一种特殊运行模式,它由硬件...

    最通俗易懂的方式讲解ARM中断原理以及中断嵌套

    通过了解中断信号如何被处理器识别、处理,以及中断控制器如何管理多个中断源,读者可以更好地理解ARM架构下的中断机制,并为开发基于ARM的系统提供指导。此外,文章还简要提到了Linux操作系统中的中断处理方式,这...

    基于ARM的嵌入式Linux系统异常和中断的实现及优化

    综上所述,通过对ARM926EJ-S处理器的异常中断管理机制的研究与优化,不仅能够显著提高Linux操作系统在嵌入式平台上的性能表现,而且还能增强系统的稳定性和可靠性。这对于构建高效、稳定的嵌入式系统具有重要的理论...

    第7章ARM异常中断处理及编程.pptx

    第 7 章 ARM 异常中断处理及编程涵盖了 ARM 架构中关于异常中断的基本概念、处理机制以及实际应用。ARM 异常中断处理是确保系统在遇到异常情况时能够正常运行的关键机制,它涉及到中断的响应、现场保存、处理程序...

    arm linux中断处理过程分析

    在深入探讨ARM Linux中断处理过程之前,我们先简要回顾一下ARM处理器的中断机制。ARM处理器支持多种类型的中断,包括快速中断(Fast Interrupt Request,FIRQ)、外部中断(External Interrupt Request,IRQ)以及...

    ARM异常中断以及对ARM异常返回地址的分析

    总之,ARM异常中断及其返回地址的处理机制是ARM架构设计中一个关键的部分,它不仅确保了处理器在面对各种异常情况时的鲁棒性,也为开发人员提供了强大的工具来构建复杂且可靠的系统。通过深入理解这些机制,开发者...

Global site tag (gtag.js) - Google Analytics