一、中断和异常概述

中断和异常的作用是指示系统中的某个地方发生一些事件,需要引起处理器(包括正在执行中的程序和任务)的注意.。当中断和异常发生时,典型的结果是迫使处理器将控制从当前正在执行的程序或任务转移到另一个历程或任务中去。该例程叫做中断处理程序,或者异常处理程序。如果是一个任务,则发生任务切换。

ARM架构的中断就是异常的一种,它一般由外设或外部输入产生,也可软件触发。中断的异常处理也被称作中断服务程序(ISR)。

二、Cortex-M3处理器中的嵌套向量中断控制器(NVIC)

本产品选用STM32L1系列单片机其处理器为Cortex-M3,在Cortex-M3处理器中存在一个嵌套向量中断控制器(NVIC)的中断控制器,它是可编程的且寄存器经过存储器映射,NVIC支持可编程中断优先级的数量。NVIC的地址是固定的且NVIC的编程模板与目前Cortex-M系列处理器都是一样的。

NVIC还支持多个系统异常,包括不可屏蔽中断(NMI)和处理器内部其他异常源。

嵌套向量中断控制器(NVIC)特性:

  1. 最多240个中断输入(1~15为系统异常,中断实际中在6~100之间,达到较小硅片面积,降低功耗),不可屏蔽中断(NMI)输入和系统异常。每个中断(NMI除外)都可以被单独的使能或禁止。
  2. 中断和系统异常具有可编程优先级。
  3. 嵌套中断/异常按照优先级先后处理。
  4. 向量中断/异常,处理器自动取出无需软件确认。
  5. 向量表可重定位在存储器多个区域(默认0x0)。
  6. 低中断等待。具有零等待状态存储系统,中断等待仅为12个周期。
  7. 中断和异常可用软件触发。
  8. 具有屏蔽中断和异常功能(NMI除外),也可将屏蔽为某个优先级之下。
  9. 多个优化用于降低不同异常上下文切换时的中断处理开销。

详细系统异常如下表:

中断类型如下表:

上面两个表详细阐述了异常/中断的编号、类型、优先级状态和具体的作用。

上图可知NVIC可以处理多个中断请求(IRQ)和一个不可屏蔽中断(NMI)请求,IRQ可由片上外设或外部中断输入通过I/O端口产生,NMI可由看门狗和掉电检测。处理器自身也是一个中断和异常源,比如处理器内部SysTick(系统节拍)定时器周期性产生中断或者系统错误事件状态。注:在Cortex-M3和Cortex-M4中断等待只有12个周期。

NVIC可以处理多种类型的中断源:

  • 脉冲中断请求。中断请求至少持续一个时钟周期,NVIC会在收到该中断时,挂起状态保持到中断得到处理。
  • 电平触发中断请求。中断得到处理前需要将中断源请求保持为高。

注:NVIC输入信号为高电平有效,实际外部中断输入设计会有所不同,片上系统逻辑会转换为有效高电平信号。

异常/中断入口:Cortex-M处理器会痛存储器的向量表中自动定位异常处理入口。

异常/中断抢占:每个异常都有优先级,当异常产生是MVIC会将输入异常优先级与当前运行任务优先级相比较,若新异常优先级较高,当前任务暂停,相关寄存器保存在栈空间,处理器开始处理新异常,当处理完成后,异常返回终止操作,处理器自动从栈恢复寄存器内容,并执行之前暂停任务。

中断屏蔽:NVIC有许多中断屏蔽寄存器。例如PRIMASK寄存器禁止除HardFault和NMI外所有异常;BASEPRI寄存器屏蔽低于特定优先级的异常或中断。

根据上图分析实际中异常/中断类型,NMI外设一般是看门狗或者掉电检测,IRQ外设一般是芯片自带ADC,DAC,比较器等,IRQ的I/O端口一般是外部芯片或者外围硬件电路产生的信号,SysTick(系统节拍)定时器产生中断用于有OS的芯片进行任务调度。

外设或I/O端口产生中断需要处理器处理服务流程如下:

  1. 处理器确认外设中断请求
  2. 进行优先级比较
  3. 处理器暂停当前执行任务
  4. 执行外设中断服务程序(ISR),可用软件清除中断请求。
  5. 处理完成后继续执行暂停任务

面经:

1.异常与中断之间的关系。

2.记住三个优先级最高的异常:复位(最高),NMI(第二)和硬件错误(第三)。

3.外设或I/O端口产生中断后,处理器接收到的处理流程。

4.中断源的信号类型:电平触发(高电平还是低电平?),脉冲触发(触发中断需要多少时间?),

三、优先级

在使用中断之前一般进行以下操作:

  1. 设置中断优先级(可以不设置,采用默认)
  2. 使能外设或I/O端口的触发中断开关
  3. 使能NVIC中断

Cortex-M3优先级配置寄存器为8位宽具有3个固定最高优先级(详见异常列表:复位,NMI,硬件错误)和256个可编程优先级(最多有128个抢占等级),但是实际可编程优先级数量远远低于256个,优先级越多会增加NVIC复杂度而且会增加功耗(增加逻辑门数)。优先级寄存器一般是高位有效(MSB),这样方便芯片间移植应用程序。

抢占等级划分:

优先级配置寄存器有8位宽为什么只有128个抢占等级?如下表所示:

优先级配置寄存器分为:抢占优先级和子优先级,从表中可以看出抢占优先级域最大只有7位,所以只有128个抢占优先级。因此在处理器判断如何执行中断时先判断抢占优先级,如果抢占优先级相同再判断子优先级。

面经:

1.中断初始化流程

2.可编程优先级个数?为什么这么多个?

3.抢占优先级(组优先级)与子优先级关系?抢占等级多少个?为什么抢占优先级有这么多个?

4.抢占优先级与子优先级哪个优先级更高?

四、向量表重定位

默认向量表地址从0开始。向量地址则为异常编号乘以4,向量表如下所示:

在CMSIS库中给SCB->VTOR赋予新地址进行重定位。

注:向量表基地址必须为下一个大小为2的整数次方

面经:

1.知道有向量表这个概念

2.向量表能否重定位?怎么定位?基地址有什么要求?

五、HAL库中断开发示例

设置中断流程三部曲:

  1. 设置抢占优先级
  2. 设置子优先级
  3. 使能中断

HAL库代码示例:

/*初始化端口操作这里不赘述*/

/*第一个参数:设置中断号,需要查询IO端口或者外设的中断号,

第二个参数:抢占优先级

第三个参数:子优先级*/

HAL_NVIC_SetPriority( EXTI0_IRQn, 6, 0 );

/*使能该中断号*/

HAL_NVIC_EnableIRQ( EXTI0_IRQn );

注:HAL库将设置抢占优先级和子优先级封装为一个接口,代码就缩减为两行代码。

ARM架构——面试了菊厂,中兴,MTK,鼎桥,总结了ARM Cortex-M3中断相关推荐

  1. ARM架构、指令集、内核版本、CISC与RISC、ARM产品线

    架构:处理器的硬件架构,称为微架构.用实际的半导体电路,去实现指令集列表的运算操作.日常中的构架很多时候就是说的指令集,像我们说X86构架.X86指令集,最后表达出的意思都差不多.实际中架构和指令集也 ...

  2. 除了ARM架构,还有其他的架构吗?有没有可能开发出比ARM架构还好的? RISC-V是未来的趋势吗?

    目前,常用的处理器架构有ARM.x86.MIPS.RISC-V等,按照指令集分为CISC和RISC两种.不同的架构应用场合不同,下文具体说一说. 1.x86架构 我们使用的电脑以及公司的服务器,大部分 ...

  3. 给Arm生态添把火,腾讯Kona JDK Arm架构优化实践

    前言 Arm架构以其兼具性能与功耗的特点,在智能终端以及嵌入式领域得到了广泛的使用,不断扩大其影响力.而在PC端以及数据中心,之前往往是x86架构在其中发挥着主要的作用.最近,随着人工智能.云计算等技 ...

  4. 什么是Cortex、ARMv8、arm架构、ARM指令集、soc

    参考:到底什么是Cortex.ARMv8.arm架构.ARM指令集.soc?一文帮你梳理基础概念[科普] 发布时间: 一口Linux 网址:https://blog.csdn.net/daocaoka ...

  5. 详谈ARM架构与ARM内核发展史

    戳蓝字"CSDN云计算"关注我们哦! 作者 | 架构师技术联盟 责编 | 阿秃 1.ARM架构与ARM内核 1.1 ARM架构与内核简述 目前为止,ARM总共发布8种架构:ARMv ...

  6. arm放弃服务器芯片,ARM溃败:Applied Micro拆分ARM架构服务器芯片业务

    上月下旬通信芯片厂商MACOM达成最终协议以约7.7亿美元收购Applied Micro,日前则已决定只留下后者的高速载波和数据中心连网芯片业务,分拆它的ARM架构服务器芯片业务,这对ARM在服务器芯 ...

  7. ARM 架构演进对未来计算意味着什么?

    ARM 在未来计算设备中将散发什么样的魔力? 作者 | Sridhar G Kumar 译者 | 姜松浩,责编 | 屠敏 出品 | CSDN(ID:CSDNnews) 以下为译文: 最近,伴随着具有强 ...

  8. arm 架构_ARM推出性能更强A78C架构,服务笔记本产品

    来源:IT168在上半年,ARM就已经推出了新一代移动处理器架构Cortex-A78,同时还带来了Mali-G78 GPU和Ehos-N78 NPU等,其中的Cortex-A78架构主要是用于手机处理 ...

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

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

  10. ARM架构和x86架构有什么区别?

    X86结构和ARM架构是主流的两种CPU架构,X86架构的CPU是PC服务器行业的老大,ARM架构的CPU则是移动端的老大,X86架构和arm架构实际上就是CISC与RISC之间的区别,很多用户不理解 ...

最新文章

  1. lua菜鸟教程_Lua 环境安装
  2. 第十五届全国大学生智能汽车竞赛深度学习组别预选赛提交作品队伍
  3. 交换机软件IOS升级更简化了
  4. 未能从程序集“System.ServiceModel, Version=3.0.0.0问题解决
  5. 使用UI Automation实现自动化测试 --工具使用
  6. PHPstudy新版小P面板进行设置版本
  7. 【iOS】Quartz2D图片剪切
  8. clr20r3错误问题定位与解决_解决Power BI服务中显示时间错误的问题
  9. 手把手教你如何逐步安装OpenStack
  10. gd32 定时器时钟_漫谈LiteOS之开发板-Timer(基于GD32450i-EVAL)
  11. unity3d自动寻路教程
  12. 外壳防护等级/IP防护等级说明
  13. IEEE754十六进制转十进制
  14. 曙光服务器通过ipmi安装系统,曙光服务器ipmi部署记录精编版
  15. seo秘籍,seo秘籍-自学seo零基础知识入门优化教程
  16. 《动手学深度学习》(PyTorch版)代码注释 - 3 【Softmaxs_regression_with_zero】
  17. 学习笔记(十四):基于位置无关感知策略的WIFI手势识别
  18. hadoop安装作业
  19. 时间把回忆开成花海,谁的等待,恰逢花开
  20. iconfont用在placeholder里

热门文章

  1. mGBA-0.9.2 免费开源的gba模拟器
  2. vb mysql 5.1 adodb_VB 中 ADO、 ADODB、 ADODC 的区别与联系(皮毛)
  3. android5开机动画耗时,Android 开机速度优化
  4. 【转】RHadoop实践系列之二:RHadoop安装与使用
  5. 杨中科老师-C语言也能干大事链接
  6. 小米4 win10 刷回android,小米4怎么从win10刷回MIUI 小米4 win10刷回MIUI系统详细教程...
  7. 最大流 Ford-Fulkerson 算法
  8. Linux vi 进去命令模式,Linux 下 vi/vim 文本编辑器详细命令使用方法,linux的vi/vim命令vi/vim命令模式,输入模式和末行模式...
  9. 暴雪游戏登录html代码,官方平台账号绑定暴雪游戏通行证!
  10. lfw分类 python_Python机器学习:PCA与梯度上升:009人脸识别与特征脸(lfw_people数据集)...