ARM处理器中断处理的编程实现

发布者:糖果龙猫最新更新时间:2012-04-16 来源: 21ic 关键字:ARM处理器  中断处理  编程实现 手机看文章 扫描二维码
随时随地手机看文章

ARM处理器中断处理的编程实现arm编程特别是系统初始化代码的编写中通常需要实现中断的响应、解析跳转和返回等操作,以便支持上层应用程序的开发,而这往往是困扰初学者的一个难题。中断处理的编程实现需要深入了解arm内核和处理器本身的中断特征,从而设计一种快速简便的中断处理机制。需要说明的是,具体的上层高级语言编写的中断服务函数不在本文的讨论范围之内。

arm处理器异常中断处理概述

当异常中断发生时,系统执行完当前指令后,将跳转到相应的异常中断处理程序处执行。当异常中断处理程序执行完成后,程序返回到发生中断的指令的下一条指令处执行。在进入异常中断处理程序时,要保存被中断的程序的执行现场。从异常中断处理程序退出时,要恢复被中断的程序的执行现场。arm体系中通常在存储地址的低端固化了一个32字节的硬件中断向量表,用来指定各异常中断及其处理程序的对应关系。当一个异常出现以后,arm微处理器会执行以下几步操作:

保存处理器当前状态、中断屏蔽位以及各条件标志位;

设置当前程序状态寄存器cpsr中相应的位;

将寄存器lr_mode设置成返回地址;

将程序计数器(pc)值设置成该异常中断的中断向量地址,从而跳转到相应的异常中断处理程序处执行。

在接收到中断请求以后, arm处理器内核会自动执行以上四步,程序计数器pc总是跳转到相应的固定地址。从异常中断处理程序中返回包括下面两个基本操作:

恢复被屏蔽的程序的处理器状态;

返回到发生异常中断的指令的下一条指令处继续执行。

当异常中断发生时,程序计数器pc所指的位置对于各种不同的异常中断是不同的,同样,返回地址对于各种不同的异常中断也是不同的。例外的是,复位异常中断处理程序不需要返回,因为整个应用系统是从复位异常中断处理程序开始执行的。

支持中断跳转的解析程序

解析程序的概念和作用

如前所述,arm处理器响应中断的时候,总是从固定的地址开始的,而在高级语言环境下开发中断服务程序时,无法控制固定地址开始的跳转流程。为了使得上层应用程序与硬件中断跳转联系起来,需要编写一段中间的服务程序来进行连接。这样的服务程序常被称作中断解析程序。

每个异常中断对应一个4字节的空间,正好放置一条跳转指令或者向pc寄存器赋值的数据访问指令。理论上可以通过这两种指令直接使得程序跳转到对应的中断处理程序中去。但实际上由于函数地址值为未知和其它一些问题,并不这么做。这里给出一种常用的中断跳转流程:

ARM处理器中断处理的编程实现

图1中断跳转流程图

这个流程中的关键部分是中断向量表,为了让解析程序能找到向量表,应该将向量表的地址固定化(编程者自定义)。这样,整个跳转流程的所有程序地址都是固定的,当中断触发后,就可以自动运行。其中,只有向量表的内容是可变的,编程者只要在向量表中填入正确的目标地址值就可以了。这使得上层中断处理程序和底层硬件跳转有机地联系起来。

解析过程示例 以一次irq跳转为例,假定中断向量表定义在0x00400000开始的外部ram空间:

ARM处理器中断处理的编程实现

图2中实线表示的流程都用arm汇编语言编写,一般作为boot代码的一部分放在系统的底层模块中。填写向量表的操作可以在上层应用程序中方便地实现,比如在c语言中: ( int (0x00400018)) = (int) isr_irq;这样就将irq中断的服务程序入口地址(0x00300260)填写到中断向量表中的固定地址0x00400018开始的4字节空间了。[page]

如此一来,就可避免在应用程序中计算中断的跳转地址,并且可以很方便的选择不同的函数作为指定中断的服务程序。当然,在程序开发时要合理开辟好向量表,避免对向量表地址空间不必要的写操作。

解析程序的扩展

众所周知,在arm处理器中会包含很多中断源,通常会在arm内核外面扩展一个中断控制器来管理各种原因产生的中断。比如,三星公司的s3c4510b处理器中的irq/fiq类型的中断源可以有21个,s3c44b0x有26个。这时候中断处理的原理还是一样的,无非是向量表更长,并且当一个中断触发以后,需要在解析程序里查询中断控制器的状态来确定具体的中断源,再根据中断源来读取向量表中的对应地址内容。其处理流程可用图3表示。

ARM处理器中断处理的编程实现

图3中断解析的扩展

相比图2,图3中多了一级的跳转,也就是在第一次解析跳转到irq/fiq服务程序中后,再进行第二次的解析_中断源的识别。   向量中断的处理   一些处理器在设计外扩的中断控制器时提供了一种叫做“向量中断”的中断跳转机制。这与前文叙述的扩展解析跳转流程有所不同,它不需要软件来识别具体的中断源,也就是不需要添加图3中的irq/fiq服务程序,而完全由硬件自动跳转到对应的中断地址。其它跳转流程的原理都是一样的。这相当于扩展了arm内核的硬件中断向量表,减小了中断响应延时。以s3c44b0x处理器的外部中断0为例,需要在其对应的硬件固定跳转地址0x00000020处添加指令:ldr pc,=handlereint,使得程序跳转到其服务程序handlereint0处执行。

ARM处理器中断处理的编程实现

图4向量中断解析流程示例

结语

本文介绍的中断处理机制是嵌入式编程中常常采用的方法,其原理是通用的。当然,在实际开发中,需要根据系统处理器arm内核的中断特征和处理器自身的中断控制器特点具体细化流程图中的各个步骤和改写参考代码。 参考文献:

1.杜春雷.arm体系结构与编程.清华大学出版社,2003

2.三星公司s3c4510b、s3c44b0x处理器数据手册

关键字:ARM处理器  中断处理  编程实现 引用地址:ARM处理器中断处理的编程实现

上一篇:多核异构ARM架构实现智能触控用户界面
下一篇:基于ARM处理器的SMTP协议的嵌入式远程通讯模式实现

推荐阅读最新更新时间:2024-03-16 12:57

基于ARM内核SoC的FPGA 验证环境设计方法
     摘 要:针对片上系统(SoC) 开发周期较长和现场可编程门阵列(FPGA) 可重用的特点,设计了基于ARM7TDMI 处理器核的SoC 的FPGA 验证平台,介绍了怎样利用该平台进行软硬件协同设计、IP核验证、底层硬件驱动和实时操作系统设计验证。使用该平台通过软硬件协同设计,能够加快SoC 系统的开发。整个系统原理清晰,结构简单,扩展灵活、方便。   关键词:SoC;FPGA;软硬件协同设计;验证平台;ARM7TDMI    引 言   随着片上系统(SoC) 设计的复杂度和性能要求的不断提高, 软硬件协同设计(Hardware/ Software Co2de2sign) 贯穿于SoC 设计的始终。软硬件协同设计
[单片机]
基于ARM内核SoC的FPGA 验证环境设计方法
ARM处理器鼻祖长什么模样?用浏览器秀给你看
    今年是ARM处理器问世25周年,一个热衷6502单晶片的网站制作了第一代ARM处理器ARM1的模拟网页,让你用浏览器就可以看到,现在许多手机、平版、iPhone、iPad所用的ARM处理器鼻祖长什么样? 1983年,英国剑桥Acron电脑公司旗下一个团队,拜访过美国处理器设计后,决定仿效6502单晶片架构,花了18个月设计出了一款新的处理晶片,也就是第一个ARM处理器ARM1。 这颗处理器大约只有2万5千个电晶体,采用3,000奈米制程,远不如Intel今年刚推出采用14奈米的Skylate Core i7处理器拥有13.5亿个电晶体。但是,这颗处理器却是非常重要的里程碑,因为它是后来,任天堂、苹果、各式主
[手机便携]
一种可编程的全数字锁相环路的实现
摘要:介绍了一种基于FPGA可编程技术实现的用于无线通信实验系统的全数字锁相环路。详细叙述了其工作原理、工作性能、电路实现和仿真结果。 关键词:FPGA 全数字锁相环路 VHDL语言 锁相环路已在模拟和数字通信及无线电电子学等各个领域中得到了极为广泛的应用,特别是在数字通信的调制解调和位同步中常常要用到各种各样的锁相环。锁相就是利用输入信号与输出信号之间的相位误差自动调节输出相位使之与输入相位一致,或保持一个很小的相位差。最初的锁相环全部由模拟电路组成,随着大规模、超高速数字集成电路的发展及计算机的普遍应用,出现了全数字锁相环路。所谓全数字锁相环路,就是环路部件全部数字化,采用数字鉴相器(DPD)、数字环路滤波器(DLF)、
[半导体设计/制造]
ARM处理器的程序状态寄存器(CPSR,SPSR)访问指令
ARM 微处理器支持程序状态寄存器访问指令,用于在程序状态寄存器和通用寄存器之间传送 数据,程序状态寄存器访问指令包括以下两条: MRS 程序状态寄存器到通用寄存器的数据传送指令 MSR 通用寄存器到程序状态寄存器的数据传送指令 1、 MRS 指令 MRS 指令的格式为: MRS{条件} 通用寄存器,程序状态寄存器(CPSR 或SPSR) MRS 指令用于将程序状态寄存器的内容传送到通用寄存器中。该指令一般用在以下几种情况: - 当需要改变程序状态寄存器的内容时,可用MRS 将程序状态寄存器的内容读入通用寄存 器,修改后再写回程序状态寄存器。 - 当在异常处理或进程切换时,需要保存程序状态寄存器的值,可先用该指令读出程序状态
[单片机]
精密程控电流源的设计及应用
1 系统概述 程控电流源具有输出电流范围宽、准确度高、功率大等特点,是组成自动测试系统和校验系统的必需仪器,广泛用于工矿企业、科研国防等军工单位的计量仪表、自动化标定等设备中。本文介绍的精密程控电流源除上述特点外,还具备USB总线通信、温度测量和输出电流非线性温度补偿功能。 系统总体结构如图1所示,精密程控电流源由微控制器(MCU)单元,USB接口单元,温度测量单元,输出电流校准单元,信号输出单元及电源单元组成。MCU单元通过USB接口单元实现与上位机的通信,从上位机获得控制命令并返回相应的数据,同时解析上位机命令来控制信号输出信号,完成最终电流输出。温度测量单元和输出电流校准单元共同完成输出电流的非线性温度补偿。电源单元向其他
[测试测量]
基于ARM处理器S3C2440和Linux系统的I2C触摸屏
0 引言 随着计算机相关技术的发展,ARM嵌入式系统受到越来越广泛的应用,与人们生活的结合也越来越紧密。触摸屏设备因其友善的人机交互性,操作方便灵活,输入速度快,被广泛的应用于这种嵌入式领域中。嵌入式Linux系统具有开发源代码、内核稳定、可裁减性等特点,吸引着众多商业公司和自由软件开发者的目光,成为嵌入式系统领域不可或缺的操作系统之一。触摸屏是一种输入设备,操作简单易学,可靠性高,不占额外的空间,是最常用的便携式系统的输入设备。特别是电阻式触摸屏,它结构简单,成本低,透光效果好,工作环境和外界完全隔离,不怕灰尘和水气,同时具有高解析度、高速传输反应、一次校正、稳定性高、不漂移等特点,因而被广泛用于工业控制领域。 1 电阻式触摸屏
[单片机]
基于<font color='red'>ARM处理器</font>S3C2440和Linux系统的I2C触摸屏
针对FPGA实现安全的系统内编程功能
FPGA正越来越多地作为现代电子系统的核心部分。这有多个可能原因:FPGA的成本低、立即可用及精密性不断提高,但最重要的还是FPGA硬件可重新配置,因此能轻易配合系统规格随时改变的要求。 硬件可重编程是FPGA器件的“杀手锏”,其优点多不胜数。除了明显的优势在于几乎毋须额外的成本便能更改半导体的功能外 (这远较传统的ASIC器件优越),FPGA能够应对规格改变的能力、增加功能,或快速实时配置客户的设置,这意味着FPGA产品能延长应用寿命及提高盈利空间。 但有一个很重要的问题需要考虑:我们能在多大程度上安全地配置系统环境下的FPGA,即实现系统内可编程 (ISP),使系统设计人员获得最大的益处。我们当然希望能够
[嵌入式]
针对FPGA<font color='red'>实现</font>安全的系统内<font color='red'>编程</font>功能
利用串口与并口实现51单片机的在线编程
1 在线编程简介   51内核的单片机在线编程模式一般分为两大类。一类是使用JTAG协议的在线编程模式。这类模式一般由厂家提供在线编程工具,使用方便。使用这一类模式的单片机价格往往较高,使用的厂商也不多,故不在本文的讨论之列。另一类在线编程模式是使用一条特殊的指令,使单片机进入在线编程模式。在进入在线编程模式后,要自己控制对单片机的擦除写入逻辑。这一类模式又可细分为两种不同的模式:一是进入在线编程模式后,单片机只是提供一个接口,不再运行用户的程序,擦写逻辑全由上位机(PC)提供,如以下要讨论的MTV230就属于这种模式;另一类是进入在线编程模式以后,芯片会运行在某一区域的用户编写的程序,芯片的编程逻辑都由芯片中这段程序控制,上位
[单片机]
利用串口与并口<font color='red'>实现</font>51单片机的在线<font color='red'>编程</font>
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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