第9章 异常中断处理
第9章-Cortex-M3异常和中断

第九章Cortex-M3异常和中断9.1Cortex-M3异常91C t M39.2NVIC与中断控制929.1.1 异常类型异常。
CM3支持为所有能打断正常执行流的事件都称为CM3支持为数众多的系统异常和外部中断。
异常是另一种形式的中断,它是由内部fault引起的,或者内核的SysTick、SVCall等。
而中断是由随机的外部事件引发的。
件引发的编号为1~15的对应系统异常;编号为16~255的对应外部中断。
除了个别异常的优先级被定死外,其它异常的优先级都是可编程的。
可编程的当前运行的异常编号,是由特殊寄存器IPSR或NVIC的中断控制状态寄存器来给出的。
断控制状态寄存器来给出的异常表异常号异常类型优先级描述0N/A N/A没有异常在运行1复位-3 (最高)复位2NMI-2 不可屏蔽中断(外部NMI 输入)3硬件fault-1各种fault情况4内存管理fault可编程内存管理fault;MPU 访问非法地址5总线fault可编程总线fault,比如预取终止6用法fault可编程由于程序fault或尝试访问协处理器导致的异常7-10保留N/A—11SVCall可编程系统服务调用12调试监视器可编程调试监视器(续)13保留N/A—14PendSV可编程可挂起系统设备申请15SysTick可编程系统时钟定时器16外部中断#0可编程外部中断17外部中断#1可编程外部中断…………255外部中断#239可编程外部中断当一个被使能的异常发生时,如果它不能够被立即执行,它将被挂起(pending)。
9.1.2 优先级定义在CM3中优先级对于异常来说很关键的它决定一个 在CM3中,优先级对于异常来说很关键的,它决定个异常是否能被屏蔽,以及在未被屏蔽的情况下何时可以响应。
应优先级的数值越小,则优先级越高。
CM3支持中断嵌套,使得高优先级异常会抢占(preempt)低优先级异常。
3个系统异常:复位、NMI以及硬fault有固定的优先级,并且它们的优先级号是负数,从而高于所有其它异常。
ARM体系中异常中断种类及处理办法

ARM 体系中异常中断种类及处理办法在ARM 体系中,通常有以下3 种方式控制程序的执行流程:
•在正常程序执行过程中,每执行一条ARM 指令,程序计数器寄存器(PC)的值加4 个字节;每执行一条Thumb 指令,程序计数器寄存器(PC)的值加2 个字节。
整个过程是顺序执行。
•通过跳转指令,程序可以跳转到特定的地址标号处执行,或者跳转到特定的子程序处执行。
其中,B 指令用于执行跳转操作;BL 指令在执行跳转操作的同时,保存子程序的返回地址;BX 指令在执行跳转操作的同时,根据目标地址的最低位可以将程序状态切换到Thumb 状态;BLX 指令执行3 个操作:跳转到目标地址处执行,保存了子程序的返回地址,根据目标地址的最低位可以将程序状态切换到Thumb 状态。
•当异常中断发生时,系统执行完当前指令后,将跳转到相应的异常中断处理程序处执行。
在当异常中断处理程序执行完成后,程序返回到发生中断的指令的下一条指令处执行。
在进入异常中断处理程序时,要保存被中断的程序的执行现场,在从异常中断处理程序退出时,要恢复被中断的程序的执行现场。
ARM中异常中断处理概述

异常中断处理概述1.ARM中异常中断处理概述1)在正常程序执行过程中,每执行一条ARM指令,程序计数器寄存器PC的值加4个字节;每执行一条Thumb指令,程序计数器寄存器PC的值加两个字节.整个过程是顺序执行.2)通过跳转指令,程序可以跳转到特定的地址标号处执行,或者跳转到特定的子程序处执行;B指令用于执行跳转操作;BL指令在执行跳转操作的同时,保存子程序的返回地址;BX指令在执行跳转操作的同时,根据目标地址的最低位可以将程序状态切换到Thumb状态;BLX指令执行3个操作:跳转到目标地址处执行,保存子程序的返回地址(R15保存在R14中),根据目标地址的最低位可以将程序状态切换到Thumb状态.3)当异常中断发生时,系统执行完当前指令后,将跳转到相应的异常中断处理程序处执行.在当异常中断处理程序执行完成后,程序返回到发生中断的指令的下一条指令处执行.4)在进入异常中断处理程序时,要保存被中断的程序的执行现场,在从异常中断处理程序退出时,要恢复被中断的程序的执行现场.本章讨论ARM体系中的异常中断机制.2.ARM体系中异常中断种类.ARM体系中的异常中断如下表所示:3.中断向量表中指定了各异常中断及其处理程序的对应关系.它通常存放在存储地址的低端.在ARM体系中,异常中断向量表的大小为32字节.其中,每个异常中断占据4个字节大小,保留了4个字节空间.每个异常中断对应的中断向量表的4.通过这两种指令,程序将跳转到相应的异常中断处理程序处执行.当几个异常中断同时发生时,就必须按照一定的次序来处理这些异常中断.在ARM 中通过给各异常中断富裕一定的优先级来实现这种处理次序.当然有些异常中断是不坑能同时发生的,如指令预取中止异常中断和软件中断(SWI)异常中断是有同一条指令的执行触发的,他们是不可能同时发生的.处理器执行某个特定的异常中断的过程中,称为处理器处于特定的中断模式.各异常中断的中断向量地址以及中断的处理优先级如表2所示.4.异常中断使用的寄存器各异常中断对应着一定的处理器模式.应用程序通常运行在用户模式下.ARM中的处理器模式如表3所示.各种不同的处理器模式可能有对应于该处理器模式的物理寄存器组,如表4所示,其中,R13_svc表示特权模式下的R13寄存器,R13_abt表示中止模式下的R13寄存器,其余的各寄存器名称含义类推.表4 各处理器模式的物理寄存器组如果异常中断处理程序中使用它自己的物理寄存器之外的其它寄存器,异常中断处理程序必须保存和恢复这些寄存器.在表4中各物理寄存器的名称(如R13_svc等)在ARM汇编语言中并没有被预定义.用户使用这些寄存器时,必须使用伪操作RN来定义这些名称.如可以通过下面操作定义寄存器名称R13_svc:R13_svc RN R13一.进入和退出异常中断的过程1.ARM处理器对异常中断的相应过程ARM处理器对异常中断的响应过程如下:a.保存处理器当前状态,中断屏蔽位以及各条件标志位.只是通过将当前程序状态寄存器CPSR的内容保存到将要执行的异常总段对应的SPSR寄存器中实现的.各异常中断有自己的物理SPSR寄存器.b.设置当前程序CPSR中相应的位.包括设置CPSR中的位,使处理器进入相应的执行模式;设置CPSR中的位,禁止IRQ:当进入FIQ模式时,禁止FIQ中断.c.将寄存器LR_mode(R14)设置成返回地址,R14从R15中得到PC的备份.d.将程序计数器值PC设置成该异常中断的中断向量地址,从而跳转到相应的异常中断处理程序处执行.上述的处理器对异常中断的相应过程可以用如下的伪代码描述.e.响应复位异常中断.当处理器的复位引脚有效时,处理器中止当前指令.当处理器的复位引脚变成无效时,处理器开始执行下面的操作.R14_svc = UNPREDICTABLE valueSPSR_svc = UNPREDICTABLE valueCPSR[4:0] = 0b10011 //进入特权模式CPSR[5] = 0 //切换到ARM状态CPSR[6] = 1 //禁止FIQ异常中断CPSR[7] = 1 //禁止IRQ中断If high vectors configured thenPC = 0xffff0000ElsePC = 0x00000000f.响应未定义指令异常中断处理器相应未定义指令异常中断时的处理过程如下面的伪代码所示.R14_und = address of next instruction after the undefined instructionSPSR_und = CPSRCPSR[4:0] = 0b11011 //进入未定义指令异常中断模式CPSR[5] = 0 //切换到ARM状态CPSR[6] = 1 //禁止FIQ异常中断CPSR[7] = 1 //禁止IRQ中断If high vectors configured thenPC = 0xffff0004ElsePC = 0x00000004g.响应SWI异常中断处理器相应SWI异常中断时的处理过程如下面的伪代码所示.R14_svc = address of next instruction after the SWI instructionSPSR_svc = CPSRCPSR[4:0] = 0b10011 //进入特权模式CPSR[5] = 0 //切换到ARM状态CPSR[6] = 1 //禁止FIQ异常中断CPSR[7] = 1 //禁止IRQ中断If high vectors configured thenPC = 0xffff0008ElsePC = 0x00000008h.响应指令预取中止异常中断.处理器相应指令预取中止异常会总段时的处理过程如下面的伪代码所示.R14_abt = address of the aborted instruction + 4SPSR_abt = CPSRCPSR[4:0] = 0b10111 //进入指令预取中止模式CPSR[5] = 0 //切换到ARM状态CPSR[6] = 1 //禁止FIQ异常中断CPSR[7] = 1 //禁止IRQ中断If high vectors configured thenPC = 0xffff000cElsePC = 0x0000000ci.响应数据访问中止异常中断处理器相应数据访问中止异常中断时的处理过程如下面的伪代码所示.R14_abt = address of the aborted instruction + 8SPSR_abt = CPSRCPSR[4:0] = 0b10111 //进入数据访问中止模式CPSR[5] = 0 //切换到ARM状态CPSR[6] = 1 //禁止FIQ异常中断CPSR[7] = 1 //禁止IRQ中断If high vectors configured thenPC = 0xffff0010ElsePC = 0x00000010j.响应IRQ异常中断处理器相应IRQ异常总段时的处理过程如下面的伪代码所示.R14_irq = address of next instruction to be executed + 4SPSR_irq = CPSRCPSR[4:0] = 0b10010 //进入IRQ异常中断模式CPSR[5] = 0 //切换到ARM状态CPSR[6] = 0 //打开FIQ异常中断CPSR[7] = 1 //禁止IRQ中断If high vectors configured thenPC = 0xffff0018ElsePC = 0x00000018k.响应FIQ异常中断处理器相应FIQ异常中断时的处理过程如下面的伪代码所示.2.从异常中断处理程序种返回基本操作:1)恢复被中断的程序的处理器状态,即将SPSR_mode寄存器内容复制到当前程序状态寄存器CPSR中。
异常及中断处理讲解

ARM 异常中断处理概述1、中断的概念中断是一个过程,是 CPU 在执行当前程序的过程中因硬件或软件的原因插入了另一段程序运行的过程。
因硬件原因引起的中断过程的出现是不可预测的,即随机的,而软中断是事先安排的。
2、中断源的概念我们把可以引起中断的信号源称之为中断源。
3、中断优先级的概念ARM 处理器中有 7 种类型的异常,按优先级从高到低的排列如下:复位异常( Reset)、数据异常(Data Abort )、快速中断异常 ( FIQ)、外部中断异常 (IRQ)、预取异常 (PrefetchAbort )、软件中断 (SWI)和未定义指令异常( Undefined instruction )ARM体系异常种类面是 ARM 的 7 种异常当异常发生时,处理器会把 PC设置为一个特定的存储器地址。
这一地址放在被称为向量表( vector table )的特定地址范围内。
向量表的入口是一些跳转指令,跳转到专门处理某个异常或中断的子程序。
当异常产生时, ARM core:拷贝CPSR 到SPSR_<mode> 设置适当的CPSR 位:改变处理器状态进入ARM 状态改变处理器模式进入相应的异常模式设置中断禁止位禁止相应中断(如果需要)保存返回地址到LR_<mode> 设置PC 为相应的异常向量返回时, 异常处理需要:从SPSR_<mode>恢复CPSR从LR_<mode>恢复PCNote:这些操作只能在ARM 态执行.当异常发生时,分组寄存器 r14 和 SPSR用于保存处理器状态,操作伪指令如下。
R14_<exception_mode> = return link SPSR_<exception_mode> = CPSRCPSR[4∶ 0] = exception mode numberCPSR[5] = 0 /* 进入 ARM状态 */If <exception_mode> = = reset or FIQ thenCPSR[6] = 1 /* 屏蔽快速中断 FIQ*/CPSR[7] = 1 /* 屏蔽外部中断 IRQ*/PC = exception vector address 异常返回时, SPSR内容恢复到 CPSR,连接寄存器 r14 的内容恢复到程序计数器 PC。
简述异常与中断处理的一般流程

简述异常与中断处理的一般流程下载温馨提示:该文档是我店铺精心编制而成,希望大家下载以后,能够帮助大家解决实际的问题。
文档下载后可定制随意修改,请根据实际需要进行相应的调整和使用,谢谢!并且,本店铺为大家提供各种各样类型的实用资料,如教育随笔、日记赏析、句子摘抄、古诗大全、经典美文、话题作文、工作总结、词语解析、文案摘录、其他资料等等,如想了解不同资料格式和写法,敬请关注!Download tips: This document is carefully compiled by theeditor. I hope that after you download them,they can help yousolve practical problems. The document can be customized andmodified after downloading,please adjust and use it according toactual needs, thank you!In addition, our shop provides you with various types ofpractical materials,such as educational essays, diaryappreciation,sentence excerpts,ancient poems,classic articles,topic composition,work summary,word parsing,copy excerpts,other materials and so on,want to know different data formats andwriting methods,please pay attention!1. 异常或中断发生:当异常或中断事件发生时,硬件会自动将相关信息保存到特定的寄存器中,例如程序计数器(PC)、栈指针(SP)等。
CP1H操作手册。第九章异常与处理

9
异
I/O 总线异常发生地点 ※I/O 总线异常发生地点的显示例
常
→0.0.→0.0.→ CJ 系列单元第 1 台
及 其
→0.0.→0.1.→ CJ 系列单元第 2 台
处 理
8.0.→e.9.→ → → No.重复使用错误
重复单元 No./机号 No.
※重复单元 No./机号 No. 的显示例
→0.0.→0.1.→ CJ 系列 CPU 高功能单元 单元 No.1 →8.0.→0.1.→ CJ 系列高功能 I/O 单元 机号 No.1 8.0.→e.1.→ → → I/O 点数超过
I/O 点数超过详细信息
※I/O 超过点数详细信息的显示例
→4.0.→0.0.→ 超过扩展 I/O 单元通道数(CPM1A) →6.0.→0.0.→ 超过扩展 I/O 单元连接台数(CPM1A) →e.0.→0.0.→ 超过 CJ 系列单元连接台数
8.0.→e.0.→ I/O 设定异常
9-4
9-1 异常的种类及确认方法
● POWER LED 时亮时灭时 可考虑为电源电压的变动、电源线的断线、接触不良。请确认电源系统及布线。
理
:
::
4.2.→f.f.→ FAL 指令异常(FAL 编号 511)
0.0.→f.1.→ 闪存异常
0.0.→8.b.→ → → 中断任务异常
发生中断任务异常机号 No. ※发生中断任务异常机号 No.的显示例
→8.0.→0.0.→ CJ 系列高功能 I/O 单元 机号 No.0 →8.0.→0.f.→ CJ 系列高功能 I/O 单元 机号 No.15 →8.0.→5.f.→ CJ 系列高功能 I/O 单元 机号 No.95
A294~A299 CH - -
微处理器9CortexM3异常(中断)处理

Cortex-M3的异常(中断)处理
优先级分组
为了对具有大量中断的系统加强优先级控制,NVIC
支持优先级分组机制。您可以使用应用中断和复位控制寄 存器中的PRIGROUP区来将每个PRI_N中的值分为占先优
先级区和次优先级区。我们将占先优先级称为组优先级。 如果有多个挂起异常共用相同的组优先级,则需使用次优 先级区来决定同组中的异常的优先级,这就是同组内的次 优先级。组优先级和次优先级的结合就是通常所说的优先 级。如果两个挂起异常具有相同的组优先级,则挂起异常 的编号越低优先级越高。这与优先级机制是一致的。
Cortex-M3的异常(中断)处理
优先级分组
中断优先级区(PRI_N[7:0])
占先区
次优先区
PRI_N 7 6 5 4 3 2 1 0
注意: 修改PRIGROUP区的值可改变占先区和 次优先区的位数。
1. 占先优先级又称 为组优先级
2. 如果两个挂起异 常具有相同的组 优先级,则挂起 异常的编号越低 优先级越高。
Cortex-M3的异常(中断)处理
优先级分组
PRIGROU P[2:0]
二进制点 的位置
中断优先级区,PRI_N[7:0]
占先区 次优先 占先优先级
级区
的数目
次优先级 的数目
b000
bxxxxxxx.y [7:1] [0]
128
2
b001
bxxxxxx.yy [7:2] [1:0] 64
4
b010
Cortex-M3的异常(中断)处理
返回
异常基于优先级的动作
在没有挂起异常或没有比被压栈的ISR优先级更高 的挂起异常时,处理器执行出栈操作,并返回到被压 栈的ISR或线程模式。
异常及中断处理

一.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_<mode>设置适当的CPSR 位:改变处理器状态进入ARM 状态改变处理器模式进入相应的异常模式设置中断禁止位禁止相应中断(如果需要)保存返回地址到LR_<mode>设置PC 为相应的异常向量返回时, 异常处理需要:从SPSR_<mode>恢复CPSR从LR_<mode>恢复PCNote:这些操作只能在ARM 态执行.当异常发生时,分组寄存器r14和SPSR用于保存处理器状态,操作伪指令如下。
R14_<exception_mode> = return linkSPSR_<exception_mode> = CPSRCPSR[4∶0] = exception mode numberCPSR[5] = 0 /*进入ARM状态*/If <exception_mode> = = reset or FIQ thenCPSR[6] = 1 /*屏蔽快速中断FIQ*/CPSR[7] = 1 /*屏蔽外部中断IRQ*/PC = exception vector address异常返回时,SPSR内容恢复到CPSR,连接寄存器r14的内容恢复到程序计数器PC。
中断异常处理流程

计算机体系结构中,异常或者中断是处理系统中突发事件的一种机制,几乎所有的处理器都提供这种机制。
异常主要是从处理器被动接受的角度出发的一种描述,指意外操作引起的异常。
而中断则带有向处理器主动申请的意味。
但这两种情况具有一定的共性,都是请求处理器打断正常的程序执行流程,进入特定程序的一种机制。
若无特别说明,对“异常”和“中断”都不作严格的区分。
本文结合经过实际验证的代码对ARM9中断处理流程进行分析,并设计出基于S3C2410芯片的外部中断处理程序。
1.异常中断响应和返回系统运行时,异常可能会随时发生。
当一个异常出现以后,ARM微处理器会执行以下几步操作:1) 将下一条指令的地址存入相应连接寄存器LR,以便程序在处理异常返回时能从正确的位置重新开始执行。
2) 将CPSR复制到相应的SPSR中。
3) 根据异常类型,强制设置CPSR的运行模式位。
4) 强制PC从相关的异常向量地址取下一条指令执行,从而跳转到相应的异常处理程序处。
这些工作是由ARM 内核完成的,不需要用户程序参与。
异常处理完毕之后,ARM 微处理器会执行以下几步操作从异常返回:1) 将连接寄存器LR的值减去相应的偏移量后送到PC中。
2) 将SPSR复制回CPSR中。
3) 若在进入异常处理时设置了中断禁止位,要在此清除。
这些工作必须由用户在中断处理函数中实现。
为保证在ARM处理器发生异常时不至于处于未知状态,在应用程序的设计中,首先要进行异常处理。
采用的方式是在异常向量表中的特定位置放置一条跳转指令,跳转到异常处理程序。
当ARM处理器发生异常时,程序计数器PC会被强制设置为对应的异常向量,从而跳转到异常处理程序。
当异常处理完成以后,返回到主程序继续执行。
可以认为应用程序总是从复位异常处理程序开始执行的,因此复位异常处理程序不需要返回。
2.异常处理程序设计2.1 异常响应流程由于向量表的限制,只能有一条指令B完成32MBX围内的跳转,并不能保证所有的异常处理函数都位于32MBX围内。
arm处理器异常中断响应过程

arm处理器异常中断响应过程ARM处理器是一种广泛应用于移动设备、嵌入式系统和服务器等领域的处理器架构。
在运行过程中,处理器可能会遇到各种异常情况,如访问非法内存、除零错误等。
当这些异常发生时,ARM处理器需要做出相应的中断响应,以保证系统的稳定性和安全性。
ARM处理器异常中断响应的过程可以分为异常触发、异常处理和恢复执行三个阶段。
首先是异常触发阶段。
当处理器在执行指令时,发生了某种异常情况,例如访问了非法的内存地址,处理器会立即检测到异常,并将当前指令的状态保存起来。
同时,处理器会根据异常类型,确定异常向量的地址,将控制转移到异常向量所指向的地址处。
接下来是异常处理阶段。
当处理器进入异常向量所指向的地址时,会执行相应的异常处理程序。
这个程序通常是由操作系统或应用程序提供的,用于处理不同类型的异常。
在异常处理程序中,可以进行一系列的操作,例如保存现场、记录异常信息、处理异常原因等。
处理程序还可以根据需要选择继续执行或终止当前指令。
最后是恢复执行阶段。
在异常处理程序执行完毕后,处理器会根据异常返回地址,将控制权返回到引发异常的指令处,继续执行后续指令。
在返回之前,处理器可能会进行一些必要的恢复操作,如恢复现场、清除异常状态等。
这样,系统就可以继续正常运行,不受异常的影响。
需要注意的是,ARM处理器还提供了一些特殊的异常处理方式,如中断(Interrupt)和陷阱(Trap)。
中断是外部设备触发的异常,用于异步事件的处理,例如外部设备的输入输出请求。
陷阱是由程序主动触发的异常,用于实现系统调用和调试功能。
这些异常的触发和处理方式与一般异常略有不同,但整体的处理过程仍然符合前述的异常中断响应流程。
在ARM处理器中,异常中断响应是保证系统正常运行和异常处理的关键环节。
通过合理的异常处理程序和恢复机制,可以有效地应对各种异常情况,提高系统的可靠性和稳定性。
同时,开发人员也需要根据具体应用场景和需求,灵活地配置和调整异常处理方式,以满足不同的需求。
第9章 异常处理

finally用处:用于非内存的系统资源的释放,如 打开的文件、建立的网络连接等
Exception类
Exception类处于ng包中 构造函数
Exception() Exception(String 异常描述)
方法
String getMessage() 返回异常描述。 String toString() 返回异常对象详细信息。 void printStackTrace() 打印异常发生的路径,即引起异常的方法调用嵌套序 列。
利用throws向上转移检查异常
对于检查异常,也可以不用try…catch进行处理,在方法 的声明处用throws声明对应的检查异常,就可将它们转 给上层调用者去处理。 如果调用语句可能会抛出多种检查异常,throws关键字 后就要写上对应的多个检查异常类的名称,每个名称之 间用逗号(,)分开,如下所示: 返回类型 方法名(参数列表) throws 异常类1,异常类2,…{ 抛出检查异常的语句 } throws声明的异常类和抛出的异常实例之间遵循类型匹 配原则,可以用一个Exception类代替书写多个具体的异 常类
若try块中出现异常抛出,则控制转向下面catch 处理部分,然后执行后续语句。 若try块中没有异常抛出,则try块执行完,控制转 向后续语句。
catch语句
一个try语句可跟随多个catch语句,用以处理多种异常。 如下所示: try { . . . } catch( 异常类1 e1) { . . . } catch( 异常类2 e2) { . . . } 在try语句块执行时,如果发生异常,系统将构造对应的 异常类对象,在catch语句组中寻找和该对象类型相匹配 的catch语句,然后转向该语句块进行执行 匹配规则:
中断 技术

上一页 下一页 返回
第 3 章 综合布线系统设计与施工
• 3.1 综合布线系统设计基础 • 3.2 设计前的准备 • 3.3 综合布线系统设计原则与步骤 • 3.4 工作区子系统设计 • 3.5 水平干线子系统的设计 • 3.6 垂直干线子系统的设计
上一页 下一页 返回
3.1 综合布线系统设计基础
• 2. 综合布线系统信道的组成 • 综合布线系统铜缆信道应由最长 90 的水平缆线、最长 10 m 的跳
线和设备缆线及最多4 个连接器件组成。A、B、C、D、E 级永久链 路则由 90 m 的水平缆线及 3 个连接器件组成,F 级的永久链路仅包 括 90 m 的水平缆线和 2 个连接器件(不包括 CP 连接器件)。连接 方式如图 3−6 所示。 • 3. 光纤信道的分级 • 综合布线的光纤信道分为 OF−300、OF−500 和 OF−2000 三个等级 ,各等级光纤信道支持的应用长度不应小于 300 m、500 m 及 2 000 m。将光纤信道分为三个等级主要是为适应不同的工程应用。
下一页 返回
3.1 综合布线系统设计基础
• 3.1.1 综合布线系统结构 • 1. 综合布线系统基本构成 • 综合布线系统基本构成应符合图 3−3 所示的要求。 • 注意:配线子系统中可以设置集合点(CP),也可不设置集合点。 • 集合点用于完成开放式办公环境中水平布线与到工作区插座的线缆之
间的互连。它同时适用于光纤与双绞线,并可以提供在办公室家具变 动时取消连接与再连接的灵活性。模块化组件使配置变得更容易,插 入式安装使系统再配置既灵活又方便。
• (2)陷阱 • 陷阱是在引起异常的指令执行之后触发的一种情况。当控制转移到异
第9章异常中断处理

Undef handler outside 32MBytes branch instruction range
SWI Exception handler placed on applicable address boundary
IRQ handler within 32MBytes Branch instruction range
14
向量表指令
0xFFFFFFFF
0x30008000
0x30000000
> 32 Mbytes
0x2000000
< 4 Kbytes
0x1000 0xFFC
0x1C 0x18
Undef Handler SWI Handler
IRQ Handler 0x30008000 FIQ Handler B IRQ_handler
20
软中断
用户程序 (C/ASM)
SWI 0x01
向量表
SWI 处理程序 (ASM)
SWI 处理程序
(C)
用户程序调用 SWI
SWI 中断处理程序包含汇编部分和可选用 的 C 部分
AAsssseemmbbllee LLanguaaggee ooffAARRMM
(可选)
21
9.4.2 SWI异常中断调用
未定义指令中止模式 (und) 系统模式(sys)
描述
正常程序执行的模式
用于高速数据传输或通道处理
用于通用的中断处理
供操作系统使用的保护模式(复位或软中断)
当数据或指令预取终止时进入该模式,可用于 虚拟存储及存储保护。 当未定义的指令执行时进入该模式,可用于支 持通过软件仿真硬件的协处理器。
用于运行具有特权级的操作系统任务。
异常及中断处理讲解

ARM异常中断处理概述1、中断的概念中断是一个过程,是CPU在执行当前程序的过程中因硬件或软件的原因插入了另一段程序运行的过程。
因硬件原因引起的中断过程的出现是不可预测的,即随机的,而软中断是事先安排的。
2、中断源的概念我们把可以引起中断的信号源称之为中断源。
3、中断优先级的概念ARM处理器中有7种类型的异常,按优先级从高到低的排列如下:复位异常(Reset)、数据异常(Data Abort )、快速中断异常(FIQ)、外部中断异常(IRQ)、预取异常(PrefetchAbort )、软件中断(SWI)和未定义指令异常(Undefined instruction )ARM体系异常种类当异常发生时,处理器会把PC设置为一个特定的存储器地址。
这一地址放在被称为向量表(vector table )的特定地址范围内。
向量表的入口是一些跳转指令,跳转到专门处理某个异常或中断的子程序。
当异常产生时,ARM core:拷贝CPSR 至U SPSR_vmode>设置适当的CPSR位:改变处理器状态进入ARM状态改变处理器模式进入相应的异常模式设置中断禁止位禁止相应中断(如果需要)保存返回地址到LR_vmode>设置PC为相应的异常向量返回时,异常处理需要:从SPSR_vmode:恢复CPSR从LR_vmode>恢复PCNote:这些操作只能在ARM态执行.当异常发生时,分组寄存器r14和SPSR用于保存处理器状态,操作伪指令如下。
R14_<excepti on _mode> = retur n linkSPSR_<exception_mode> = CPSRCPSR[4: 0] = exception mode numberCPSR[5] = 0 /* 进入ARM 状态*/If <excepti on _mode> = = reset or FIQ the nCPSR[6] = 1 /*屏蔽快速中断FIQ*/CPSR[7] = 1 /*屏蔽外部中断IRQ*/PC = excepti on vector address异常返回时,SPSF内容恢复到CPSR 连接寄存器r14的内容恢复到程序计数器PCo注:cortex-A8系统中支持通过设置CP15的c12寄存器将异常向量表的首地址设置在任意地址。
中断异常处理流程

计算机体系结构中,异常或者中断是处理系统中突发事件的一种机制,几乎所有的处理器都提供这种机制。
异常主要是从处理器被动接受的角度出发的一种描述,指意外操作引起的异常。
而中断则带有向处理器主动申请的意味。
但这两种情况具有一定的共性,都是请求处理器打断正常的程序执行流程,进入特定程序的一种机制。
若无特别说明,对“异常”和“中断”都不作严格的区分。
本文结合经过实际验证的代码对ARM9中断处理流程进行分析,并设计出基于S3C2410芯片的外部中断处理程序。
1.异常中断响应和返回系统运行时,异常可能会随时发生。
当一个异常出现以后,ARM微处理器会执行以下几步操作:1) 将下一条指令的地址存入相应连接寄存器LR,以便程序在处理异常返回时能从正确的位置重新开始执行。
2) 将CPSR复制到相应的SPSR中。
3) 根据异常类型,强制设置CPSR的运行模式位。
4) 强制PC从相关的异常向量地址取下一条指令执行,从而跳转到相应的异常处理程序处。
这些工作是由ARM 内核完成的,不需要用户程序参与。
异常处理完毕之后,ARM 微处理器会执行以下几步操作从异常返回:1) 将连接寄存器LR的值减去相应的偏移量后送到PC中。
2) 将SPSR复制回CPSR中。
3) 若在进入异常处理时设置了中断禁止位,要在此清除。
这些工作必须由用户在中断处理函数中实现。
为保证在ARM处理器发生异常时不至于处于未知状态,在应用程序的设计中,首先要进行异常处理。
采用的方式是在异常向量表中的特定位置放置一条跳转指令,跳转到异常处理程序。
当ARM处理器发生异常时,程序计数器PC会被强制设置为对应的异常向量,从而跳转到异常处理程序。
当异常处理完成以后,返回到主程序继续执行。
可以认为应用程序总是从复位异常处理程序开始执行的,因此复位异常处理程序不需要返回。
2.异常处理程序设计2.1 异常响应流程由于向量表的限制,只能有一条指令B完成32MBX围内的跳转,并不能保证所有的异常处理函数都位于32MBX围内。
第9章 异常差错控制

第9章违例差错控制Java的基本原理就是“形式错误的代码不会运行”。
与C++类似,捕获错误最理想的是在编译期间,最好在试图运行程序以前。
然而,并非所有错误都能在编译期间侦测到。
有些问题必须在运行期间解决,让错误的缔结者通过一些手续向接收者传递一些适当的信息,使其知道该如何正确地处理遇到的问题。
在C++和其他早期语言中,可通过几种手续来达到这个目的。
而且它们通常是作为一种规定建立起来的,而非作为程序设计语言的一部分。
典型地,我们需要返回一个值或设置一个标志(位),接收者会检查这些值或标志,判断具体发生了什么事情。
然而,随着时间的流逝,终于发现这种做法会助长那些使用一个库的程序员的麻痹情绪。
他们往往会这样想:“是的,错误可能会在其他人的代码中出现,但不会在我的代码中”。
这样的后果便是他们一般不检查是否出现了错误(有时出错条件确实显得太愚蠢,不值得检验;注释①)。
另一方面,若每次调用一个方法时都进行全面、细致的错误检查,那么代码的可读性也可能大幅度降低。
由于程序员可能仍然在用这些语言维护自己的系统,所以他们应该对此有着深刻的体会:若按这种方式控制错误,那么在创建大型、健壮、易于维护的程序时,肯定会遇到不小的阻挠。
①:C程序员研究一下printf()的返回值便知端详。
解决的方法是在错误控制中排除所有偶然性,强制格式的正确。
这种方法实际已有很长的历史,因为早在60年代便在操作系统里采用了“违例控制”手段;甚至可以追溯到BASIC语言的on error goto语句。
但C++的违例控制建立在Ada的基础上,而Java又主要建立在C++的基础上(尽管它看起来更象Object Pascal)。
“违例”(Exception)这个词表达的是一种“例外”情况,亦即正常情况之外的一种“异常”。
在问题发生的时候,我们可能不知具体该如何解决,但肯定知道已不能不顾一切地继续下去。
此时,必须坚决地停下来,并由某人、某地指出发生了什么事情,以及该采取何种对策。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
0x14
0x18 0x1c
保留
外部中断请求(IRQ) 快速中断请求(FIQ)
未使用
外部中断(IRQ)模式 快速中断(FIQ)模式
未使用
4 3
*注:1最高;6最低
Assemble Language of ARM 5
9.1.3 异常中断使用的寄存器
各异常中断对应着一定的处理器模式。 应用程序通常运行在用户模式下。 各种不同的处理器模式对应于该处理器模式的 物理寄存器组。
参见教材P.271的代码
Assemble Language of ARM 18
2. 地址0x0处为RAM的情况
只能使用数据读取指令LDR直接向程序计数器 PC中赋值; 而且必须将中断向量表从ROM中复制到RAM的地 址0x0开始处的存储空间中。
Assemble Language of ARM
(C)
(可选)
用户程序调用 SWI SWI 中断处理程序包含汇编部分和可选 用的 C 部分
Assemble Language of ARM 21
9.4.2 SWI异常中断调用
执行SWI指令后,系统将会把CPSR寄存器的内容保 存到寄存器SPSR_svc中,将返回地址保存到 LR_svc中。
SWI 调用
汇编中, SWI 调用使用“SWI 中断号”实现, e.g:
SWI 0x24
小心在汇编中如果SWI 调用时处于Supervisor模式将会冲掉LR_svc.
例如:在SWI处理程序中的二级调用 解决方法: 在SWI调用之前对LR_svc 压栈保护
C 中, 使用关键词 “__swi” 来定义一个软中断函数.
0x30000000 > 32
SWI Handler
Mbytes
0x2000000
IRQ Handler
0x1000
< 4 Kbytes
0xFFC
0x30008000
0x1C 0x18
FIQ Handler B IRQ_handler
0x8 0x4 0x0
MOV PC, #0x30000000 LDR PC, [PC, #+0xFF0] Assemble Language of ARM 15
从SWI 和 Undef异常返回 MOVS pc,lr
从FIQ, IRQ 和 预取异常(Prefect Abort) 返回 SUBS pc,lr,#4
从数据异常( Data Abort)返回 SUBS pc,lr,#8 如果 LR之前被压栈的话使用LDM “ ^” LDMFD sp!,{pc}^
16
9.3 在应用程序中安装异常中断处理程序 将异常中断处理程序注册到异常中断向量表 中有两种办法:
使用跳转指令 使用数据读取指令LDR
Assemble Language of ARM
17
1. 地址0x0处为ROM的情况
使用数据读取指令LDR直接向程序计数器PC中 赋值; 使用跳转指令直接跳转到异常中断处理器程序
SUBS PC,R14_fiq ,#4 或 MOV PC , R14_svc
复位异常中断处理程序不需要返回,整个应用系统是 从复位异常中断处理程序开始执行的。
Assemble Language of ARM
13
异常返回指令
异常返回: 使用一数据处理指令:
相应的指令取决于什么样的异常
B指令 BL指令 BLX指令,BX指令 当异常中断发生时,系统执行完当前指令后,将跳转到相 应的异常中断处理程序处执行。
Assemble Language of ARM
2
9.1.1 ARM体系中异常中断种类
异常中断名称 复位 未定义指令 软件中断 (SWI) 指令预取中止 数据访问中止 外部中断请求 (IRQ ) 快速中断请求 ( FIQ ) 含义 当处理器的复位电平有效时,产生复位异常,程序跳转到复位异常处理程序处执行。 当ARM处理器或协处理器遇到不能处理的指令时,产生未定义指令异常。可使用该异常机 制进行软件仿真。 该异常由执行SWI指令产生,可用于用户模式下的程序调用特权操作指令。可使用该异常 机制实现系统功能调用。 若处理器预取指令的地址不存在,或该地址不允许当前指令访问,存储器会向处理器发出 中止信号,但当预取的指令被执行时,才会产生指令预取中止异常。 若处理器数据访问指令的地址不存在,或该地址不允许当前指令访问时,产生数据中止异 常。 当处理器的外部中断请求引脚有效,且CPSR中的I位为0时,产生IRQ异常。系统的外设 可通过该异常请求中断服务。 当处理器的快速中断请求引脚有效,且CPSR中的F位为0时,产生FIQ异常。
Assemble Language of ARM
4
各异常中断的中断向量地址及其异常中断处理优先级表
中断向量地址 0x0 0x4 0x8 0x0c 0x10 复位 未定义的指令 软件中断(SWI) 指令预取中止 数据访问中止 异常中断类型 异常中断模式 特权模式(SVC) 未定义指令中止模式(Undef) 特权模式(SVC) 中止模式 中止模式 优先级* 1 6 6 5 2
Assemble Language of ARM
3
9.1.2 异常中断向量表及异常中断优先级
中断向量表指定了各异常中断及其处理程序的对应 关系,通常放在内存的低地址端。 在ARM体系中,异常中断向量表的大小为32字节, 其中每个异常中断占据4个字节,保留4个字节。 每个异常中断对应的中断向量表中的4个字节空间 中存放一条跳转指令或者一条向PC寄存器中赋值 的数据访问指令。
0x1C 0x18
FIQ IRQ
0x14
0x10 0x0C 0x08 0x04 0x00
保存返回地址到 LR_<mode> 设置 PC 位相应的异常向量
(Reserved) Data Abort
Prefetch Abort
Software Interrupt Undefined Instruction
7
Assemble Language of ARM
8
ARM中的处理器模式
处理器模式 描述
用户模式(usr) 快速中断模式(fiq) 外部中断模式(irq) 特权模式(svc) 中止模式(abt) 未定义指令中止模式 (und)
系统模式(sys)
正常程序执行的模式 用于高速数据传输或通道处理 用于通用的中断处理 供操作系统使用的保护模式(复位或软中断) 当数据或指令预取终止时进入该模式,可用于 虚拟存储及存储保护。 当未定义的指令执行时进入该模式,可用于支 持通过软件仿真硬件的协处理器。
Assemble Language of ARM
11
各种中断响应的伪代码参见教材P.265-268
Assemble Language of ARM
12
9.2.2 从异常中断处理程序中返回 从异常中断处理程序中返回包括以下两个基本操作:
1、恢复被中断的程序的处理器状态,即将SPSR_mode寄 存器内容复制到当前程序状态寄存器CPSR中。 2、返回到发生异常中断的指令的下一条指令执行,即将 lr_mode寄存器的内容复制到程序计数器PC中。
返回时, 异常处理需要:
从 SPSR_<mode>恢复CPSR 从LR_<mode>恢复PC Note:这些操作只能在 ARM 态执行.
Reset
Vector Table
Vector table can be at 0xFFFF0000 on ARM720T and on ARM9/10 family devices
ARM or Thumb?
FIQ IRQ
ARM Code
Thumb / ARM 混合应用程序
(Reserved) Data Abort Prefetch Abort
Software Interrupt Undefined Instruction
Reset
ARM Code
Thumb Code
Assemble Language of ARM
异常处理程序必须确保其他的寄存器在退出前恢复到原来的状态 这可以通过将任何正在使用的寄存器的内容保存在堆栈中,并在返 回前恢复来实现 任何所需寄存器的初始化要由应用程序的起始代码来完成,参阅: “Embedded Software Development”
Assemble Language oemble Language of ARM 9
2.9 进入和退出异常中断的过程
当异常产生时, ARM core:
拷贝 CPSR 到 SPSR_<mode> 设置适当的 CPSR 位:
改变处理器状态进入 ARM 状态 改变处理器模式进入相应的异常模式 设置中断禁止位禁止相应中断 (如果需要)
19
9.4 SWI异常中断处理程序
通过SWI异常中断,用户模式的应用程序可以调用 系统模式下的代码。 在SWI指令中包括一个24位的立即数,指示了用 户请求的特定的SWI功能。
Assemble Language of ARM
20
软中断
用户程序 (C/ASM)
向量表 SWI 处理程序 (ASM) SWI 0x01 SWI 处理程序
第9章 异常中断处理
Assemble Language of ARM
1
9.1 ARM异常中断处理概述
控制程序的执行流程有3种方式: 正常情况下,程序每执行一条指令,程序计数器寄存器pc 将增加4或2字节;
通过跳转指令,程序可以跳转到特定的地址标号处执行, 或者跳转到特定的子程序处执行;
10
Assemble Language of ARM