ARM的SWI异常中断处理程序设计

发布者:daasddla最新更新时间:2016-06-17 来源: eefocus关键字:ARM  SWI  异常中断处理 手机看文章 扫描二维码
随时随地手机看文章
本节主要介绍编写SWI处理程序时需要注意的几个问题,包括判断SWI中断号,使用汇编语言编写SWI异常处理函数,使用C语言编写SWI异常处理函数,在特权模式下使用SWI异常中断处理,从应用程序中调用SWI。

1.判断SWI中断号

当发生SWI异常,进入异常处理程序时,异常处理程序必须提取SWI中断号,从而得到用户请求的特定SWI功能。

在SWI指令的编码格式中,后24位称为指令的“comment field”。该域保存的24位数,即为SWI指令的中断号,如图7-4所示。

ARM的SWI异常中断处理程序设计

 

第一级的SWI处理函数通过LR寄存器内容得到SWI指令地址,并从存储器中得到SWI指令编码。通常这些工作通过汇编语言、内嵌汇编来完成。下面的例子显示了提取中断向量号的标准过程。

.SWI_Handler:
STMFD sp!,{r0-r12,lr} ;保存寄存器
LDR r0,[lr,#-4]   ;计算SWI指令地址
BIC r0,r0,#0xff000000 ;提取指令编码的后24位
;
; 提取出的中断号放r0寄存器,函数返回
;
LDMFD sp!, {r0-r12,pc}^ ;恢复寄存器

在这个例子中,使用LR-4得到SWI指令的地址,再通过“BIC r0, r0, #0xff000000”指令提取SWI指令中断号。

2.使用C语言编写SWI异常处理函数

虽然第一级SWI处理函数(完成中断向量号的提取)必须用汇编语言完成,但第二级中断处理函数(根据提取的中断向量号,跳转到具体处理函数)却可以使用C语言来完成。

因为第一级的中断处理函数已经将中断号提取到寄存器r0中,所以根据AAPCS函数调用规则,可以直接使用BL指令跳转到C语言函数,而且中断向量号作为第一个参数被传递到C函数。例如,汇编中使用了“BL  C_SWI_Handler”跳转到C语言的第二级处理函数,而第二级的C语言函数示例如下。

void C_SWI_handler (unsigned number)
{
    switch (number)
     {
      case 0 : /* SWI number 0 code */
      break;
      case 1 : /* SWI number 1 code */
      break;
      ...
      default : /* Unknown SWI - report error */
     }
}

另外,如果需要传递的参数多于1个,那么可以使用堆栈,将堆栈指针作为函数的参数传递给C类型的二级中断处理程序,就可以实现在两级中断之间传递多个参数。

例如:

MOV r1, sp   ;将传递的第二个参数(堆栈指针)放到r1中
BL C_SWI_Handler ;调用C函数

相应的C函数的入口变为:

void C_SWI_handler(unsigned number, unsigned *reg)

同时,C函数也可以通过堆栈返回操作的结果。

3.从应用程序中调用SWI

可从汇编语言或 C/C++ 中调用 SWI。

从汇编语言程序中调用SWI,只要遵循AAPCS标准即可。调用前,设定所有必需的值并发出相关的 SWI。例如:

MOV r0, #65       ; 将软中断的子功能号放到r0中
SWI 0x0

注意:

SWI指令和其他所有ARM指令一样,可以被条件执行。

关键字:ARM  SWI  异常中断处理 引用地址:ARM的SWI异常中断处理程序设计

上一篇:ARM处理器架构异常/中断处理
下一篇:ARM处理器架构处理器的工作状态

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

ARM裸板】按键外部中断过程及示例
1.初始化 设置中断源(让它能发出中断信号) 设置中断控制器(让它能发出中断信号给CPU) 设置CPU总开关(CPSR有I位,设置总开关,使能中断) 处理时要分辨中断源 处理完要清中断 1.1 中断源 设置按键为中断源引脚 配置引脚为外部中断模式 配置中断为下降沿触发 配置外部中断MASK使能 //初始化外部中断,设置按键为中断源 void key_eint_init(void) { /* 引脚:GPF0、2 GPG3、11 */ /* 中断:EINT0、2 EINT11、19*/ GPFCON &= ~((3 0) | (3 4)); //清零 GPFCON |= ((2 4) | (2 0)); //设置 ,配置
[单片机]
【<font color='red'>ARM</font>裸板】按键外部中断过程及示例
ARM优化之函数的形参数量
ARM 的参数传递遵循 ATPCS 的规范,子程序间通过寄存器 R0-R3 来传递参数,返回值也通过 R0 来返回。这就造成一个问题,当构造超过 4 个参数的函数时,如何实现。 翻阅了其他资料以及下面的代码比对表明,多出来的参数传递的时候,需要使用栈,而栈需要使用额外的指令以及对慢速存储单元的读写,所以不超过 4 个参数的函数是很有利于程序的优化。 测试代码如下: 第一段为采用4个参数的函数: view plain copy to clipboard print ? 01.int Test( void ) 02.{ 03. return SubCode (1,2,3,4); 04.} 05.
[单片机]
苹果靠iPad来定义PC未来?微软第一个不同意
至少到目前为止,只有 苹果 有再一次改变 PC 产业的能力,一起来看莫博士是怎么说的。    每一次 iPhone 更新迎来一代又一代更强的A处理器时,总会有人提出苹果也应该自己为 Mac 开发处理器,不应该被英特尔牵着鼻子走。实际上,每隔一段时间我们就会看到  ARM  版 Mac 即将发布的消息,有时候是分析报告,有时候则是业界人士的评论。其实在 Mac 发展史上,苹果已经历过几次更换处理器平台的事情。 第一次是 1994 年 3 月苹果 Mac 使用的处理器从 Motorola 680×0 系列变成新的 PowerPC 处理器架构;第二次是 PowerPC 换成英特尔芯片,苹果在 2005 年宣布了他们这个计划,并从 20
[嵌入式]
Arm还是RISC-V?这里有鱼和熊掌皆得的方案
“Arm 还是 RISC-V?为什么不两者兼而有之?” ARIES Embedded给出了鱼和熊掌皆得的答案。日前,公司推出了“MSRZG2UL”和“MSRZFive”兼容的系统级封装 (SIP),分别采用基于瑞萨电子的RZ/G2UL Arm Cortex-A55/Cortex-M33 和 RZ/Five AX45MP RISC-V 微处理器,为工业控制器、物联网设备和具有基本 GUI 的嵌入式系统提供处理模块。 两种模块均采用OSM S 尺寸 (30x30mm)、512MB 至 4GB 的 DDR4 RAM、4GB eMMC NAND 闪存、包括千兆以太网和 CAN-FD 在内的各种接口,并提供商业 (-0°C 至 +7
[嵌入式]
<font color='red'>Arm</font>还是RISC-V?这里有鱼和熊掌皆得的方案
ARM基础知识连载之四
ARM中异常中断的种类 **复位(RESET)** 当处理器复位引脚有效时,系统产生复位异常中断,程序跳转到复位异常中断处理程序处执行。复位异常中断通常用在下面几种情况下:系统加电时;系统复位时;跳转到复位中断向量处执行成为软复位。 **未定义的指令** 当ARM处理器或者是系统中的协处理器认为当前指令未定义时,产生未定义的指令异常中断,可以通过改异常中断机制仿真浮点向量运算。 **软件中断** 这是一个由用户定义的中断指令。可用于用户模式下的程序调用特权操作指令。在实时操作系统中可以通过该机制西线系统功能调用。 **指令与取终止(PrefechAbort)** 如果处理器预取的指令的地址不存在,或者该地址不允许当前指令访问,
[单片机]
基于ARM9的嵌入式仿人机器人传感器系统设计
0 引 言 传感器技术是仿人机器人研究的关键技术之一。仿人机器人之所以能在已知或未知的环境中完成一定的作业功能,是因为它能够通过传感器感知外部环境信息和自身状态,获得反馈信息,实现系统的闭环控制。目前在仿人机器人中应用的传感器种类繁多,例如视觉传感器、电子罗盘、加速度计和超声波传感器等都是仿人机器人中常用的传感器。 DF-1机器人是我院自主研制的一款仿人机器人。本文首先对DF-1机器人总系统进行了介绍,然后根据DF-1机器人需要实现的功能,设计DF-1机器人的传感器系统,然后实现传感器系统的具体工作电路,利用ARM9实现了传感器系统信息的采集,最后对传感器系统的效果进行了试验验证。 1 DF-1仿人机器人简介 DF-
[单片机]
基于<font color='red'>ARM</font>9的嵌入式仿人机器人传感器系统设计
基于Zynq的图形生成电路设计与实现
1引言 在飞机座舱显示系统中图形显示占据重要地位 .主显示器尺寸不断加大,分辨率不断提高,并日益朝着大屏幕化、综合化、信息化和智能化方向发展 .随着分辨率的提高,要显示的信息量也大幅增加,座舱图形综合显示系统是一个对实时性要求很高的系统 ,军用飞机在做战术动作时,画面变换速度快,要求图形的更新速度也必须很快,至少要比帧或场的刷新速度快,才可以避免画面的断续 .采用DSP+FPGA 的图形硬件加速架构,或者使用专用GPU 图形生成芯片,都可以生成高分辨的机载显示器图形,但随之而来的是产品成本的急剧增加以及功耗的不断上升 .为机载图形显示系统配置更合理的硬件设计和软件架构变得尤为迫切。 Xilinx最新平台Zynq将处理器的软
[单片机]
基于Zynq的图形生成电路设计与实现
基于ARM9的多功能硬盘MP3播放器的设计
很难给这个设计方案定义一个确切的名称,是硬盘MP3播放器,还是数码相机伴侣,还是是电子相框,甚至叫做移动硬盘?其实这几项功能这款设计方案都具备了。不过通常来说,作为MP3使用的频率更高一些,因此我们姑且还是将它称作多功能硬盘MP3播放器。 这款多功能MP3播放器的核心是三星公司的S3C2410芯片。该芯片是基于ARM920T而开发的一款面向消费类电子产品的多功能SOC。除具备一般嵌入式芯片所具有的总线,SDRAM控制器,3个串口等外设之外,S3C2410还具有TFT LCD控制器、USB Slave、USB Host、I2C总线控制器、SPI控制器、IIS音频接口、SD %26;amp; MMC存储卡接口等丰富的扩展功能。芯片工
[应用]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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