精华内容
下载资源
问答
  • STM32中断优先级彻底讲解
    千次阅读
    2019-04-25 10:21:05

     

    一:综述

    STM32 目前支持的中断共为 84 个(16 个内核+68 个外部), 16 级可编程中断优先级
    的设置(仅使用中断优先级设置 8bit 中的高 4 位)和16个抢占优先级(因为抢占优先级最多可以有四位数)。

    二:优先级判断

    STM32(Cortex-M3)中有两个优先级的概念——抢占式优先级和响应优先级,有人把响应优先级称作'亚优先级'或'副优先级',每个中断源都需要被指定这两种优先级。

    具有高抢占式优先级的中断可以在具有低抢占式优先级的中断处理过程中被响应,即中断嵌套,或者说高抢占式优先级的中断可以嵌套低抢占式优先级的中断。

    当两个中断源的抢占式优先级相同时,这两个中断将没有嵌套关系,当一个中断到来后,如果正在处理另一个中断,这个后到来的中断就要等到前一个中断处理完之后才能被处理。如果这两个中断同时到达,则中断控制器根据他们的响应优先级高低来决定先处理哪一个;如果他们的抢占式优先级和响应优先级都相等,则根据他们在中断表中的排位顺序决定先处理哪一个。
    三:优先级分组
    既然每个中断源都需要被指定这两种优先级,就需要有相应的寄存器位记录每个中断的优先级;在Cortex-M3中定义了8个比特位用于设置中断源的优先级,这8个比特位在NVIC应用中断与复位控制寄丛器(AIRCR)的中断优先级分组域中,可以有8种分配方式,如下:

    所有8位用于指定响应优先级
    最高1位用于指定抢占式优先级,最低7位用于指定响应优先级
    最高2位用于指定抢占式优先级,最低6位用于指定响应优先级
    最高3位用于指定抢占式优先级,最低5位用于指定响应优先级
    最高4位用于指定抢占式优先级,最低4位用于指定响应优先级
    最高5位用于指定抢占式优先级,最低3位用于指定响应优先级
    最高6位用于指定抢占式优先级,最低2位用于指定响应优先级
    最高7位用于指定抢占式优先级,最低1位用于指定响应优先级

    这就是优先级分组的概念。


    Cortex-M3允许具有较少中断源时使用较少的寄存器位指定中断源的优先级,因此STM32把指定中断优先级的寄存器位减少到4位(AIRCR高四位),这4个寄存器位的分组方式如下:

    第0组:所有4位用于指定响应优先级
    第1组:最高1位用于指定抢占式优先级,最低3位用于指定响应优先级
    第2组:最高2位用于指定抢占式优先级,最低2位用于指定响应优先级
    第3组:最高3位用于指定抢占式优先级,最低1位用于指定响应优先级
    第4组:所有4位用于指定抢占式优先级

    可以通过调用STM32的固件库中的函数NVIC_PriorityGroupConfig()选择使用哪种优先级分组方式,这个函数的参数有下列5种:

    NVIC_PriorityGroup_0 => 选择第0组
    NVIC_PriorityGroup_1 => 选择第1组
    NVIC_PriorityGroup_2 => 选择第2组
    NVIC_PriorityGroup_3 => 选择第3组
    NVIC_PriorityGroup_4 => 选择第4组

    中断优先级分组是为了给抢占式优先级和响应优先级在中断优先级寄丛器的高四位分配各个优先级数字所占的位数。在一个程序中只能设定一次

    四:中断源的优先级

    接下来就是指定中断源的优先级,中断源优先级是在中断优先级寄存器中设置的,只能设置及高四位,必须根据中断优先级分组中设置好的位数来在该寄存器中设置相应的数值。假如你选择中断优先级分组的第3组:最高3位用于指定抢占式优先级,最低1位用于指定响应优先级,那么抢占式优先级就有000-111共八种数据选择,也就是有八个中断嵌套,而响应优先级中有0和1两种,总共有8*2=16种优先级。

    中断源优先级具体的设置了该中断源的优先级别

    在一个程序中可以设定多个(最多16个)优先级,每个中断源只能设定的一个。

    每写一个关于中断优先级的程序必须包含下列两个函数:

     

    (1)void NVIC_PriorityGroupConfig(u32 NVIC_PriorityGroup)中断分组设置

    (2)void NVIC_Init(NVIC_InitTypeDef* NVIC_InitStruct)中断优先级设置

    更多相关内容
  • STM32中断优先级的分配以及中断原则

    千次阅读 2020-07-08 10:43:25
    STM32d的中断优先级由NVIC_IPRx寄存器来配置,IPR的宽度为8bit所以原则上每个中断可配置的优先级为0~255,数值越小优先级越高,但对于大部分的 Cortex-M3芯片都会精简设计,导致实际上支持的优先级数量更少。...
    1. STM32d的中断优先级由NVIC_IPRx寄存器来配置,IPR的宽度为8bit所以原则上每个中断可配置的优先级为0~255,数值越小优先级越高,但对于大部分的 Cortex-M3芯片都会精简设计,导致实际上支持的优先级数量更少。在STM32中只使用了IPR寄存器的高四位,低四位读回都为0。
      在这里插入图片描述

    2. 用于表达优先级的这四位又被分组为5组0~4,当配置中断优先级时要先选择你要将中断优先级分为哪一组,一个组又分成了抢占优先级和子优先级。具体如下图在这里插入图片描述
      所以由上图可知当选择中断优先级为组0时,主优先级可选值只有0,子优先级可选值为0~15。其余4组以此类比。当不同组别的优先级需要比较时,就直接比较IPR寄存器的高四位的值,越小优先级越高。

    3. 当中断优先级配置完成后,若多个中断同时发生则先比较抢占优先级谁的值小谁先进行,若抢占优先级相同则比较子优先级谁的值小谁先进行,若两者都相同,就比较硬件中断编号(该编号由硬件自身决定),值得注意的是当一中断正在进行时又一中断发生若后者的抢占优先级的值比前者小则后者可以打断正在发生的中断执行后者的中断进程,需要注意若后者的抢占优先级与前者相等但子优先级的值比前者小此时后者不能打断正在发生的中断必须等其完成后才能进行,至于后者的优先级比正在发生的中断优先级低的情况,那就肯定是等待正在进行的中断完成后再进行。

    学了32两年时间了,现在想开始总结下写写博文,有问题可以给我留言。

    展开全文
  • stm32中断优先级概述

    千次阅读 2021-01-17 13:59:05
    stm32中断优先级概述一:综述STM32 目前支持的中断共为 84 个(16 个内核+68 个外部),可以提供16 级可编程中断优先级的设置(仅使用中断优先级设置8bit中的高4位)和16个抢占优先级(因为抢占优先级最多可以有4位)。...

    stm32中断优先级概述

    一:综述

    STM32 目前支持的中断共为 84 个(16 个内核+68 个外部),可以提供16 级可编程中断优先级的设置(仅使用中断优先级设置8bit中的高4位)和16个抢占优先级(因为抢占优先级最多可以有4位)。

    二:优先级判断

    STM32(Cortex-M3)中有两个优先级的概念——抢占优先级和响应优先级,其属性编号越小,则优先级别越高。有人把响应优先级称作“亚优先级”或“副优先级”,每个中断源都需要被指定这两种优先级。

    具有高抢占式优先级的中断可以在具有低抢占式优先级的中断处理过程中被响应,即中断嵌套,或者说高抢占式优先级的中断可以嵌套低抢占式优先级的中断。

    当两个中断源的抢占式优先级相同时,这两个中断将没有嵌套关系,当一个中断到来后,如果正在处理另一个中断,这个后到来的中断就要等到前一个中断处理完之后才能被处理。如果这两个中断同时到达,则中断控制器根据他们的响应优先级高低来决定先处理哪一个;如果他们的抢占式优先级和响应优先级都相等,则根据他们在中断表中的排位顺序决定先处理哪一个。

    三:优先级分组

    既然每个中断源都需要被指定这两种优先级,就需要有相应的寄存器位记录每个中断的优先级;在Cortex-M3中定义了8个比特位用于设置中断源的优先级,这8个比特位在NVIC应用中断与复位控制寄丛器(AIRCR)的中断优先级分组域中,可以有8种分配方式:

    所有8位用于指定响应优先级

    最高1位用于指定抢占式优先级,最低7位用于指定响应优先级

    最高2位用于指定抢占式优先级,最低6位用于指定响应优先级

    最高3位用于指定抢占式优先级,最低5位用于指定响应优先级

    最高4位用于指定抢占式优先级,最低4位用于指定响应优先级

    最高5位用于指定抢占式优先级,最低3位用于指定响应优先级

    最高6位用于指定抢占式优先级,最低2位用于指定响应优先级

    最高7位用于指定抢占式优先级,最低1位用于指定响应优先级

    这就是优先级分组的概念。

    --------------------------------------------------------------------------------

    Cortex-M3允许具有较少中断源时使用较少的寄存器位指定中断源的优先级,因此STM32把指定中断优先级的寄存器位减少到4位(AIRCR高四位),这4个寄存器位的分组方式如下:

    第0组:                                                       所有4位用于指定响应优先级

    第1组:最高1位用于指定抢占式优先级,最低3位用于指定响应优先级

    第2组:最高2位用于指定抢占式优先级,最低2位用于指定响应优先级

    第3组:最高3位用于指定抢占式优先级,最低1位用于指定响应优先级

    第4组:所有4位用于指定抢占式优先级

    可以通过调用STM32的固件库中的函数NVIC_PriorityGroupConfig()选择使用哪种优先级分组方式,这个函数的参数有下列5种:

    NVIC_PriorityGroup_0 => 选择第0组

    NVIC_PriorityGroup_1 => 选择第1组

    NVIC_PriorityGroup_2 => 选择第2组

    NVIC_PriorityGroup_3 => 选择第3组

    NVIC_PriorityGroup_4 => 选择第4组

    中断优先级分组是为了给抢占式优先级和响应优先级在中断优先级寄丛器的高四位分配各个优先级数字所占的位数。在一个程序中只能设定一次。

    四:中断源的优先级

    接下来就是指定中断源的优先级,中断源优先级是在中断优先级寄存器中设置的,只能设置及高四位,必须根据中断优先级分组中设置好的位数来在该寄存器中设置相应的数值。假如你选择中断优先级分组的第3组:最高3位用于指定抢占式优先级,最低1位用于指定响应优先级,那么抢占式优先级就有000-111共八种数据选择,也就是有八个中断嵌套,而响应优先级中有0和1两种,总共有8*2=16种优先级。

    中断源优先级具体的设置了该中断源的优先级别

    在一个程序中可以设定多个(最多16个)优先级,每个中断源只能设定的一个。

    每写一个关于中断优先级的程序必须包含下列两个函数:

    1)void NVIC_PriorityGroupConfig(u32 NVIC_PriorityGroup)中断分组设置

    2)void NVIC_Init(NVIC_InitTypeDef* NVIC_InitStruct)中断优先级设置

    注意:NVIC能配置的是16种中断向量,而不是16个,当工程中有超过16个中断向量时,必然有两个以上的中断向量是使用相同的中断种类,而具有相同中断种类的中断向量不能互相嵌套。

    五:启动所需GPIOn_Pin及AFIO的RCC时钟

    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,RCC_APB2Periph_AFIO,ENABLE);

    注意:千万别忘记启动RCC_APB2Periph_AFIO!否则管脚只能做普通高低电平来用。当把GPIO用作EXTI外部中断或使用重映射功能的时候,必须开启AFIO时钟,而在使用默认复用功能的时候,就不必开启AFIO时钟了。

    六:实例

    NVIC_InitTypeDef    NVIC_InitStructure;    //定义中断初始化类型结构体变量

    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);   //配置优先级分组1 2个两个抢占优先级 8个亚优先级

    NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQn;  //开口外部中断0

    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;//配置0号抢占式优先级

    NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; //亚优先级配置为0号

    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //使能通道

    NVIC_Init(&NVIC_InitStructure);       //对外部中断0进行初始化配置

    NVIC_InitStructure.NVIC_IRQChannel = EXTI9_5_IRQn;  //开口外部中断5到9

    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;//配置1号抢占式优先级

    NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1; //亚优先级配置为1号

    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //使能通道

    NVIC_Init(&NVIC_InitStructure);       //对外部中断0进行初始化配置

    NVIC_InitStructure.NVIC_IRQChannel = ADC1_2_IRQn;  //ADC1中断

    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;//配置1号抢占式优先级

    NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1; //亚优先级配置为1号

    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //使能通道

    NVIC_Init(&NVIC_InitStructure);       //对外部中断0进行初始化配置

    从上面的配置来看,外部中断0的优先级最高,可以打断ADC和外部5到9的中断,也就说可以嵌套发生,当ADC中断和外部5到9中断同时发生时,它们的抢占优先级别相同,亚优先级别也相同,因为ADC1硬件排在更靠前,则先发生ADC中断,若是两者任何一个中断正在执行,则等此中断执行完,再去执行另一个中断。

    NVIC_InitStructure.NVIC_IRQChannel=EXTI9_5_IRQn表示要配置的为EXTI的第5~9线的中断向量,也就是说EXTI5~EXTI9线是使用同一个中断向量的。这些可写入的参数可以在stm32f10x.h文件中查找到。

    展开全文
  • 中断优先级

    千次阅读 2021-07-25 04:32:43
    为使系统能及时响应并处理发生的所有中断,系统根据引起中断事件的重要性和紧迫程度,硬件将中断源分为若干个级别,称作中断优先级。在实际系统中,常常遇到多个中断源同时请求中断的情况,这时CPU必须确定首先为哪...

    为使系统能及时响应并处理发生的所有中断,系统根据引起中断事件的重要性和紧迫程度,硬件将中断源分为若干个级别,称作中断优先级。

    在实际系统中,常常遇到多个中断源同时请求中断的情况,这时CPU必须确定首先为哪一个中断源服务,以及服务的次序。解决的方法是中断优先排队,即根据中断源请求的轻重缓急,排好中断处理的优先次序即优先级( Priority ),又称优先权,先响应优先级最高的中断请求。另外,当CPU正在处理某一中断时,要能响应另一个优先级更高的中断请求,而屏蔽掉同级或较低级的中断请求,形成中断嵌套。

    中文名

    中断优先级

    外文名

    Interrupt priority

    解决方法

    软件、硬件优先级排队作    用

    及时响应并处理发生的所有中断

    排序方法

    引起中断事件的重要性和紧迫程度

    依    据

    优先级

    中断优先级简介

    编辑

    语音

    微机系统中有多个中断源,有可能出现两个或两个以上中断源同时发出中断请求的情况。多个中断源同时请求中断时,CPU必须先确定为哪一个中断源服务,要能辨别优先级最高的中断源并进行响应。CPU在处理中断时也要能响应更高级别的中断申请,而屏蔽掉同级或较低级的中断申请,这就是中断优先级问题。[1]

    中断系统中,CPU一般根据各中断请求的轻重缓急分别处理,即给每个中断源确定一个中断优先级别,系统自动对它们进行排队判优,保证首先处理优先级别高的中断请求,待级别高的中断请求处理完毕后,再响应级别较低的中断请求。对多个中断源进行识别和优先级排队的日的就是要确定出最高级别的中断源,并形成该中断源的中断服务程序入口地址,以便CPU将控制转移到该中断服务程序去。[1]

    一般指以下两层含义:[2]

    ①若有2个或2个以上的中断源同时提出中断请求,微处理器先响应哪个中断源,后响应哪个中断源;[2]

    ②若一个中断源提出中断请求,微处理器给予响应并正在执行其中断服务程序时,又有1个中断源提出中断请求,后来的中断源能否中断前一个中断源的中断服务程序。[2]

    中断优先级分类

    编辑

    语音

    中断是用以提高计算机工作效率、增强计算机功能的一项重要技术。最初引入硬件中断,只是出于性能上的考量。如果计算机系统没有中断,则处理器与外部设备通信时,它必须在向该设备发出指令后进行忙等待(Busy waiting),反复轮询该设备是否完成了动作并返回结果。这就造成了大量处理器周期被浪费。引入中断以后,当处理器发出设备请求后就可以立即返回以处理其他任务,而当设备完成动作后,发送中断信号给处理器,后者就可以再回过头获取处理结果。这样,在设备进行处理的周期内,处理器可以执行其他一些有意义的工作,而只付出一些很小的切换所引发的时间代价。后来被用于CPU外部与内部紧急事件的处理、机器故障的处理、时间控制等多个方面,并产生通过软件方式进入中断处理(软中断)的概念。[3]

    中断可分为如下几种:

    中断优先级硬件中断

    (Hardware Interrupt)[3]可屏蔽中断(maskable interrupt)。硬件中断的一类,可通过在中断屏蔽寄存器中设定位掩码来关闭。[3]

    非可屏蔽中断(non-maskable interrupt,NMI)。硬件中断的一类,无法通过在中断屏蔽寄存器中设定位掩码来关闭。典型例子是时钟中断(一个硬件时钟以恒定频率—如50Hz—发出的中断)。[3]

    处理器间中断(interprocessor interrupt)。一种特殊的硬件中断。由处理器发出,被其它处理器接收。仅见于多处理器系统,以便于处理器间通信或同步。[3]

    伪中断(spurious interrupt)。一类不希望被产生的硬件中断。发生的原因有很多种,如中断线路上电气信号异常,或是中断请求设备本身有问题。[3]

    中断优先级软件中断

    (Software Interrupt)软件中断也叫内部中断,它是CPU执行中断指令INT n产生的中断。中断指令提供了直接调用中断服务程序的软件手段。[4]

    软件中断是以INT n指令的形式出现在程序中的,中断指令占用两个字节,第一个字节为指令码CDH,第二个字节为指令操作数n,即中断类型码。当软件中断时,CPU从指令流中读取中断类型码;当可屏蔽中断时,要在发出中断响应信号ITA后,才能从数据总线上读取中断类型码。可见,软件中断与外部中断有许多不同之处,它具有自身的一些特点,表现在以下几个方面。[4]

    (1)软件中断是以一条指令INT n而进入中断服务程序的,并且其中断类型码由指令的第二字节提供。[4]

    (2)软件中断不受中断允许标志IF的禁止,即无论正=1或0,对任何一个软件中断都不影响。其中,只有单步中断受单步标志TF的影响,即只有当TF=1时,才能执行单步中断。[4]

    (3)由于CPU从指令流中读取软件中断的中断类型码,因此,在软件中断进入中断后,不需要执行中断响应总线周期,也不必从数据总线上读取中断类型码。[4]

    (4)软件中断除类型0(除数为0的中断)外,都没有随机性,因为软件中断是以INT n指令的形式出现在程序中的,该指令放在程序的何处何时执行都是预先定好的,这就使得软件中断不会出现随机性。[4]

    中断优先级中断源种类

    编辑

    语音

    (1)设备中断:如键盘、打印机等设备的数据传送请求等。[1]

    (2)指令中断:为了方便用户使用系统资源或调试软件而设置的中断指令,由程序预先安排的中断指令(INT n)引起,如BIOS及DOS系统功能调用的中断指令等。[1]

    (3)故障中断:计算机内部设有故障自动检测装置,如电源掉电、奇偶校验错或协处理器中断请求等意外事件,都要求CPU进行相应的中断处理。[1]

    (4)实时时钟中断:在自动控制系统中,常遇到定时检测与时间控制,这时可采用外部时钟电路进行定时。CPU可发出命令启动时钟电路开始计时,待定时时间到,时钟电路就会向CPU发出中断申请,由CPU进行处理。[1]

    (5) CPU内部运算产生的某些错误所引起的中断:如除法出错、运算溢出、程序调试中设置断点等。[1]

    中断优先级中断响应原则

    编辑

    语音

    响应不同优先级中断的原则是:[5]CPU首先响应高优先级的中断请求;

    如果优先级相同,CPU按查询次序响应排在前面的中断;

    正在进行的中断过程不能被新的同级或低优先级的中断请求所中断;

    正在进行的低优先级中断过程,能被高优先级中断请求所中断。

    中断优先级响应流程

    编辑

    语音

    CPU在执行每一条指令的后期,要对所有的中断源进行检测。[5]

    在检测到中断请求前,程序计数器PC中存储的是下一条指令码的地址。如果CPU检测到某一中断请求并将响应该中断时,它要跳转到该中断服务程序处,即把PC的当前内容保存起来,再把该中断服务程序的入口地址送给PC,则其后CPU就执行该中断服务程序了。[5]

    b7240e5016ab5eacdf7d8c1f303e9f9b.png

    图1 CPU响应中断流程

    [5]在退出中断服务程序前,CPU要执行中断返回指令RETI,该指令把进入中断服务程序前保存的PC内容再写入PC,则其后CPU就从进入中断服务程序前的断点处向下执行指令,其流程如图1所示用C51编写中断服务函数时,并不需要在中断服务函数的最后编写RETI指令,该指令由编译器在编译中断服务函数时自动添加。

    中断优先级优先级排队

    编辑

    语音

    在实际系统中,常常遇到多个中断源同时请求中断的情况,这时CPU必须确定首先为哪一个中断源服务,以及服务的次序。解决的方法是中断优先排队,即根据中断源请求的轻重缓急,排好中断处理的优先次序即优先级( Priority),又称优先权,先响应优先级最高的中断请求。另外,当CPU正在处理某一中断时,要能响应另一个优先级更高的中断请求,而屏蔽掉同级或较低级的中断请求,形成中断嵌套。[6]

    中断源的优先级判别一般可采用软件优先级排队和硬件优先级排队两种方法。[7]

    中断优先级软件优先级排队

    948d699fb96c8f5dfd92f8ded619a179.png

    图2 软件査询接口电路如图2所示,优先级由查询顺序决定,先查询的中断源具有最高的优先级。[8]

    软件优先级排队是指各个中断源的优先权由软件安排。若干个外设的中断请求信号相“或”后,送至CPU的中断接收引脚(如INTR)。这样,只要任一外设有中断请求,CPU便可响应中断。在中断服务子程序前可安排一段优先级的查询程序,即CPU读取外设中断请求状态端口,然后根据预先确定的优先级级别逐位检测各外设的状态,若有中断请求就转到相应的Uo处理程序入口,为该外设服务。[7]

    71af1de55d112643a2b592e6e864456d.png

    软件查询程序流程用软件査询方法确定中断优先级是一种最简单的解决方法,主要依靠软件方法实现,不需要专门的优先级排队电路,可以通过修改查询顺序来修改中断优先级,不必更改硬件。但是当中断源个数较多时,由逐位检测査询到转入相应中断服务程序所耗费的时间较长,中断响应速度慢,服务效率低。[7]

    中断优先级硬件优先级排队

    dd8ec7437355aa01df587d6a172b5863.png

    菊花链优先级排队电路为提高中断处理效率,通常采用硬件处理中断优先权问题,即采用优先级排队电路或专用中断控制器等硬件电路来管理中断。其中,硬件优先权排队电路形式众多,有采用编码器组成的,有采用链式电路的。[1]

    利用外设连接在排队电路的物理位置来决定其中断优先权的,排在最前面的优先级最高,排在最后面的优先级最低。[6]

    中断优先级改变并发中断优先级的方法

    编辑

    语音

    在PC环境下,要改变并发中断优先级,实现理想的中断处理顺序,要从以下两个方面着手。

    (1)使低优先级的中断可中断高优先级的中断服务程序。

    通过研究发现,8259A 中的中断服务寄存器ISR。对中断处理顺序的改变起了非常重要的作用。当中断服务寄存器的相应位置 1时,8259A 自动禁止同级和较低级的中断请求。因此要改变中断的处理顺序,必须在CPU响应中断后,将8259A中的相应位清零的。这样,如果有新的中断请求,不论它的级别高低,只要CPU处于开中断状态,芯片就会马上再向CPU发出中断请求,即低优先级的中断就可能会中断高优先级的中断服务程序。而实现CPU响应中断后,将中断服务寄存器8259A中的相应位清零,有3种解决的办法。[9]

    (2)在中断处理程序中设置新的中断屏蔽字。

    为了能根据需要,改变实际的中断处理次序,很多机器都设置了中断屏蔽寄存器硬件,以决定是否让某级中断请求进入中断优先权电路进行优先权比较。级别高的中断请求优先得到响应。只要将每一类中断处理程序的各级中断屏蔽位设置成不同的状态,就可以得到所希望的中断处理次序。[9]

    中断优先级单级中断与多级中断

    编辑

    语音

    根据计算机系统对中断处理策略的不同,中断系统可以分为单级中断系统和多级中断系统,单级中断系统是中断结构中最基本的形式。[1]

    在单级中断系统中,所有的中断源都属于同一级,所有中断请求触发器排成一行,其优先次序是离CPU越近优先级越高。当响应某一中断请求时,CPU执行该中断源的中断服务程序,在此过程中,中断服务程序不允许被其他中断源所打断,即使优先级比它高的中断源也不例外,只有当该中断服务程序执行完毕之后,才能响应其他中断。[1]

    多级中断系统是指计算机系统中的多个中断源,根据中断事件的轻重缓急程度不同而分成若干个级别,每一个中断级分配一个优先级。一般而言,优先级高的中断级可以打断优先级低的中断服务程序,以中断嵌套方式进行工作。[1]

    在中断优先级已定的情况下,CPU总是首先响应优先级最高的中断请求。当CPU正在响应某一中断源的请求,即正在执行某个中断服务程序时,若有优先级更高的中断源申请中断,为使级别更高的中断源能及时得到服务,CPU就应暂停当前正在服务的级别较低的服务程序而转入新的中断源服务,等新的级别较高的中断服务程序执行完后,再返回到被暂停的中断服务程序继续执行,直至处理结束返回主程序,这种过程称为中断嵌套。CPU允许高优先级中断请求可以打断低优先级中断服务,使CPU对于急需处理的事件立即做出响应。[1]

    中断嵌套的出现,扩大了系统中断功能,进一步加强了系统处理紧急事件的能力。中断嵌套可以商多级。具体级数(即嵌套深度)原则上不限制,只取决于堆栈深度,实际上与要求的中断响应速度有关。[1]

    词条图册

    更多图册

    参考资料

    1.

    杨立,邓振杰,荆淑霞等编著.微型计算机原理与接口技术:中国铁道出版社,2016.02:第219页

    2.

    袁志勇,王景存主编;章登义,刘树波副主编.嵌入式系统原理与应用技术:北京航空航天大学出版社,2014.01:第146页

    3.

    张自军,蒋军,叶爱芹.微机原理与接口技术:中国科学技术大学出版社,2012.08:第205页

    4.

    李育贤.微机接口技术及其应用:西安电子科技大学出版社,2007.06:第73页

    5.

    王普斌.单片机接口与应用:冶金工业出版社,2016.04:第61页

    6.

    刘显荣主编;张元涛,吴云君副主编;汪德彪,常继彬,叶文,范苏参编.微机原理与嵌入式接口技术:西安电子科技大学出版社,2016.08:第129页

    7.

    万晓东,陈则王,孔德明编著.计算机硬件技术基础:南京航空航天大学,2013.01:第275页

    8.

    刘显荣主编;张元涛,吴云君副主编;汪德彪,常继彬,叶文,范苏参编.微机原理与嵌入式接口技术:西安电子科技大学出版社,2016.08:第130页

    9.

    陈燕俐, 洪龙, CHENYan-li, et al. 自由调整中断优先级的研究和实现[J]. 南京邮电大学学报(自然科学版), 2005, 25(6):35-39.

    展开全文
  • 说最基本的,老的51单片机(80C51系列)有5个中断源,2个优先级,可以实现二级中断服务嵌套。现在很多扩展的51单片机已经有4个优先级(或更多)和更多的中断源了。在说到中断之前,我先来定义一下优先级,明白了什么是...
  • STM32中断设置以及中断优先级设置

    万次阅读 多人点赞 2018-09-13 15:26:45
    最近,在做一个智能锁的项目,...最终,调试出bug就是由于中断优先级的影响。 本项目使用到的是STM32F030C8型号的MCU,我们可以从官方下载到的标准库文件中的启动汇编文件中,查看到本型号单片机的外部中断向量表...
  • 中断优先级安排原则与stm32优先级

    千次阅读 2014-02-10 19:06:14
    中断是获取异步事件的重要手段,中断优先级的安排如下: 1、紧迫性:触发中断的事件越紧迫,优先级要安排的越高!紧迫事件允许耽搁的时间短,如模拟信号的采集,采样耽误的时间越短,越真实! 2、关键性:触发...
  • 51中断优先级及中断嵌套

    千次阅读 多人点赞 2017-12-28 16:47:26
    基本型80C51系列单片机有5个中断源,2个优先级,可以实现二级中断服务嵌套。现在很多扩展的51单片机已经有4个优先级(或更多)和更多的中断源了。中断优先级在说到中断之前,我先来定义一下优先级,明白了什么是...
  • 一、抢占优先级和响应优先级 STM32 的中断向量具有两个属性,一个为抢占属性,另一个为响应属性,其属性编号 越小,表明它的优先级别越高。 抢占,是指打断其他中断的属性,即因为具有这个属性会出现嵌套中断...
  • 1)中断响应分为:自然优先级、抢占优先级、响应优先级。2)抢占优先级和响应优先级,其实是一个中断所包含的两个优先级,...A和B抢占优先级和响应优先级均一致,则谁先来就先处理谁,如果还是同时发生则由自然优先...
  • 51单片机(80C51系列)有5个中断源,2个优先级,可以实现二级中断服务嵌套。现在很多扩展的51单片机已经有4个优先级(或更多)和更多的中断源了。在说到中断之前,我先来定义一下优先级,明白了什么是优先级,后面的阐述...
  • 中断优先级问题

    千次阅读 2016-11-04 14:17:23
    中断优先级有两个:查询优先级和执行优先级。 外部中断0 > 定时/计数器0 > 外部中断1 > 定时/计数器1 > 串行中断 或 int0,timer0,int1,timer1,serial port 或 INT0、T0、INT1、T1、UART 或 PX0>PT0>PX1>...
  • Cortex-M3允许具有较少中断源时使用较少的寄存器位指定中断源的优先级,因此STM32把指定中断优先级的寄存器位减少到4位,这4个寄存器位的分组方式如下: 第0组:所有4位用于指定响应优先级 第1组:最高1位用于指定...
  • 3. freertos调度器启动、中断优先级管理、中断优先级分组 永远不要小看不起眼的东西,哪怕是短短的一行代码! (某些图片分辨率过大显示不清楚,保存到本地或拖动可放大)。 很多例程将vTaskStartScheduler函数...
  • FreeRTOS任务优先级设计原则

    千次阅读 2020-09-02 17:47:24
    2、高优先级后台任务:比如按键检测、触摸检测、USB消息处理、串口消息处理等可以归于这一类。 3、低优先级时间片调度任务:比如emwin界面显示、LED数码管显示等不需要实时执行的都可以归为这一类。 这类任务不...
  • MSP430应用技巧3:中断优先级

    千次阅读 2015-08-15 13:15:00
    MSP430的中断优先级、打开关闭、中断嵌套 优先级顺序从高到低为:  PORT2_VECTOR (1 * 2u) /* 0xFFE2 Port 2 */  PORT1_VECTOR (4 * 2u) /* 0xFFE8 Port 1 */  TIMERA1_VECTOR (5 * 2u) /* 0xFFEA Timer A CC1-2...
  • 如上文抢占有限级和响应优先级都是2来说,那么Systick的中断优先级是最低的 只要任何出现中断优先级高的,就会打断Systick中断,这样怎么保障如何保障其定时准确呢? 首先看了正点原子的开发指南 他的意思是
  • STM32中断分配——抢占优先级与响应优先级

    千次阅读 多人点赞 2019-01-25 16:51:06
    STM32的抢占优先级和响应优先级: 中断优先级寄存器NVIC_IPRx,本寄存器宽度为8位,原则上每个外部中断可配置的优先级为0~255,实际上精简了,只用到了它的高4位。这4位,又被分成了抢占优先级和响应优先级两组: ...
  • 6 个中断源(2 个外部中断、2 个定时/计数器中断、1 个串口输入/输出中断),两级中断优先级;128 字节内置RAM;独立的 64K 字节可寻址数据和代码区。中断发生后,MCU 转到 5 个中断入口处之一,然后执行相应的...
  • 处理机管理 中断技术

    2020-10-31 21:46:32
    文章目录1、中断概念2、中断源(1)硬中断(2)软中断(3)软硬中断区别(4)中断与信号3、中断和异常的响应及服务4、中断事件处理原则5、中断优先级和多重中断 1、中断概念 中断是现代操作系统实现并发性的基础之一...
  • 基础实验 – 基于省赛资源套装 ex9 EXTI外部中断实验 实验目的:掌握EXTI的使用方法。 实验内容:按下USER按键触发外部中断EXTI14。...不同优先级中断处理原则是:高级中断可以打断低级中断;低级中断不能打
  • 3. freertos调度器启动、中断优先级管理、中断优先级分组 永远不要小看不起眼的东西,哪怕是短短的一行代码! 某些图片分辨率过大显示不清楚,保存到本地或点击放大会回复原状。 原本认为几分钟能搞定的...
  • 抢占优先级和响应优先级 STM32 的中断向量具有两个属性,一个为抢占属性,另一个为响应属性, 其属性编号越小,表明它的优先级别越高。 抢占,是指打断其它中断的属性,即因为具有这个属性,会出现嵌套中断 (在...
  • STM32中断优先级

    2013-12-17 16:00:47
    STM32中断优先级 1、Cortex-M3中断优先级 原则上,CM3支持3个固定的高优先级和多达256级的可编程优先级,并且支持128级抢占。但是,绝大多数CM3芯片都会精简设计,以致实际上支持的优先级数会更少,如8级,16...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 27,488
精华内容 10,995
关键字:

中断优先级处理的原则