ARM软中断流程详解

这篇具有很好参考价值的文章主要介绍了ARM软中断流程详解。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

中断流程:①发生中断操作。②程序跳转至相应中断处理函数。③保存现场、处理功能、恢复现场。④程序跳转正常模式继续运行

注:本文将以软中断swi 2指令,在SVC与user两种模式的切换做详细解释。

先来看发生中断时候的特定函数

这里我们先开辟两个空间,存放发生中断后寄存器内容以及lr寄存器内的中断的下调命令地址。

.data
.stack_svc:@svc模式下的sp寄存器
.space 100@开辟100字节
.stack_svc_end:@函数结束

.stack_user:  @user模式下的sp寄存器
.space 100
.stack_user_end:

因为当前是svc模式,所以我们先将svc开辟的空间地址给到它的sp寄存器,同时写好异常向量表。然后告诉编译器我们的开始地址,这里以reset函数为起始函数文章来源地址https://www.toymoban.com/news/detail-513731.html

.gloal _start @告诉编译器从哪里开始读取
_start: @从这里开始往下走
.text  @接下来是代码段
b reset @当前模式下的起始入口 地址为0x00 也可以写为ldr pc,=reset
nop @b undfine_hander@未定义中断,这里用不到,但为了符合向量表就先写上
b swi_hander @发生软中断时的跳转入口 地址为0x08  异常向量表简单的写两个即可
nop
nop
nop    
nop
nop@预留异常向量表的地址


reset:@抒写初始函数功能
ldr sp,=stack_svc @将开辟好的栈区空间首地址给svc模式下的sp寄存器(此时为svc模式)
mrs r0,cprs @将cprs当前的状态放至r0,当前时svc模式(10011),所以我们需要间接去改变它
bic r0,#0x1f @先清空r0状态内容
mov r0,#0x10 @将r0改为user模式
msr cprs,r0 @将r0的值放置cprs中更改当前模式为user(10000)
ldr sp,=stack_user@将开辟好的栈区空间首地址给user模式下的sp寄存器(此时为user模式)
mov r0,#1 @开始在user模式下操作寄存器
mov r2,#2
swi 2@采用open操作,这里开始发生软中断反应
sub r3,r1,r0  @为了验证跳出时,寄存器内容是否依旧为跳转前的内容



swi_hander: 软中断的跳转函数
stmfd sp!,{r0-r12,lr}@入栈操作
mov r0,#0xff
mov r1,#0xad @操作当前模式下的寄存器
sub r3,lr,#4 @获取跳转指令的地址(swi 2)
ldr r4,[r3] @获取跳转指令的机器码至寄存器4
bic r4,#0xff000000 @保存机器指码的后两位
cmp r4,#2 @分析跳转指令是否为软中断2号指令
movne r5,0x55 
moveq r5,0x66  @若为软中断2号指令则将寄存器r5改为0x66,不是则0x55
swi_hander_end: @软中断跳转函数结束
ldm sp!,{r0-r12,pc} @出栈操作,恢复现场。同时跳转到发生中断的后一条指令准备执行

到了这里,关于ARM软中断流程详解的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【ARM】-数据访问中止异常中断处理程序的返回

    当发生数据访问中止异常中断时,程序要返回到该有问题的数据指令处,重新访问该数据。因此数据访问中止异常中断程序应该返回到该数据访问中止异常中断的指令处,而不是像前面两种情况下返回到发生中断的指令的下一条指令。 数据访问中止异常中断是由数据访问指令

    2024年02月12日
    浏览(46)
  • ARM实验6-基于中断的按键处理程序实验

    一、实验名称:基于中断的按键处理程序实验 二、实验目的:         1.掌握ARM处理器的中断处理过程。         2.掌握ARM处理器中断服务程序的编写方法。         3.通过该编程实验,进一步巩固和强化学生ARM汇编编程的能,ARM应用程序框架,培养学生实际应用的

    2024年02月08日
    浏览(31)
  • ARM Cortex-A学习(1):GIC(通用中断控制器)详解

    GIC (通用中断控制器, Generic Interrupt Controller )是一种用于处理中断的硬件组件,它的主要功能是协调和管理系统中的中断请求,确保它们被正确地传递给相应的处理器核心。 这里以Cortex-A9为例,先来看一下处理器的几种模式: 操作模式 描述 User 是应用程序运行的基本模式。这

    2024年01月24日
    浏览(45)
  • 【ARM】-IRQ 和 FIQ 异常中断处理程序的返回

    通常处理器执行完当前指令后,查询 IRQ 中断引脚及 FIQ 中断引脚,并且查看系统是否允许 IRQ 中断及 FIQ中断。 如果有中断引脚有效,并且系统允许该中断产生,处理器将产生 IRQ 异常中断或 FIQ 异常中断。 当 IRQ 和 FIQ 异常中断产生时, 程序计数器 PC 的值已经更新 ,它指向

    2024年02月08日
    浏览(22)
  • 五、中断服务程序的流程

    1.中断服务程序的流程 保护现场、中断服务、恢复现场、中断返回 # 保护现场:程序断点的保护(中断隐指令完成),寄存器内容的保护(进栈指令)。 保护程序的断点  包含了两部分内容 1).中断返回以后、去执行哪条指令、那么这条指令的地址我们要进行保存 这个就是

    2024年02月09日
    浏览(26)
  • 在linux中进行arm交叉编译体验tiny6410裸机程序开发流程

    在某鱼上找了一个友善之臂的Tiny6410开发板用来体验一下嵌入式开发。这次先体验一下裸机程序的开发流程,由于这个开发板比较老旧了,官方文档有很多过期的内容,所以记录一下整个过程。 按照光盘A中的文档《04- Tiny6410 Linux开发指南.pdf》的 1.3.5 节描述,用光盘中的 a

    2024年02月15日
    浏览(26)
  • 51单片机步进电机全套资料(启停+正反转+加减速+显示速度+中断)【源程序+流程图+接线图+视频+答辩报告】综合设计首选

      一、设计目标     设计程序实现按键控制步进电机启动、停机、正反转、加减速、转速及转向显示。 二、主要功能     功能1:步进电机的启动、重启、停机;     功能2:步进电机正反装;     功能3:静态数码管显示速度等级;     功能4:步进电机的加减速; 三、硬

    2024年02月12日
    浏览(31)
  • 易懂的方式讲解ARM中断原理以及中断嵌套方法

    ARM有七种模式,我们这里只讨论SVC、IRQ和FIQ模式。  我们可以假设ARM核心有两根中断引脚(实际上是看不见的),一根叫 irq pin, 一根叫fiq pin。在ARM的cpsr中,有一个I位和一个F位,分别用来禁止IRQ和FIQ。  先不说中断控制器,只说ARM核心。正常情况下,ARM核都只是机械地随着

    2024年01月21日
    浏览(27)
  • ARM按键中断控制事件

    main.c

    2024年02月08日
    浏览(23)
  • ARM中断实验

    main.c do_irq.c key_inc.c

    2024年03月26日
    浏览(35)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包