精华内容
下载资源
问答
  • demi 发布于:周三, 10/16/2019 - 15:15 ,关键词:51单片机包含五中断源,两级中断优先级,优先级可编程设置,通过IP进行设置。● PX0(IP.0),外部中断0优先级设定位;● PT0(IP.1),定时/计数器T0优先级设定位;...

    15e8e2b0e444c50bf7a52fe89f4c4617.png

    demi 发布于:周三, 10/16/2019 - 15:15 ,关键词:

    51单片机包含五个中断源,两级中断优先级,优先级可编程设置,通过IP进行设置。

    8d80a8458dd82bd247777ce2990b8a4f.png

    ● PX0(IP.0),外部中断0优先级设定位;

    ● PT0(IP.1),定时/计数器T0优先级设定位;

    ● PX1(IP.2),外部中断0优先级设定位;

    ● PT1(IP.3),定时/计数器T1优先级设定位;

    ● PS (IP.4),串行口优先级设定位;

    ● PT2 (IP.5) ,定时/计数器T2优先级设定位。

    a6ece081860dec90f8da3ceb24d0626a.png

    从上图里我们可以看出:

    EA是中断控制位。EA=1,开放中断;EA=0,屏蔽所用中断(编程时人为设定)。

    那EA是在哪里进行设置的呢?它就是在IE(中断允许寄存器)里进行设定的。

    38804947241dec9e14cecca246674b44.png

    第七位就是EA,剩下的还有第四位的ES,第三位的ET1,第二位的EX1,第一位的ET0和第零位的EX0。

    是不是在上图中都能看到他们的影子?没错,要不IE能称为中断允许寄存器嘛。它先设定总允许中断,然后再设定其它中断是否允许。

    接下来我们再来看其它中断允许位。

    ES是串行口中断开放控制位。ES=1,响应串行口中断;ES=0,禁止串行口中断。

    ET1是T1溢出中断开放控制位。ET1=1,响应T1溢出产生的中断;ET1=0,禁止T1溢出产生的中断。

    EX1是外部中断1开放控制位。EX1=1,响应外部中断;EX1=0,禁止外部中断。

    ET0的功能同ET1,对应T0。

    EX0的功能同EX1,对应外部中断0。

    这样,中断是否开启就由你说了算了,你要用什么直接就可以控制对应的中断和总中断EA就可以了。

    现在我们开启了中断,cpu就会检测对应的中断是否到来,那如何检测的呢?接下来我们就要用到另外几个有用的位了。

    6fd4201342459b5bff235c341b4d809b.png

    TCON的第七位TF1,第五位TF0,第三位IE1,第一位IE0。

    760f445f85a7f6d6c23f35910ca75ead.png

    SCON的第一位TI,第零位RI。

    RI(SCON.0),串行口接收中断标志位。当允许串行口接收数据时,每接收完一个串行帧,由硬件置位RI。注意,RI必须由软件清除。

    TI(SCON.1),串行口发送中断标志位。当CPU将一个发送数据写入串行口发送缓冲器时,就启动了发送过程。每发送完一个串行帧,由硬件置位TI。CPU响应中断时,不能自动清除TI,TI必须由软件清除。

    TF1:T1当定时时间到或是当计数个数到的时候,会触发TF1位,然后CPU检测TF1位,执行对应的中断,响应中断后,硬件清零。

    TF0:对应于TF1。

    IE1:外部中断请求标志,外部中断执行,请求中断,对应IE1=1,CPU响应中断,硬件对IE1清零。

    IE0:对应IE1。

    但是对于外部中断,却有两种中断触发方式:

    一种是低电平触发;

    一种是下降沿触发。

    对于不同情况要进行不同的控制,如何在两种方式间进行选择呢?

    我们看TCON的第二位和第零位是没有用的,就是他们两个,第二位IT1对应外部中断1,第零位IT0对应外部中断0,给他们高电平就为下降沿触发,给他们低电平就为低电平触发。

    文章到这里就结束啦~附上“中断优先权图”供大家参考。

    *附 | 中断优先权图

    6934804aa95789266d6871dcf5e2dd45.png

    围观 138

    展开全文
  • 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文件中查找到。

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

    说最基本的,老的51单片机(80C51系列)有5个中断源,2个优先级,可以实现二级中断服务嵌套。现在很多扩展的51单片机已经有4个优先级(或更多)和更多的中断源了。

    在说到中断之前,我先来定义一下优先级,明白了什么是优先级,后面的阐述就容易明白了。实际上很多人都是混淆了优先级的含义,所以才觉得糊里糊涂。

    中断的优先级有两个:查询优先级和执行优先级。

    什么是查询优级呢?我们从datasheet或书上看到的默认(IP寄存器不做设置,上电复位后为00H)的优先级:

    外部中断0 > 定时/计数器0 > 外部中断1 > 定时/计数器1 > 串行中断

    或  int0,timer0,int1,timer1,serial port  或  INT0、T0、INT1、T1、UART

    或  PX0>PT0>PX1>PT1>PS>......

    其实都是查询优级。首先查询优先级是不可以更改和设置的。这是一个中断优先权排队的问题。是指多个中断源同时产生中断信号时,中断仲裁器选择对哪个中断源优先处理的顺序。而这与是否发生中断服务程序的嵌套毫不相干。当CPU查询各个中断标志位的时候,会依照上述5个查询优先级顺序依次查询,当数个中断同时请求的时候,会优先查询到高优查询先级的中断标志位,但并不代表高查询优先级的中断可以打断已经并且正在执行的低查询优先级的中断服务。

    例如:当计数器0中断和外部中断1(按查询优先级,计数器0中断>外部中断1)同时到达时,会进入计时器0的中断服务函数;但是在外部中断1的中断服务函数正在服务的情况下,这时候任何中断都是打断不了它的,包括逻辑优先级比它高的外部中断0计数器0中断。

    而中断的执行优先级就是你对IP寄存器的设置了。在2个优先级的情况下,某位为1,则相应的中断源为高优先级;为0,则为低优先级。

    关于中断的优先级有三条原则:

    1、CPU同时接收到几个中断时,首先响应优先级最高的中断请求;

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

    3、正在进行的低行优优先级中断服务,能被高行优优先级中断请求中断;

    若:同一执行优先级中的中断申请不止一个时,则有一个中断优先权排队问题。同一执行优先级的中断优先权排队,由中断系统硬件确定的自然优先级形成,优先权自高到低的顺序即:

    外部中断0>定时/计数0>外部中断1>定时/计数1>串行接口

    例如:设置IP = 0x10,即设置串口中断为最高优先级,则串口中断可以打断任何其他的中断服务函数实现嵌套,且只有串口中断能打断其他中断的服务函数。若串口中断没有触发,则其他几个中断之间还是保持逻辑优先级,相互之间无法嵌套。

    关于中断嵌套。可以这样说,当一个中断正在执行的时候,如果事先设置了中断优先级寄存器IP,那么当一个更高优先级的中断到来的时候会发生中断嵌套,如果没有设置则不会发生任何嵌套;如果有同一个优先级的中断触发,它并不是在“不断的申请”,而是将它相应的中断标志位置即IE寄存器的某位置位,当CPU执行完当前中断之后,按照查询优先级重新去查询各个中断标志位,进入相应中断。

    要记住,没有设置IP时,单片机会按照查询优先级(或都说逻辑优先级)来排队进入服务。如果要想让某个中断优先响应, 则要设置IP,更改执行优先级(或者说物理优先级)。要注意的是,当设置了IP后,当低执行优先级中断在运行时,如果有高执行优先级的中断产生,则会嵌套调用进入高执行优先级的中断。如果你是用C语言写的程序,并在中断服务时 using 了寄存组,要注意,两个不同执行优先级的中断服务程序不要 using 同一组寄存器。

    看两个问题,如下:

    1 在各个中断都是低优先级的时候,如果定时器0的溢出进入中断。在这个中断处理的过程中,外部中断0也被触发了,那么是不是要发生中断嵌套?

    2 如果定时器0发生中断的时候,进入中断处理程序,这个时候外部中断1条件触发条件满足了。因为定时器0自然优先级比外部中断1高,那么定时器0的中断处理程序继续执行。假设定时器中断处理程序执行的过程中,外部中断1的触发。条件消失了,那么等定时器0的中断处理完后,程序还是会进入外部中断1处理程序吗?

    答案1:在IP事先设置了外部中断0的优先级的情况下,CUP会中止定时器0的中断服务,进入外部中断0服务程序,执行完以后再回到定时器0中断服务程序。否则不会。

    答案2:肯定会进入中断的;外部中断1的触发条件满足后会置位外部1的中断标志,即使后来外部中断1的触发条件消失了,也不会清除已置位的中断标志,所以等定时器0的中断处理完后,程序判断外部中断的中断标志为1后依然会进入外部中断1处理程序的,只有在外部中断1处理程序中执行reti指令才会硬件清除外部中断1的中断标志(这也正是为什么中断返回使用reti指令而不可以用ret替换的原因)...

    展开全文
  • 中断优先级

    千次阅读 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.

    展开全文
  • STM32-中断优先级管理NVIC 1.NVIC中断优先级分组 NVIC的全称是Nested vectoredinterrupt controller,即嵌套向量中断控制器。STM32F中文参考手册中搜索向量表可以找到相应的中断说明。 CM4/CM7 内核支持256中断,...
  • 8051单片机实战分析(以STC89C52RC为例) | 01 - 点亮一LED 8051单片机实战分析(以STC89C52RC为例) | 02 - LED延时约5s闪烁 8051单片机实战分析(以STC89C52RC为例) | 03 - LED流水灯 8051单片机实战分析(以...
  • stm32_中断优先级详解

    千次阅读 2021-01-30 09:57:19
    )前提条件1:组别优先顺序(第0组优先级最强,第4组优先级最弱):NVIC_PriorityGroup_0>NVIC_PriorityGroup_1>NVIC_PriorityGroup_2>NVIC_PriorityGroup_3>NVIC_PriorityGroup_4这里说的...
  • NXP 1062 使用了其中的高4bits,所以中断优先级在0-15,共16 在Cortex-M内核中,一中断的优先级数值越低,逻辑优先级却越高 从RTOS角度 RTOS中断嵌套方案将有效的中断优先级分成两组: • 可以
  • TMS320F28335中断优先级与中断嵌套的使用及讲解[复制链接]使用中断,就一定会涉及到中断嵌套的处理。下面就来看看28335如何实现中断嵌套。1,28335默认是禁止中断的。在进入中断后,CPU默认关全局中断,保存IER,...
  • 描述在MCS-51单片机中断优先级中由中断优先级寄存器IP来高置的,IP中某位设为1,相应的中断就是高优先级,否则就是低优先级。PSPT1PX1PT0PX0IP优先级别寄存器各位介绍如下:PS:串行口中断优先级控制位。PS=1设定...
  • 而这两个优先级各占几个位又要根据 SCB->AIRCR 中的中断分组设置来决定。 STM32 将中断分为 5 个组,组 0~4。该分组的设置是由 SCB->AIRCR 寄存器的 bit10~8 来定义的。具体分配关系如下表: 组 AIRCR[10:8] bit[7...
  • STM32F103芯片中断优先级设置 CM3中,优先级数值越小,优先级越高。 STM32F103只用了4位来表达优先级,因此最多支持16级的可编程优先级(0~15),15为最低优先级。 然而这16级可编程优先级并不一定都是抢占优先级...
  • 在STM32中两种中断优先级,1.抢占式中断优先级。2.响应优先级(子优先级)。两种优先级的优先顺序是:抢占式>响应式。 1.抢占式:即当中断来临时,可立马中断此时的操作而去执行抢占式优先级的活儿。高抢占式...
  • STM32 84 中断,包括 16 内核中断和 68 可屏蔽中断,具有 16 级可编程的中断优先级。而我们常用的就是这 68 可屏蔽中断,但是 STM32 的 68 可屏蔽中断,在 STM32F103 系列上面,又只
  • NVIC中断优先级管理

    2021-05-25 18:27:25
    STM32F40xx/STM32F41xx的92中断里面,包括10内核中断和82可屏蔽中断,具有16级可编程的中断优先级,而我们常用的就是这82可屏蔽中断。 2 中断管理的方法 对STM32中断进行分组,组0~4,同时,对每中断设置...
  • 一、综述STM32 目前支持的中断共为 84 (16 内核+68 外部), 16 级可编程中断优先级的设置(仅使用中断优先级设置 8bit 中的高 4 位)和16抢占优先级(因为抢占优先级最多可以四位数)。二、优先级判断STM32...
  • 51单片机(80C51系列)5个中断源,2个优先级,可以实现二级中断服务嵌套。现在很多扩展的51单片机已经4个优先级(或更多)和更多的中断源了。在说到中断之前,我先来定义一下优先级,明白了什么是优先级,后面的阐述...
  • STM32可以对中断进行分组,可以分为5组。
  • 1. 基于proteus的51单片机开发实例(14)中断嵌套和中断优先级1.1. 实验目的在前面实例中我们已经学习了51单片机的定时器/计数器中断,外部中断,通过这些实例,知道了中断电路的设计,中断编程的方法。本实例中我们...
  • STM32F184中断,包括16内核中断(异常)和68可屏蔽中断,具有16级可编程的中断优先级。而STM32F103系列上面,16内核中断(异常)不变,而可屏蔽中断只有60(在107系列才68),本博文只介绍...
  • msp430的中断优先级和中断嵌套 MSP430的中断优先级按所在的向量的大小排列,中断向量地址越高优先级就越大,但是默认的MSP430是不能中断嵌套的,要想在执行某一中断时能够响应更高优先级的中断,需要在低优先级的...
  • 这一节我们以外部中断为例子,讲讲中断优先级中断向量表的知识。 1)cubemx生成代码 ...最上面的Priority group是选择优先级分组,STM32(更确切地说是contex-M3内核的单片机)使用4bit位
  • 第11章 ThreadX中断优先级配置,含BasePri配置方案 本章节为大家讲解ThreadX中断优先级配置,此章节非常重要,初学者经常在这里犯迷糊。对于初学者来说,本章节务必要整明白。 目录 11.1 初学者重要提示 11.2 ...
  • 在Cortex-M3(CM3)内核中,每个中断优先级都是用寄存器中的8位来设置的,这样就2^8 =256级中断,意味着可以支持256个中断,这其中包含了16内核中断和240外部中断,并且具有256级的可编程中断设置。...
  • 我先看了下文档里的常见错误,发现和我现在关系的也就堆栈大小的设置和中断嵌套优先级的设置了,不过我这几个任务都是比较简单的,没有太多的变量,那么现在设置的堆栈大小是够的,不然也不会运行一段时间才奔溃,...
  • 注意:上面得到的分配结果,是指可以形成多抢占优先级,多响应优先级,这样两端口争优先级时,就两重优先级。如下:先判断抢占优先级,再判断响应优先级。数字越低,越优先。 注意第二第三点。例: 情况...
  • STM32F429xx的96中断里面,包括10内核中断和91可屏蔽中断,具有16级可编程的中断优先级,而我们常用的就是这91可屏蔽中断。在MDK内,与NVIC相关的寄存器,MDK为其定义了如下的结构体。 /** \brief ...
  • 系列文章目录 文章目录系列文章目录前言一、STM32 NVIC 中断优先级管理二、...STM32 84 中断,包括 16 内核中断和 68 可屏蔽中断,具有 16 级可编程的中断优先级。 而我们常用的就是这 68 可屏蔽中断,但是

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 89,722
精华内容 35,888
关键字:

中断优先级有几个