ARM中断处理的研究

发布者:legend8最新更新时间:2018-02-21 来源: eefocus关键字:ARM  中断处理 手机看文章 扫描二维码
随时随地手机看文章

      在嵌入式系统中常用的RISC处理器是ARM核,它具有体积小、功耗低、成本低、性价比高的特点。然而,不管是哪种型号的ARM处理器,也无论该嵌入式系统中是否有操作系统,中断处理,特别是IRQ中断,始终是必须的,而中断处理的核心问题是上下文的保存。能否安全而又高效地保存上下文,将影响一个嵌入式系统的性能与稳定。笔者对ARM处理器的普通中断处理、任务切换中断处理、可重人中断处理和基于优先级的可重人性中断处理的上下文保存技术进行分析与总结。为保证理论的正确性,核心的程序代码都经过了实验的检测。

 

  1 系统中断处理简介

  ARM处理器的中断主要有两种:IRQ普通中断和FIQ快速中断。快速中断本质上与普通中断没有太大的差别,它们在处理机制上有许多相同的地方。IRQ中断是最频繁的也是最为影响系统性能的,所以对它的研究与处理也就最有价值。
 

  下面简要地介绍一下IRQ异常发生时ARM处理器的工作过程。在IRQ中断发生时,ARM处理器的硬件会自动执行以下工作:

  ①将被中断任务模式的CPSR值保存到IRQ模式中的SPSR寄存器中;

  ②将被中断任务模式的PC值保存到IRQ模式中的LR寄存器中;

  ③将模式自动切换到IRQ模式,并将CPSR中的bit7位置1禁止后继IRQ中断的发生;

  ④PC被赋予0xl8的地址值,程序将从0xl8片开始执行。结合图1,可以更好地理解ARM中断处理机制的工作过程。

  

IRQ中断处理寄存器保存示意图

 

  2 普通中断处理

  有些ARM嵌入式系统可能对中断的要求比较低,即发生中断后首先查询相应的中断源,然后进行中断服务,最后从中断服务程序中返回到被中断处继续运行程序。如何在这种简单应用中保证安全又高效地处理中断呢?“安全”就意味着中断发生时上下文被完好保存不被破坏,“高效”就是说保存尽可能少的寄存器(当然是建立在安全的基础上的)。由图1可知,在普通中断处理中,中断服务就可以在IRQ模式中运行。根据ATPCS的调用规则,在子程序调用中ARM编译器保存了R4~R11寄存器,因此就没有必要再次保存。那么剩下的寄存器就必须予以保存,防止从中断服务程序返回后被破坏。可以用汇编语言和C语言书写处理代码。

  首先假设初始化代码中已正确建立了IRQ堆栈。

  

程序

 

  <所有已使能中断的查询与服务>

  ;将同时发生的中断全部服务,以提高效率

  LDMFD SP!,{R0-R3,R12,R14} ;恢复上下文

  在上述保存上下文中没有必要保存SPSR。因在非嵌套的中断处理程序中,它不会被任何顺序的中断所破坏。

  如果用C语言来书写该处理程序,可以使用关键字一IRQ来说明,以告诉编译器实现如下的操作:

  ①保存.ATPCS规定的被破坏的寄存器;

  ②保存其他中断处理程序中用到的寄存器;

  ③同时将(LR-4)赋予程序计数器PC,实现中断程序的返回并且恢复CPSR寄存器的内容。

  普通中断处理的C语言程序可以按如下格式编写:

  

程序

 

  可见,无论是用C语言还是汇编语言来编写,它们的工作原理都是一样的。图2给出了普通中断处理过程中,ARM寄存器的保存示意图(虚线是压栈保存,实线是弹栈恢复)。图中与程序处理的步骤相对应,可以帮助理解处理器上下文的保存过程。

  

普通中断处理过程

3 任务切换


 

  有操作系统的嵌入式系统中,中断的发生要求保存全部寄存器的内容到任务的栈中,它不是基于安全的考虑是因为可能中断会导致任务的切换。任务切换发生时所有任务的寄存器的值都要保存到该任务的栈中。下个任务的上下文将从该任务栈中得以恢复到处理器的寄存器中。下面就本问题作出分析并给出实现的程序代码。从图1中断处理寄存器的保存可知,中断发生后任务的CPSR和PC两寄存器的值在IRQ模式的SPSR和LR中,所以不能简单地切换到任务运行的模式中,否则被中断任务返回时的CPSR和PC将不可见(因为它们保存在IRQ模式的专用寄存器中,在其他模式中无法操作)。此时,可以考虑设置一些变量区作为媒介,将其予以转存到任务运行模式的栈中去。

 

  下面假设任务切换是在SVC模式中运行的。结合上面的分析,可以有图3所示的保存任务切换的示意图(虚线是压栈保存,实线是弹栈恢复;LR_Frame和SPSR_Frame是变量区)。

  

保存任务切换的示意图

 

  结合图3任务切换中断处理中的步骤,可以用汇编语言写出相对应的中断处理程序:

  

程序

 

  

程序

 

  4 可重入性中断

  如果希望在处理中断时仍能响应其他中断请求以此来缩短中断延时,就必须设计可重人性中断。可重入性中断是处理多个中断的一种方法,但它也同时带来新的问题。在IRQ中断模式中,如果直接重新允许了IRQ中断,此时因为执行一条BL指令而将子程序返回的地址保存在LR_irq中,而在此间中断发生了。新来的中断会将其返回地址装入LR_irq中,此时旧中断子程序的返回地址必将被覆盖从而导致系统紊乱。此种情形是无法通过将LR_irq压栈来解决的,如程序语句:

  

程序

 

  但是仍不能排除在保存LR之前中断发生的可能性。要解决上述LR_irq被破坏的问题,就必须切换处理器的模式,常见的是切换到SVC处理模式。在SVC模式中,通过BL调用子程序时会将返回地址保存在LR_SVC之中。此时新中断发生(因为它会将返回地址保存到LR_irq而不是LR_SVC),不会破坏旧中断中子程序返回地址了。有了基于上述的原理分析再来编写可重入性中断的代码就思路清晰了。但是为了保证处理的高效性,尽可能地及早允许中断以缩短延时,在保存完LR_irq和SPSR_irq后,就马上切换到SVC模式中并重新允许中断,如图4所示(虚线是压栈保存,实线是弹栈恢复)。

  

可重入中断处理上下文保存示意图

 

  结合图4中的处理步骤,可以比较清晰地写出可重入中断处理的汇编语言程序:

  

程序


关键字:ARM  中断处理 引用地址:ARM中断处理的研究

上一篇:嵌入式系统U盘实时启动技术
下一篇:ARM+Linux嵌入式系统的BootLoader设计

推荐阅读最新更新时间:2024-03-16 15:55

Arm大陆出货10年增长百倍 CEO:看好物联网爆发式增长
Arm最近把过去的“ARM”改成“arm”,企业标志改版了,看起来更灵活弹性。因为5G与物联网(IoT),Arm持续投入研发,也将过去占据手机95%以上市场的实力,持续转移到新兴的物联网领域。尤其,面对竞争对手英特尔(Intel)在大陆加强布局,日前Arm也宣布在大陆设立合资公司,将让大陆有机会参与决定下一代芯片技术的架构、规格和标准。 Arm CEO Simon Segars近日接受大陆媒体专访时表示,被软银(SoftBank)收购后,Arm加大内部研发投入,加速物联网业务布局。目前物联网普及力道低于预期,仅完成约20%;同时物联网应用不只局限在智能家庭;Arm在大陆设立合资公司,即欲加快大陆市场布局。 Simon Se
[半导体设计/制造]
ARM 底层开发工具
现在的ARM基本上都比较强大,从ARM9开始就可以直接上操作系统,如Linux和WINCE。但某些情况下,会裸奔,即不用操作系统,把ARM当做超级MCU用。 要吧ARM当超级MCU用,需要如下开发工具: ADS:不支持ARM11,最高只支持ARM9,现在已淘汰。 Keil MDK-ARM:同RealView MDK是同一个东西。以前的版本,内核用的是Keil的,对ARM的支持不如ARM自家的ADS好,现在已经被ARM公司收购。ARM收购Keil后,编译器改用自家的Real View,成为RealView MDK。 RealView MDK:RealView Microcontroller Develop K
[单片机]
ARM-Linux驱动--ADC驱动(中断方式)
硬件平台:FL2440 内核版本:2.6.28 主机平台:Ubuntu 11.04 内核版本:2.6.39 原创作品,转载请标明出处:http://blog.csdn.net/yming0221/archive/2011/06/26/6568937.aspx 这个驱动写了好久,因为原来的Linux内核编译的时候将触摸屏驱动编译进内核了,而触摸屏驱动里的ADC中断在注册的时候类型选择的是 IRQF_SAMPLE_RANDOM,不是共享类型,所以,自己写的ADC驱动在每次open的时候,总提示ADC中断注册失败。 解决方案: 重新配置内核,选择触摸屏驱动以模块的形式编译,而不是直接编译进内核,这样Linux在启
[单片机]
<font color='red'>ARM</font>-Linux驱动--ADC驱动(中断方式)
ARM基础知识七
简介:ARM编译器支持的数据类型 ************************************************************* ARM编译器支持的数据类型 ************************************************************ 数据类型 长度(位) 对齐特性 Char 8 1(字节对齐) short 16 2(百字对齐) Int 32 4(字对齐) Long 32 4(字对齐) Longlong 64 4(字对齐) Float 32 4(字对齐) Double 64 4(字对齐) Long double 64 4
[单片机]
基于ARM处理器S3C2440和Linux系统的I2C触摸屏设计
0 引言 随着计算机相关技术的发展,ARM嵌入式系统受到越来越广泛的应用,与人们生活的结合也越来越紧密。触摸屏设备因其友善的人机交互性,操作方便灵活,输入速度快,被广泛的应用于这种嵌入式领域中。嵌入式Linux系统具有开发源代码、内核稳定、可裁减性等特点,吸引着众多商业公司和自由软件开发者的目光,成为嵌入式系统领域不可或缺的操作系统之一。触摸屏是一种输入设备,操作简单易学,可靠性高,不占额外的空间,是最常用的便携式系统的输入设备。特别是电阻式触摸屏,它结构简单,成本低,透光效果好,工作环境和外界完全隔离,不怕灰尘和水气,同时具有高解析度、高速传输反应、一次校正、稳定性高、不漂移等特点,因而被广泛用于工业控制领域。 1 电阻式触摸屏
[单片机]
基于<font color='red'>ARM</font>处理器S3C2440和Linux系统的I2C触摸屏设计
ARM协处理器指令
ARM 微处理器可支持多达 16 个协处理器,用于各种协处理操作,在程序执行的过程中,每个协处理器只执行针对自身的协处理指令,忽略 ARM 处理器和其他协处理器的指令。ARM 的协处理器指令主要用于 ARM 处理器初始化 ARM 协处理器的数据处理操作,以及在ARM 处理器的寄存器和协处理器的寄存器之间传送数据,和在 ARM 协处理器的寄存器和存储器之间传送数据。 ARM 协处理器指令包括以下 5 条: CDP 协处理器数操作指令 LDC 协处理器数据加载指令 STC 协处理器数据存储指令 MCR ARM 处理器寄存器到协处理器寄存器的数据传送指令 MRC 协处理器寄存器到ARM 处理器寄存器的数据传送指令 ......
[单片机]
arm开发经验!(适合初学者入门)
前一段时间做了arm的一些开发,主要是编写了arm的启动软件和移植了uCOS-II到arm7。我做事情喜欢深入简出,及从最简单,最原理的方面先做一个框架,然后在这个框架里面进行补充。我还是一个很喜欢和别人讨论的人,希望有人可以给我提出意见和建议。我的这个心得很初级,都是一些基本的东西。现在拿出来和大家分享,希望在我毕业之前能给大家留一些纪念。^_^ 由于这些东西发paper实在是没有价值,但是我感觉可以作为arm开发的入门。由于我的水平和经验有限,错误也是难免的。但是如果不拿出来和大家分享,就算有错误我也发现不了,是么?呵呵。我现试试发连载的第一篇,看看有多少价值,如果大家觉得有价值,我会继续连载的。 连载一: 前言 这
[单片机]
基于嵌入式系统arm2210开发板的移动机器人人机界面设计
  摘要: 移动机器人人机界面为移动机器人的运动控制提供直观的路径图形、运动速度和角度、障碍物信息等。通过arm2210的串口uart0接收中心处理器pc104的运动信息,利用东芝公司的液晶控制器t6963c驱动stn液晶屏yl240128a,以及zlg/gui软件包提供的基本绘图和菜单操作函数设计了基于嵌入式系统arm2210开发板的移动机器人人机界面,并利用arm2210的i2c器件zlg7290提供的i2c接口功能和键盘中断信号实现菜单选择,具有很强的实用性。   引言   嵌入式系统以其高性能、低功耗、低成本的优点,已经在很大程度上改变了人们的生活。如,mp3播放器、智能手机、数码相机产品等已经渗入人们生活的各个方面。
[工业控制]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

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

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved