中断响应序列

Cortex-M3的中断响应序列包括:入栈,取向量,更新寄存器;

1. 入栈

Cortex-M3的中断响应会自动保存现场:依次将xPSR,PC,LR,R12,R0-R3压入堆栈;响应异常时正在使用哪个堆栈指针,则压入哪个堆栈,进入中断服务例程后,将一直使用MSP;

地址 寄存器 保存的顺序
旧SP(N-0) 原内容 -
(N-4) xPSR 2
(N-8) PC 1
(N-12) LR 8
(N-16) R12 7
(N-20) R3 6
(N-24) R2 5
(N-28) R1 4
新SP(N-32) R0 3

先把PC和xPSR的值入栈,是为了尽早的启动服务例程指令的预取,以及更新xPSR的IPSR段的值;

2. 取向量

当数据总线执行入栈操作的时候,指令总线正在执行取向量操作;即从向量表中找出正确的中断向量,然后在服务例程入口处预取指令;取向量和入栈是同时进行的;

3. 更新寄存器

在中断开始响应之后,执行服务例程之前,更新了一系列寄存器:
SP:入栈会把SP更新到新的位置,中断服务例程由MSP负责堆栈的访问;
PSR:IPSR位段会更新为新响应的异常编号;
PC:PC将指向服务例程的入口地址;
LR:LR的用法将被重新解释,其值将更新为一种特殊的值,称为“EXC_RETURN”,并在异常返回时使用;
在中断响应时,NVIC也更新了一些寄存器,例如,新响应异常的悬起位被清除,其活动位被激活;

中断返回

Cortex-M3的中断返回序列需要一个特定的动作来触发,这个动作就是把EXC_RETURN送往PC,例如:BX LR;
在启动了中断返回序列后,将执行以下操作:
出栈:将先前压入堆栈的寄存器恢复,堆栈指针也更新;
更新NVIC寄存器:异常返回,其相应的活动位将被硬件清除;

EXC_RETURN

进入中断服务程序后,LR(R14)寄存器的值会被更新为特殊的值‘EXC_RETURN’(原来的值已压入堆栈);执行完中断服务程序后,只要把这个值送往PC,就会启动中断返回序列;

EXC_RETURN位段如下:

bits -
bit[31:4] EXC_RETURN的标识,全为1
bit[3] 0表示返回后进入handler模式,1表示返回后进入线程模式
bit[2] 0表示返回后使用MSP,1表示返回后使用PSP
bit[1] 保留
bit[0] 0表示返回ARM状态,1表示返回thumb状态,CM3中必须为1

合法的EXC_RETURN值

  • 0xffffffff1 : 返回handler模式
  • 0xffffffff9 : 返回线程模式,并使用MSP
  • 0xffffffffd : 返回线程模式,并使用PSP

如果在线程模式,且使用MSP时被中断,中断服务例程中EXC_RETURN=0xfffffff9;
如果在线程模式,且使用PSP时被中断,中断服务例程中EXC_RETURN=0xfffffffd;
如果在handler模式时被中断,中断服务例程中EXC_RETURN=0xfffffff1;

Cortex-M3中断的具体行为相关推荐

  1. Cortex - M3 中断和异常的区别

    --------------------------------------------- -- 时间:2019-03-01 -- 创建人:Ruo_Xiao -- 邮箱:xclsoftware@163 ...

  2. Cortex M3 NVIC与中断控制

    Cortex M3 NVIC与中断控制 宗旨:技术的学习是有限的,分享的精神是无限的. 一.NVIC概览 --嵌套中断向量表控制器 NVIC 的寄存器以存储器映射的方式来访问,除了包含控制寄存器和中断 ...

  3. Cortex M3内核架构

    CortexM3内核架构 宗旨:技术的学习是有限的,分享的精神是无限的. 1.ARMCortex-M3处理器 Cortex-M3处理器内核是单片机的中央处理单元( CPU). 完整的基于CM3的MCU ...

  4. cortex m3的操作模式和状态

    1.操作状态(operation state): debug state:处理器在调试器发起halt或匹配到断点时,会进入debug state并停止执行指令. thumb state:处理器正在运行 ...

  5. Cortex、ARMv8、arm架构、ARM指令集、soc?Cortex A8、A9都是ARMv7a 架构;Cortex M3、M4是ARMv7m架构;前者是处理器(内核)后者是指令集的架构(架构)

    架构组成元素的指令集状态或者语法thumb指令集与arm指令集的区别例如thumb指令集是什么_thumb指令集与arm指令集的区别以及thumb-2的关系在下一文中介绍,本文暂时不讨论 有粉丝问我到 ...

  6. Cortex‐M3的Faults异常究竟是什么?

    关注+星标公众号,不错过精彩内容 作者 | strongerHuang 微信公众号 | strongerHuang 有许多朋友在学习,或者开发STM32时都遇到过HardFault_Handler的情 ...

  7. Cortex M3 Bit-banding简介

    http://blog.csdn.net/shevsten/article/details/7676397 Cortex M3 Bit-banding简介 分类: ARM MCU2012-06-19 ...

  8. cortex m3 开源_开源增强现实耳机,Steam的125M有效帐户等

    cortex m3 开源 您好,开放游戏迷! 在本周的版本中,我们将了解Steam的1.25亿活跃帐户和Game Developers Conference,这是一个开源增强现实头戴设备,Linux游 ...

  9. cortex m3/m4处理器的复位设计

    cortex m3/m4处理器在复位层面总体上可以划分为core和debug logic两部分.core部分包括处理器内核(core)以及NVIC,BUS Matrix,MPU的非debug部分.de ...

  10. stm32 cortex M3 汇编指令集 英文详解

    这是cortex M3的汇编指令集详解,包含指令执行的周期,如下图示例,可以去Arm公司下载此文档,链接在此https://developer.arm.com/documentation/ddi033 ...

最新文章

  1. 远程桌工具-Remote Desktop Organizer
  2. 登录验证---过滤器(Fileter)
  3. ecs使用脚本安装oracle
  4. 同一个ip能否两次加入组播_组播IGMPv1/v2/v3精华知识汇总
  5. C++工作笔记-对二级指针的进一步理解(函数的参数使用二级指针,从而操作原数据)
  6. be备份mysql_Linux备份和导入Mysql
  7. 菊长说丨一文读懂MySQL4种事务隔离级别
  8. 十字路口红绿灯plc程序_PLC编程-典型案例红绿灯控制
  9. MacOS的OCR文字识别,节约时间,提高效率
  10. 题目【物联网控制技术第五章】【幅频特性】【相频特性】【波特图】【奈奎斯特图】
  11. VC安装驱动详细解释
  12. 设置华为路由器的端口映射
  13. 解决Windows PowerShell 乱码
  14. 华为ar系列交换机虚拟服务器,交换机路由器虚拟服务器设置
  15. 快速保存网页中所有图片的方法
  16. 新风医疗集团就私有化交易达成最终合并协议;​康泰生物成功分离新冠德尔塔变异株 | 医药健闻...
  17. Android连接多个usb,Android实现USB连接
  18. HTML5高度还原复古24层魔塔网页版小游戏源码
  19. 阿里云安装数据库mysql数据库服务器_阿里云CentOs服务器 安装与配置mysql数据库...
  20. sqoop迁移oracle数据到TDH

热门文章

  1. Java基础入门笔记-Eclipse快捷操作
  2. linux 管理工具 scrt,Linux服务器管理之终端管理软件(SecureCRT)介绍
  3. python中input数组_python – 在NumPy数组中搜索序列
  4. elementui的tree组件页面显示不出数据_只要10分钟,教你配置出炫酷的数据可视化大屏...
  5. mysql 表.t_mysql ---表的操作
  6. 年龄到底怎么算才对_如意甘霖vs嘉和保,到底谁才是最佳男性重疾险
  7. VSCode工具常用命令总结
  8. 51单片机之特殊功能寄存器SFR
  9. 【专栏必读】(计算机组成原理题目题型总结)计理期末考试408统考算机组成原必考题型总结
  10. (王道408考研操作系统)第二章进程管理-第四节1:死锁相关概念