更多课程 选择中心

嵌入式培训
达内IT学院

400-996-5531

嵌入式分享|如何处理ARM中的系统异常和中断?

  • 发布:嵌入式培训
  • 来源:嵌入式ARM
  • 时间:2018-07-06 15:00

今天达内嵌入式培训要教大家的是如何处理ARM中的系统异常和中断,希望你学有所获!

关于异常处理,分为三部分:

1. ARM异常和模式:core处理异常时的操作,几种模式介绍。

2. Vector table:

3. 异常优先级

4. lr偏移:几种异常如何返回

异常和中断处理简介

在嵌入式系统中异常处理是核心之一。高效的处理能够极大的提升系统的性能。

ARM处理器一共有7种可以暂停指令的执行序列的异常。

主要分为三个部分:

1. Exception handling

2. Interrupts

3. Interrupt handling schemes

今天我们主要介绍第一部分

Exception Handling

1.ARM Processor Exceptions And Modes

任何一种中断模式都可以通过手动的修改cpsr的值来进入。但是User和System模式是仅有的2个不能由相应中断进入的模式,换句话说,我们必须要通过手动修改cpsr才能进入。

嵌入式分享|如何处理ARM中的系统异常和中断

当一个异常产生的时候,core会自动进行如下4步:

1. saves the cpsr to the spsr of the exception mode

2. saves the pc to the lr of the exception mode

3. sets the cpsr to the exception mode

4. sets the pc to the address of the exception handler

需要注意的是,当异常产生的时候,ARM处理器总是会切换到ARM状态。

2.Vector Table

嵌入式分享|如何处理ARM中的系统异常和中断

handler定位在相应内存位置中,如下图的IRQ,FIQ

0x00000018: 0xe59ffa38 IRQ ; ldr pc, [pc, #irq]

0x0000001c: 0xe59ffa38 FIQ ; ldr pc, [pc, #fiq]

3.Exception Priorities

嵌入式分享|如何处理ARM中的系统异常和中断

4.Link Register Offset

嵌入式分享|如何处理ARM中的系统异常和中断

如下三种从IRQ和FIQ异常处理返回的例子

例1:

handler

...

SUBS pc, r14, #4 ;pc = r14 -4

因为SUB后的S和pc作为目标寄存器,cpsr的值会自动从spsr中恢复出来

例2:

handler

SUB r14, r14, #4 ;r14 -= 4

...

<code>

...

MOVS pc, r14

r14 = r14 -4, pc = r14 , cpsr =spsr(因为S)

例3:

handler

SUB r14, r14, #4 ; r14 = r14 - 4

STMFD r13!, {r0-r3, r14} ;store context

...

LDMFD r13!, {r0-r3, r14}^ ;return

STMFD,LDMFD 分别提供了pop/push的功能。STMFD sp!, {r0-r3, r14}就是依次将r14, r3, r2, r1放入栈中。LDMFD r13!, {r0-r3, r14}^则依次反向取出。^ 这个符号,则强制cpsr从spsr中恢复出来。

恭喜你已经阅读完了了本文,本文分享的如何处理嵌入式ARM中的系统异常和中断情况,你学会了吗?还有不理解的地方?欢迎你来达内嵌入式培训机构进行咨询。

预约申请免费试听课

填写下面表单即可预约申请免费试听!怕钱不够?可就业挣钱后再付学费! 怕学不会?助教全程陪读,随时解惑!担心就业?一地学习,可全国推荐就业!

上一篇:嵌入式基础知识框架整理,送给想要自学嵌入式的你!
下一篇:嵌入式工程师必知:适用于全系列单片机的硬件设计原则

嵌入式工程师都知道的嵌入式C的高级用法

入门嵌入式,看不懂电路原理图怎么办?

易操作的嵌入式系统开发技巧有哪些?

嵌入式硬件电路设计中需要注意什么?

Copyright © 2023 Tedu.cn All Rights Reserved 京ICP备08000853号-56 京公网安备 11010802029508号 达内时代科技集团有限公司 版权所有

选择城市和中心
黑龙江省

吉林省

河北省

湖南省

贵州省

云南省

广西省

海南省