嵌入式系统(六):STM32中断

文章目录

  • 一、异常与中断
      • (1)基本概念
      • (2)二者的区别
      • (3)中断与外部中断
      • (4)异常的优先级
  • 二、相关设备与中断/异常处理
    • 1:嵌套向量中断控制器(Nested Vectored Interrupt Controller, NVIC)
    • 2:系统控制寄存器(SCB):中断配置
    • 3:中断和异常处理
      • (1)中断
      • (2)异常
  • 三、STM32中断优先级
    • 1:中断优先级为何?
    • 2:中断优先级分组设定
    • 3:NVIC配置过程
    • 4:EXTI(外部中断/事件控制器)

一、异常与中断

(1)基本概念

  • 所有能打断正常执行流事件都称为异常
  • 异常指在正常执行流程中发生暂时的停止并转向相应的处理,包括ARM内核产生复位,取值或存储器访问失败,遇到未定义指令,执行软件中断,或者出现外部中断等
  • 大多数异常都对应一个软件的异常处理程序,也即在异常发生时执行的软件程序

(2)二者的区别

  • 中断往往来自于内核的外部,是内核来说一个突发事件,异步事件。
  • 异常(系统异常)是由于内核活动产生的,是内核在执行指令或访问存储器时产生的,对CM3核是“同步”的
    嵌入式系统(六):STM32中断_第1张图片

(3)中断与外部中断

  • 在内核的层次讨论问题时,“中断”都是内核以外产生的,都叫做“外部中断”;
  • 在芯片的级别来说,例如针对STM32芯片,通过EXTI控制的那几个中断(来自引脚、RTC闹钟、USB唤醒、PVD输出),叫做“外部中断”。
  • 也就是说,如果和系统异常进行比较,我们都叫外部中断。但是中断之间相互比较的话又有新的层次,片上外设相对于中断引脚反而是比较内部的,
    嵌入式系统(六):STM32中断_第2张图片

(4)异常的优先级

  • 有三个异常:复位(-3),NMI(-2)、硬件fault(-1)的优先级是负的,最高的,软件不能编程,比其他任何异常都高
  • 其他异常:随着编号的增大而降低,优先级都可以编程
  • 可编程的软件优先级权限高于默认硬件优先级(默认优先级即随着编号增大而降低)
  • 软件优先级数字越大优先级越低,当两个中断的软件优先级一样时我们才查看他们的硬件优先级。
    嵌入式系统(六):STM32中断_第3张图片
    前三个优先级不可以通过软件来更改,优先级即硬件默认优先级,对于可设置优先级的异常而言,软件设置的优先级会覆盖原来的硬件优先级。注意-3:6是异常,是没有位置的,从中断开始才有位置
    嵌入式系统(六):STM32中断_第4张图片

二、相关设备与中断/异常处理

1:嵌套向量中断控制器(Nested Vectored Interrupt Controller, NVIC)

嵌入式系统(六):STM32中断_第5张图片
每个寄存器组有240位(一个寄存器只有32位,但是他们都是寄存器组),例如:中断使能设置寄存器组,ISER[0]对应中断源0~31,ISER[1]对应中断源32~63,STM32只有60个中断源,所以没有用到ISER[2:7]。定义NVIC_TypeDef的结构体在库文件core_cm3.h文件。

NVIC中的每个寄存器组都有8个寄存器
嵌入式系统(六):STM32中断_第6张图片

2:系统控制寄存器(SCB):中断配置

嵌入式系统(六):STM32中断_第7张图片
嵌入式系统(六):STM32中断_第8张图片

3:中断和异常处理

STM32芯片的中断和系统异常是分别处理的,其内部处理结构也是分开的
嵌入式系统(六):STM32中断_第9张图片

(1)中断

嵌入式系统(六):STM32中断_第10张图片
嵌入式系统(六):STM32中断_第11张图片
在这里插入图片描述
我们可以通过中断激活位寄存器来知道现在正在执行的中断是哪个
嵌入式系统(六):STM32中断_第12张图片

(2)异常

嵌入式系统(六):STM32中断_第13张图片
嵌入式系统(六):STM32中断_第14张图片
在这里插入图片描述
嵌入式系统(六):STM32中断_第15张图片

三、STM32中断优先级

如何对系统优先级进行一个设置?

1:中断优先级为何?

嵌入式系统(六):STM32中断_第16张图片
嵌入式系统(六):STM32中断_第17张图片
嵌入式系统(六):STM32中断_第18张图片
嵌入式系统(六):STM32中断_第19张图片
也就是说总是先看抢占是优先级,再看响应优先级,如果这两个都相等,就按照硬件优先级(也就是中断表的排位顺序)。

2:中断优先级分组设定

嵌入式系统(六):STM32中断_第20张图片
嵌入式系统(六):STM32中断_第21张图片
嵌入式系统(六):STM32中断_第22张图片嵌入式系统(六):STM32中断_第23张图片

3:NVIC配置过程

嵌入式系统(六):STM32中断_第24张图片
(中断初始化结构体):
嵌入式系统(六):STM32中断_第25张图片

4:EXTI(外部中断/事件控制器)

在STM32F103XX处理器中,外部中断/事件控制器由用于产生事件/中断请求的19个边沿检测器组成,其中16个中断通道EXTI0-EXTI15对应GPIOx_Pin0-GPIOx_Pin15,另外3个是EXTI16连接PVD(Programmable Votage Detector 可编程电压监测器,作用是监视供电电压)输出,EXTI17连接到RTC(Real Time Clock,实时时钟)和EXTI18连接到USB唤醒事件。
嵌入式系统(六):STM32中断_第26张图片
每根外部中断输入线也均可以被单独屏蔽,并且处理器通过一个挂起寄存器保存中断请求的状态。外部中断/事件控制器EXTI的主要特性如下所示:
(1)每根外部中断/事件输入线上均可独立触发和屏蔽
(2)每根外部中断/事件输入线都具有专门的状态标志位
(3)最多可产生19个软件事件/中断请求
(4)可捕获脉宽频率低于APB时钟的外部信号

上图中看出来好像exit对中断和事件的处理没有差别,其实是有的,主要就是事件最终由硬件自动完成,而中断需要CPU参与处理。
嵌入式系统(六):STM32中断_第27张图片
嵌入式系统(六):STM32中断_第28张图片
EXIT只是对NVIC提供一个辅助的作用,并不是取代了NVIC。60个中断,EXIT只能管理19个,而且每一个的运行最终也都是要回到NVIC。

EXIT的寄存器:
嵌入式系统(六):STM32中断_第29张图片

你可能感兴趣的:(嵌入式系统)