外部中断详解
单片机的中断与异常处理方法
单片机的中断与异常处理方法在单片机的工作过程中,中断和异常处理是非常重要的概念和方法。
它们能够有效地提高单片机的响应能力和灵活性,使其能够应对各种不同的工作需求和问题。
本文将介绍单片机中断的概念、中断的种类以及针对不同中断的处理方法,同时也会探讨单片机异常处理的原理和方法。
一、中断的概念和种类中断是指在一个程序执行的过程中,由于某种特殊的事件发生,导致程序的正常执行被打断,转而去执行一个与当前任务无关的子程序,完成该事件的相应处理。
中断可以分为外部中断和内部中断两种。
1. 外部中断外部中断是指当单片机外部引脚的电平或信号发生变化时,引发中断事件,使单片机停止当前任务的执行,去处理由该外部事件引发的中断服务程序(ISR)。
外部中断常用于与外部设备的交互,如按键输入、传感器检测等。
在编程中,我们可以通过设置中断触发条件和编写相应的中断服务程序来实现对外部中断的处理。
2. 内部中断内部中断是指当单片机内部某个特定的事件发生时,由硬件或软件触发中断请求,并且将控制权交给中断服务程序进行相应的处理。
内部中断的发生可以是由于某个特定条件的满足,如定时器溢出中断、串口接收中断等;也可以是由软件的运行结果触发,如除法溢出中断、地址错误中断等。
不同的内部中断需要通过编程实现相应的中断服务程序。
二、中断的处理方法中断处理是指在中断发生时,单片机通过中断向量表找到相应的中断服务程序,并对中断事件进行处理的过程。
下面将介绍两种常用的中断处理方法。
1. 优先级中断处理优先级中断处理是指对多个中断源按照优先级进行划分和处理的方法。
在单片机的中断系统中,每个中断源都被赋予了一个优先级,高优先级的中断可以打断当前正在执行的低优先级中断,从而增加了中断的响应速度和灵活性。
优先级中断处理需要在编程时设置中断的优先级,并根据不同的中断事件编写相应的中断服务程序。
2. 嵌套中断处理嵌套中断处理是指当一个中断正在执行的过程中,又发生了另一个中断时,将当前中断挂起,转而处理新发生的中断,并在处理完毕后返回原中断继续执行的方法。
外部中断实验原理
外部中断实验原理一、实验原理外部中断是计算机科学中的一个重要概念,它允许程序在特定的事件发生时被唤醒或中断。
外部中断对于实现实时计算、多任务处理、异常处理等重要功能具有关键作用。
本实验旨在深入理解外部中断的工作原理,并通过实例分析来揭示其实际应用中的关键点。
二、详细内容分析1. 中断触发机制外部中断是由特定事件触发的,例如输入输出操作完成、定时器溢出、硬件错误等。
当中断触发条件满足时,硬件会保存当前程序的状态,并将控制权转移到指定的中断处理程序。
2. 中断优先级当多个中断同时发生时,系统需要根据一定的优先级规则来确定执行哪个中断处理程序。
中断优先级的高低取决于具体应用的需求,通常可以根据重要性和实时性要求来设定。
3. 中断处理程序中断处理程序(Interrupt Service Routine, ISR)是一段特定的代码,用于在发生中断时处理事件并做出响应。
ISR通常包括保存寄存器状态、处理中断事件、恢复寄存器状态以及执行相应的操作等步骤。
4. 中断嵌套与处理器状态在多任务操作系统中,可能存在多个中断同时发生的情况。
此时,系统需要根据优先级逐一处理中断,并保存每个中断处理前的处理器状态,以便在处理完中断后恢复到原来的状态。
5. 中断屏蔽与唤醒某些情况下,系统可能需要暂时屏蔽某些中断,以避免干扰关键任务的执行。
同时,某些中断可能需要唤醒睡眠状态的进程或线程。
这些操作需要通过特定的指令或机制来实现。
三、实例分析以一个简单的例子来说明外部中断的工作流程:假设我们有一个基于Linux 系统的嵌入式系统,当某个硬件设备完成一项任务(如数据传输)时,会触发一个外部中断。
系统会保存当前的任务状态,并执行相应的中断处理程序(ISR)。
ISR会读取硬件设备的数据,并执行相应的操作(如数据处理、任务调度等)。
在ISR执行完毕后,系统会恢复之前保存的任务状态,并继续执行之前的任务。
这个例子中,我们看到了外部中断如何被用于实时处理任务、唤醒睡眠状态的进程以及调度任务等操作。
外部中断工作原理
外部中断工作原理
外部中断是计算机系统中的一种中断方式,在特定的条件下,外部设备向中断控制器发送中断请求信号,然后中断控制器将该请求信号转发给处理器,让处理器暂停当前的执行任务,转而执行相应的中断服务程序。
外部中断的工作原理如下:
1. 外部设备发生中断事件:当外部设备(例如键盘、鼠标、打印机等)发生某种事件或完成某个任务时,会发送中断请求信号给中断控制器。
2. 中断请求信号传递:中断控制器接收到中断请求信号后,会将该信号的具体信息传递给处理器,通过中断引脚或总线来进行传输。
3. 处理器响应中断信号:当处理器接收到中断请求信号后,会暂停当前的执行任务,保存当前的执行现场(例如寄存器状态、指令指针等),并跳转到中断向量表中特定位置的中断服务程序。
4. 中断服务程序执行:中断服务程序是指特定的处理器指令序列,用于处理特定的中断事件。
处理器会根据中断向量表中的中断号找到对应的中断服务程序,并执行相应的操作。
5. 中断处理完成:当中断服务程序执行完毕后,处理器会恢复之前保存的执行现场,并继续执行被中断的任务,使得计算机
系统回到原来的工作状态。
总结起来,外部中断的工作原理是通过外部设备的中断请求信号,中断控制器将其传递给处理器,处理器相应地执行相应的中断服务程序,以处理特定的中断事件,最后再返回到被中断之前的任务执行。
这种方式能够使计算机系统能够快速响应外部设备的变化,提高系统的并发性和实时性能。
中断的触发方式有哪些?
中断的触发方式有哪些?中断是计算机系统中常见的一种通信机制,用于处理紧急事件或优先级较高的任务。
中断的触发方式多种多样,下面将介绍其中的几种常见触发方式。
一、外部中断外部中断是由外部设备或外部信号引发的中断。
例如,当键盘输入时,计算机系统会通过外部中断来处理输入的字符。
外部中断可以从物理设备或外部电路中引发,通过响应设备发出的中断请求信号,来实现与设备的交互。
1. 异常中断异常中断是由于程序执行过程中出现错误或异常情况而引发的中断。
比如,越界访问数组、除以零等错误会触发异常中断。
异常中断可以及时发现错误,并采取相应的措施进行处理,从而保证系统的稳定性。
2. 外部设备中断外部设备中断是由外部设备通过中断请求线向处理器发出中断请求,并由处理器对该请求进行响应。
例如,当打印机准备好打印时,会发出中断请求,通知处理器进行打印操作。
外部设备中断可以使系统在不干扰其他任务的情况下,进行设备的异步操作。
二、定时器中断定时器中断是通过系统中的定时器设备来触发的中断。
定时器中断可以周期性地产生中断请求信号,用于处理定时任务或周期性的操作。
例如,操作系统中的时钟中断就是一种定时器中断,它会周期性地触发操作系统的调度,以保证各个任务的正常执行。
1. 周期性定时器中断周期性定时器中断是指定时器设备周期性地产生中断请求信号。
这种中断可以用于定时周期性事件的触发,如操作系统的任务调度、定时数据采集等。
2. 单次定时器中断单次定时器中断是指定时器设备在设定时间到达后仅触发一次中断请求信号。
这种中断可以用于引发某些任务或事件,如定时提醒、定时报警等。
三、内部中断内部中断是由处理器内部的状态或条件引发的中断。
比如,当程序执行遇到条件跳转指令或中断指令时,会触发内部中断。
内部中断可以改变程序的执行流程,实现条件判断和程序的中断处理。
1. 条件中断条件中断是由程序执行中满足特定条件时触发的中断。
比如,当某个变量的值达到或超过设定的阈值时,可以触发条件中断,执行相应的中断处理程序。
exit外部中断原理
在计算机系统中,"exit"用于终止当前运行的程序并退出程序的执行。
"exit"指令可以通过操作系统提供的API或编程语言的特定函数来调用。
下面是关于"exit"外部中断的详细版解释:
1. 外部中断介绍:在计算机系统中,外部中断是由外部事件触发的一种中断类型。
外部事件可以来自硬件设备(如硬件错误、时钟信号)或由操作系统或其他程序发送的软件中断请求。
2. "exit"指令执行:当程序执行到"exit"指令时,会触发一个软件中断请求,通知操作系统终止当前程序的执行。
3. 中断向量表:操作系统会维护一个中断向量表,其中记录了不同中断类型对应的中断处理程序的入口地址。
当操作系统接收到"exit"指令发起的中断请求时,会根据中断类型(在这种情况下为"程序终止")查找中断向量表,找到相应的中断处理程序。
4. 中断处理程序:当中断处理程序被调用时,它会执行一系列操作来终止当前程序的执行。
这些操作可能包括关闭文件句柄、释放内存、保存程序状态等。
处理程序还可能发送一些指令或信号给操作系统,以便进行进程资源的清理和管理。
5. 回收资源:在中断处理程序执行完毕后,操作系统会回收当前程序所占用的系统资源,如内存空间、打开的文件等。
同时,操作系统可能会将控制权交还给调度程序,以决定接下来执行哪个程序。
需要注意的是,实际的中断处理过程可能因操作系统的设计和实现而有所不同。
上述描述提供了一个通用的概念框架,以详细解释"exit"指令的外部中断原理。
外部中断工作原理
外部中断工作原理外部中断是计算机处理器在执行当前指令时,突然发生的来自外部设备或其他处理器的中断请求。
当中断请求发生时,处理器立即停止当前任务的执行,保存当前的执行状态,并转去执行中断服务程序。
中断服务程序完成后,处理器会返回到之前被中断的任务继续执行。
外部中断的工作原理主要包括以下几个步骤:1. 中断请求:外部设备(如键盘、鼠标、打印机等)通过与处理器连接的中断请求线发出中断请求信号。
这个中断请求信号被称为硬件中断。
2. 中断识别:处理器通过中断控制器或中断控制单元来识别并区分不同的中断请求。
中断控制器负责对中断源进行编码,并将中断信号传递给处理器。
3. 中断响应:处理器接收到中断信号后,立即停止当前任务的执行,并保存相关的执行状态。
这包括保存指令执行的位置、寄存器的内容以及当前的运行环境。
处理器将这些信息保存在特定的寄存器或内存区域中。
4. 中断处理程序:处理器会根据中断信号的不同,转向相应的中断服务程序。
中断服务程序是由操作系统或应用程序编写的一段代码,用于处理特定的中断请求。
它会执行一系列的操作来满足外部设备发出的请求,并恢复被中断的任务的执行环境。
5. 中断返回:当中断服务程序执行完毕后,处理器会根据保存的执行状态信息恢复被中断的任务的执行。
处理器将之前保存的指令执行位置、寄存器内容以及运行环境恢复到中断发生时的状态。
被中断的任务会继续执行,从中断点之后的指令开始执行。
处理器完成中断处理后,会继续正常执行后续的指令。
通过外部中断的工作原理,计算机可以及时响应外部设备的请求,并在尽可能短的时间内处理相应的任务。
这使得计算机能够快速地与外部设备进行交互,提高了系统的实时性和响应能力。
外部中断详解
由于不少同学们,学习51单片机到了中断课程的时候,就开始进入一知半解的状态了,为此,开题一篇,以供大家搞明白,中断这回事。
我们还是用清晰点的逻辑来分析,围绕这四个部分来介绍,当然重点在于3和4部分。
通篇我会以让初学者都能看懂的语言来说明。
如果有专业一点的术语名词,我也尽量用简单易懂的描述。
注:本文旨在让大家理解什么是中断和怎么去设置。
具体的东西有些考虑到深浅问题,则跳过不讲。
如需了解,可自行查询资料1.什么是中断?2.为什么要有中断?3.中断怎么触发?4.怎么设置中断?什么是中断?举个老生常谈的例子——接电话。
在一个风和日丽的下午,你在电脑前看着视频,突然间,你桌上的手机来电话了,这时候你就该暂停视频,拿起手机接电话。
OK,回到单片机里来,我们之前写程序,都是在main函数里,甚至main 函数里的while(1)里执行我们的程序。
这就相当于这个例子中的【看视频】,而【电话响了】这个过程,就相当于产生了中断,而【接电话】就是你在中断里做的事情。
为什么要有中断?为什么要有中断,再举一个例子好了。
简单来讲,就是一些程序我们平时不执行,但到了某个特殊时刻,我们才去执行。
所以我们就让这个特殊时刻产生一个中断,这时候,就跳去了我们特殊时刻才执行的函数里了。
什么情况会触发中断?那么,我们什么情况下,单片机才会识别到中断,或者说,什么情况下,单片机才会跳入我们中断的函数里呢?简单来讲,我们的中断大致分为三种,外部中断、定时器中断、串口中断。
这三种的触发方式不一样。
外部中断:顾名思义,就是单片机外部出现了一定的情况,才进入了中断。
89c51有两个外部中断,一个是P3.2引脚,一个是P3.3引脚。
分别是外部中断0和外部中断1。
我们以外部中断0为例,当P3.2这个脚读到一个低电平(0)或者下降沿(由高电平变低电平)的时候,这时单片机自己就识别到了,所以就会自己跳入中断。
定时器中断:定时器中断不再这详细说明,大致是讲,我们可以设置一个时间(或者叫闹钟),然后这个单片机会开始计时,当到了这个时间点,单片机就会跳入中断。
单片机外部中断详解及程序
单片机外部中断详解及程序单片机在自主运行的时候一般是在执行一个死循环程序,在没有外界干扰(输入信号)的时候它基本处于一个封闭状态。
比如一个电子时钟,它会按时、分、秒的规律来自主运行并通过输出设备(如液晶显示屏)把时间显示出来。
在不需要对它进行调校的时候它不需要外部干预,自主封闭地运行。
如果这个时钟足够准确而又不掉电的话,它可能一直处于这种封闭运行状态。
但事情往往不会如此简单,在时钟刚刚上电、或时钟需要重新校准、甚至时钟被带到了不同的时区的时候,就需要重新调校时钟,这时就要求时钟就必须具有调校功能。
因此单片机系统往往又不会是一个单纯的封闭系统,它有些时候恰恰需要外部的干预,这也就是外部中断产生的根本原由。
实际上在第二个示例演示中,就已经举过有按键输入的例子了,只不过当时使用的方法并不是外部中断,而是用程序查询的方式。
下面就用外部中断的方法来改写一下第二个示例中,通过按键来更改闪烁速度的例子(第二个例子)。
电路结构和接线不变,仅把程序改为下面的形式。
#include ;unsigned int t=500; //定义一个全局变量t,并设定初始值为500次//===========延时子函数,在8MHz晶振时约1ms=============void delay_ms(unsigned int k){unsigned int i,j;for(i=0;i<k;i++){for(j=0;j<1140;j++);}}//============主函数==================================void main( void ){DDRB = 0xFF; //设置端口B为输出方向PORTB = 0xFF; //设置端口B的输出为全高电平DDRD = 0x00; //设置端口D为输入方向PORTD = 0xFF; //设定端口D为内部上拉方式,无信号输入时处于高电平状态MCUCR = 0x0A; //设定INT0、INT1为下降沿触发GICR = 0xC0; //使能INT0、INT1中断SREG = 0x80; //使能总中断while(1){PORTB = 0x55; //让接在端口B上的LED显示01010101 delay_ms(t); //延时t个msPORTB = 0xAA; //让接在端口B上的LED显示01010101 delay_ms(t); //延时t个ms}}//============中断函数(外部0)==========================#pragma vector = INT0_vect__interrupt void INT0_Server(void){t = 100; //设定t的值为100次}//============中断函数(外部1)==========================#pragma vector = INT1_vect__interrupt void INT1_Server(void){t = 500; //设定t的值为500次}把上述程序进行编译并下载到单片机中,可以看到结果与第二个示例中的完全一致。
51单片机外部中断详解-(最新版)
一.外部中断相关寄存器1.定时器/计数器控制寄存器控制寄存器(TCON)IT0:外部中断0触发方式控制位当IT0=0时,为电平触发方式(低电平有效)当IT0=1时,为边沿触发方式(下降沿有效)IT1:外部中断1触发方式控制位当IT1=0时,为电平触发方式(低电平有效)当IT1=1时,为边沿触发方式(下降沿有效)2.中断允许控制寄存器(IE)EX0:外部中断0允许位;EX1:外部中断1允许位;EA :CPU中断允许(总允许)位。
二.外部中断的处理过程1、设置中断触发方式,即IT0=1或0,IT1=1或02、开对应的外部中断,即EX0=1或EX1=1;3、开总中断,即EA=1;4、等待外部设备产生中断请求,即通过,口连接外部设备产生中断5、中断响应,执行中断服务函数三.程序编写要求:通过两位按键连接外部中断0和1,设定外部中断0为下降沿触发方式,外部中断1为低电平触发方式,按键产生中断使数字加减,用一位共阳极数码管来显示数值。
目的:感受外部中断对程序的影响,体会低电平触发和下降沿触发的区别。
#include<>#define uint unsigned int #define uchar unsigned char uchar code dat[] ={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};uint num;void main(){EA=1; //开总中断IT0=1; //下降沿触发IT1=0; //低电平触发EX0=1; //外部中断0允许EX1=1; //外部中断1允许while(1){P0=dat[num%10];}}void plus() interrupt 0//外部中断0 {EX0=0;num++;EX0=1;}void minus() interrupt 2//外部中断1{EX1=0;num--;EX1=1;}。
micropython外部中断函数
一、介绍Micropython外部中断函数的概念Micropython是一种精简版本的Python编程语言,专门用于嵌入式系统和微控制器。
它提供了对硬件的直接访问和控制,使得开发者可以使用Python语言来编写嵌入式系统的程序。
外部中断函数是Micropython中一个重要的功能,可以监听和响应外部事件,例如按键按下、传感器触发等,从而实现系统对外部环境的实时响应。
二、Micropython外部中断函数的基本原理1. 外部中断函数的概念外部中断函数是一种特殊的功能,能够在系统的运行过程中,实时地对外部事件进行监听和响应。
它可以在不影响系统正常运行的情况下,立即中断当前的程序执行,执行预先定义的外部中断函数。
这种功能对于嵌入式系统来说非常重要,因为它能够使系统实时地响应外部事件,从而提高系统的可靠性和实用性。
2. Micropython外部中断函数的实现在Micropython中,外部中断函数是通过预先定义的中断处理函数来实现的。
用户可以使用特定的语法和API接口来注册外部中断处理函数,当外部事件发生时,系统会立即执行相应的中断处理函数。
在中断处理函数中,用户可以编写对外部事件的响应逻辑,例如读取传感器数值、控制执行器等。
这种机制可以使得Micropython系统能够实时地响应外部事件,从而实现更加智能和可靠的嵌入式系统。
三、Micropython外部中断函数的应用场景1. 按键按下事件在很多嵌入式系统中,按键按下事件是一个非常常见的外部事件,例如控制器、机器人等。
通过注册外部中断函数,系统可以实时地监测按键按下事件,并且执行相应的逻辑,例如控制器可以根据按键按下事件来实现不同的操作,机器人可以通过按键按下事件来启动或者停止运动。
2. 传感器触发事件传感器是嵌入式系统中常用的外部设备,可以用来感知周围的环境信息,例如光线、声音、温度、湿度等。
通过注册外部中断函数,系统可以实时地监测传感器触发事件,并且执行相应的逻辑,例如控制系统可以根据光线传感器触发事件来调节亮度,温度传感器触发事件来控制风扇开关等。
stm32f103c8t6外部中断原理
一、概述在嵌入式系统中,外部中断是一种常见的事件触发机制,它能够使处理器在执行程序的过程中,及时地响应外部事件的发生,从而提高系统的实时性和稳定性。
在基于STM32F103C8T6芯片的嵌入式系统开发中,外部中断的使用具有重要的意义。
本文将介绍STM32F103C8T6外部中断的原理及其应用。
二、STM32F103C8T6外部中断的原理1. 外部中断概述外部中断是指处理器接收到外部输入信号后,及时地中断当前的程序执行,转而执行事先定义好的中断服务程序。
在STM32F103C8T6芯片中,具有多个外部中断引脚以及相关的中断控制寄存器,可以方便地实现外部中断功能。
2. 中断控制器STM32F103C8T6芯片的中断控制器包含若干中断控制寄存器,用于配置外部中断的触发条件、优先级、使能状态等。
通过对中断控制寄存器的配置,可以灵活地控制外部中断的响应行为。
3. NVICSTM32F103C8T6芯片内部集成了Nested Vectored Interrupt Controller(NVIC),负责管理和调度所有的中断源。
在实现外部中断功能时,需要通过NVIC对外部中断源进行优先级和使能的设置。
4. 外部中断触发条件在STM32F103C8T6芯片中,外部中断可以以上升沿、下降沿、上升沿和下降沿、低电平或者高电平触发。
在配置外部中断时,需要根据实际应用需求选择合适的触发条件,并进行相应的配置。
5. 外部中断服务程序一旦外部中断触发条件满足,处理器将立即响应中断,并跳转到预先定义好的外部中断服务程序中执行。
外部中断服务程序通常用于处理外部事件的逻辑,例如状态更新、数据采集、报警处理等。
三、STM32F103C8T6外部中断的应用1. 外部按键控制在很多嵌入式系统中,外部按键常常作为用户与系统交互的途径。
通过STM32F103C8T6的外部中断功能,可以轻松地实现外部按键的检测和响应,从而实现用户界面的交互控制。
外部中断工作原理阐述
外部中断工作原理阐述一、概述外部中断外部中断是指来自于CPU外部的一种中断信号,它可以打断CPU 当前正在执行的程序,使其转而执行中断服务程序。
外部中断主要由外设或外部事件触发,如键盘输入、定时器溢出、硬件异常等。
二、外部中断的触发与处理外部中断通常由硬件设备或其他外部事件触发,触发条件可以是特定的输入信号、状态变化或硬件异常等。
当一个外部中断被触发时,CPU会立即停止当前正在执行的指令,保存当前的执行现场(包括程序计数器、寄存器等),然后转而执行相应的中断服务程序。
三、外部中断的优先级在多中断系统中,外部中断的优先级是由硬件决定的。
通常情况下,不同的外设会有不同的优先级,而同一个外设的不同中断请求也会有不同的优先级。
CPU会按照优先级高低来处理外部中断,高优先级的中断会打断低优先级的中断。
四、外部中断的响应和嵌套外部中断的响应时间是非常短暂的,通常在几个时钟周期内就能完成响应。
当一个外部中断被触发时,CPU会立即响应并开始执行中断服务程序。
在中断服务程序执行期间,如果有更高优先级的中断请求到来,CPU会中断当前的服务程序,开始执行更高优先级的中断服务程序,这就是中断的嵌套。
五、外部中断的屏蔽和使能为了防止某些中断源过于频繁地中断CPU的正常工作,系统通常会提供对外部中断的屏蔽和使能功能。
通过设置相应的屏蔽位,可以屏蔽某些中断源的中断请求;通过设置相应的使能位,可以使能某些中断源的中断请求。
六、外部中断的中断向量在外部中断发生时,CPU需要知道要执行哪个中断服务程序。
为了解决这个问题,系统通常会使用中断向量表来保存各个外部中断的中断向量。
中断向量表是一个特定的内存区域,每个中断向量对应一个中断服务程序的入口地址。
七、外部中断的应用外部中断在实际的计算机系统中有着广泛的应用。
比如,在操作系统中,外部中断可以用于实现与外部设备的交互,如键盘输入、鼠标操作等;在实时控制系统中,外部中断可以用于实现定时器中断、硬件异常处理等功能。
51单片机中断程序例子
51单片机中断程序例子1. 外部中断程序:外部中断是指由外部设备或外部信号触发的中断。
在51单片机中,通过设置中断允许位和中断优先级来实现对外部中断的响应。
例如,当外部设备发出一个信号时,单片机可以立即停止当前任务,转而执行外部中断程序。
外部中断程序的编写需要根据具体的外部设备和信号进行相应的处理,如读取设备状态、处理数据等。
通过外部中断程序,可以实现单片机与外部设备的互动和数据交换。
2. 定时器中断程序:定时器中断是指通过设置定时器的计数值和中断允许位,使得在指定的时间间隔内触发中断。
在51单片机中,可以通过定时器中断来实现定时任务的执行。
例如,可以设置一个定时器,在每隔一定的时间就触发中断,然后在中断程序中执行相应的任务,如数据采集、数据处理等。
通过定时器中断程序,可以实现定时任务的自动执行,提高系统的实时性和可靠性。
3.串口中断程序:串口中断是指通过串口通信接口接收或发送数据时触发的中断。
在51单片机中,可以通过设置串口中断允许位和中断优先级来实现对串口数据的中断处理。
例如,当接收到一个完整的数据包时,单片机可以立即停止当前任务,转而执行串口中断程序,对接收到的数据进行处理。
通过串口中断程序,可以实现单片机与外部设备的数据交换和通信。
4. ADC中断程序:ADC(模数转换器)中断是指在进行模数转换时触发的中断。
在51单片机中,可以通过设置ADC中断允许位和中断优先级来实现对模数转换结果的中断处理。
例如,当模数转换完成后,单片机可以立即停止当前任务,转而执行ADC中断程序,对转换结果进行处理和分析。
通过ADC中断程序,可以实现对模拟信号的采集和处理,用于实时监测和控制。
5. 外部中断优先级设置:在51单片机中,可以通过设置外部中断的中断优先级来确定中断的响应顺序。
中断优先级越高,优先级越高的中断会先被响应。
通过合理设置中断优先级,可以确保关键任务的及时响应和执行。
例如,当多个外部设备同时发出中断信号时,可以通过设置优先级,确保先响应优先级高的设备,保证系统的正常运行。
单片机中的中断处理机制详解
单片机中的中断处理机制详解中断是单片机系统中一种重要的事件响应机制,它可以在程序执行期间暂停当前任务,切换到执行预先定义的中断服务程序(ISR),处理发生的事件,然后再返回到原来的任务。
中断处理机制可以提高系统的响应速度,实现多任务处理和实时控制。
一、中断的分类根据中断源的不同,中断可以分为外部中断和内部中断两类。
1. 外部中断(外部触发):由单片机外部设备产生的中断请求,如按键、定时器、通信接口等。
外部中断可以通过配置中断触发方式为边沿触发或电平触发来选择中断时机。
2. 内部中断(软件触发):由单片机内部事件产生的中断请求,如定时器溢出、串口接收中断等。
内部中断由硬件自身生成,程序可以设置中断使能位和优先级,通过软件触发来使中断发生。
二、中断的执行过程1. 中断请求:当外部设备产生中断请求或者内部事件满足中断触发条件时,会使中断请求标志位置为1,通知单片机发生了中断请求。
2. 中断响应:单片机在进行指令执行过程中会不断地检测中断请求标志位。
如果中断请求标志位为1,表示有中断请求发生,单片机会立即停止当前任务的执行,保存相关寄存器的值,将中断请求标志位复位,并跳转到相应的中断服务程序(ISR)执行。
3. 中断服务程序(ISR):中断服务程序是为了响应特定中断请求而编写的一段程序代码。
ISR的功能是根据中断源的不同进行相应操作,例如读取外设状态、处理数据等。
在ISR执行过程中,一般需要关闭其他中断,以确保ISR的实时性和正确性。
执行ISR结束后,可以重新开放其他中断,供后续的中断请求使用。
4. 中断返回:ISR执行完毕后,需要通过特定的指令返回到原来的任务继续执行,通常使用“返回指令”(RET)或“中断返回指令”(RETI)完成。
在返回之前,需要恢复保存的寄存器值和标志位的状态。
三、中断优先级当多个中断同时发生时,需要根据实际应用需求设置中断的优先级。
中断优先级决定了中断的执行顺序。
1. 屏蔽优先级:每个中断源都有一个屏蔽位,可以设置为使能中断或屏蔽中断。
单片机中断函数
单片机中断函数一、介绍单片机中断是指在程序运行过程中,当某个事件发生时,CPU暂时停止正在执行的程序,转而去执行另一个与之相关的程序。
这种方式可以提高程序的响应速度和处理效率。
在单片机中,中断分为外部中断和内部中断两种。
二、外部中断1. 外部中断概述外部中断是指由外部设备产生的中断信号,例如按键、传感器等。
当这些设备产生信号时,会向CPU发送一个请求信号,CPU会立即停止当前执行的程序,并跳转到相应的中断服务程序进行处理。
2. 外部中断原理外部设备产生的信号经过滤波和放大后送到单片机的引脚上。
当引脚检测到高电平时,会触发外部中断,并向CPU发送一个请求信号。
CPU接收到请求信号后会立即停止当前执行的程序,并跳转到相应的中断服务程序进行处理。
3. 外部中断使用方法(1)设置引脚为输入模式,并使能对应引脚上的外部中断。
(2)编写相应的中断服务程序,在其中处理相应事件。
(3)在主函数中设置相应引脚上触发条件(例如下降沿触发、上升沿触发等)。
4. 外部中断实例以下是一个外部中断的实例,当按键按下时,LED灯会亮起:```c#include <reg52.h> //头文件sbit KEY = P3^2; //定义按键引脚sbit LED = P1^0; //定义LED引脚void KeyInterrupt() interrupt 0 //中断服务程序{if(KEY == 0) //判断按键是否按下 {LED = ~LED; //LED取反}}void main(){EX0 = 1; //使能外部中断0IT0 = 1; //设置为下降沿触发EA = 1; //总中断使能while(1){; //空循环}}```三、内部中断1. 内部中断概述内部中断是指由CPU内部产生的中断信号,例如定时器溢出、串口接收等。
当这些事件发生时,CPU会自动跳转到相应的中断服务程序进行处理。
2. 内部中断原理定时器和串口等模块在工作过程中会产生相应的标志位,当标志位被设置为1时,会向CPU发送一个请求信号。
单片机外部中断讲解
单片机外部中断讲解在单片机的世界里,外部中断就像是一位“紧急事务专员”,能够在关键时刻打断单片机正在进行的工作,让其优先处理更为重要和紧急的任务。
这一特性使得单片机在应对复杂多变的外部环境时变得更加灵活和高效。
首先,咱们来理解一下什么是外部中断。
简单来说,外部中断就是单片机从外部接收的一种信号,这个信号告诉单片机:“嘿,有重要的事情发生啦,你得马上停下来处理!”这个信号可以来自各种各样的外部设备,比如按键、传感器等等。
那么,单片机是如何感知到这些外部中断信号的呢?这就涉及到单片机的引脚配置。
通常,单片机都会有专门的引脚用于接收外部中断信号。
当外部设备产生中断信号并通过这些引脚输入到单片机时,单片机会立即响应。
外部中断有它自己的触发方式,常见的有边沿触发和电平触发。
边沿触发就像是一个瞬间的“脉冲”,可以是上升沿触发(也就是从低电平变为高电平的那一瞬间),也可以是下降沿触发(从高电平变为低电平的瞬间)。
而电平触发呢,则是根据引脚的高电平或者低电平状态来触发中断。
比如说,设置为高电平触发,那么只要引脚保持高电平,就会一直触发中断。
为了更好地管理外部中断,单片机一般都会有相应的中断控制寄存器。
通过对这些寄存器的配置,我们可以决定是否允许某个外部中断、选择触发方式、设置中断的优先级等等。
接下来,咱们说说外部中断的优先级。
想象一下,如果同时有多个外部中断信号来了,单片机该先处理谁呢?这就需要靠优先级来决定。
优先级高的中断会先得到处理,处理完后再去处理优先级低的中断。
在实际编程中,使用外部中断需要经过一系列的步骤。
首先,要对单片机进行初始化,包括设置中断相关的寄存器。
然后,编写中断服务函数。
这个函数就是单片机在响应中断后要执行的具体任务。
比如说,我们有一个基于单片机的温度监测系统,使用了一个温度传感器。
当温度超过设定的阈值时,传感器会给单片机发送一个外部中断信号。
在中断服务函数里,单片机可能会执行报警操作,比如点亮一个指示灯或者发出声音警报。
avr外部中断详细讲解
另外 ISC01,ISC00 和外部中断 0 设置触发方式有关:
ISC01 0 0 1 1 ISC00 0 1 0 1 说明 INT0 低电平触发中断 INT0 任意逻辑电平变化都触发中断 INT0 的下降沿产生异步中断请求 INT0 的上升沿产生异步中断请求
{ DDRB=0XFF; PORTB=0XFF; DDRD=0XF7; PORTD=0XFF;
//将 PB 口设置为输出 //PB 口输出 11111111,熄灭全部灯 //PD3 设置为输入,其余设置输出 //PD3 使能上拉电阻,其余都输出 1
MCUCR=0X08; //INT1 设置为下降沿触发 GICR=0X80; //使能 INT1 中断 SREG=0X80; //使能总中断 while(1) { PORTB=0X00; delay(100); PORTB=0XFF; delay(100); } }
MCUCR 是 MCU 控制寄存器,在中文版数据手册中 P65:
在这里我们只要关心它的 Bit 0-3,这四位跟外部中断才有关系。 对于上面的表格 Read/Write 代表可读可写,Initial Value 表示初始值,上面表示 默认值都为零。 其中 ISC11,ISC10 和外部中断 1 设置触发方式有关:
第 4 章 轻松掌握外部中断
4.1 什么是外部中断
“中断”这个词来自英文单词“interrupt” ,在单片机中中断的设置,大大提 高了单片机的工作能力。 对于中断的学习是单片机学习中的重点难点,只要掌握了中断,操纵单片机 让它做你想要实现复杂过程就容易多了。 从生活例子来看, 假如说在寝室里只有你一个人, 这个时候你在写一份作业, 写到一半,有人敲门,这时候,你放下笔,走过去开门,是隔壁寝室的同学来还 书,你收下书后,关上门,拿起笔继续写作业。这其中对于你写作业这个事情来 说就是发生了一次中断,而你能够处理这次“开门事件” ,就说明了你有“中断 能力” 。 反过来说,假如你没有中断能力,事情会这样发生:门外有人敲门的时候, 你的作业还没有写完, 你还是继续在写你的作业, 你甚至不知道外面有人在敲门, 于是便漏过了这件事情。 对应于单片机,假如有一段很长的程序要执行,当按键按下的时候,单片机 在执行前面的程序, 按键松开的时候还没有执行到按键扫描程序,一会儿到了执 行按键扫描程序的时候,扫描的结果是按键会是没有按下,这就发生了错误。 假如开启了外部中断,像上面人一样,执行写作业的动作的时候,外面一有 人在敲门,人便立刻知道了,然后放下手中的事情去开门。单片机开启中断后, 一旦有按键按下,单片机便立刻感知,马上去执行按键按下对应的程序。这样便 不会漏过按键对应的命令,保证了程序正常执行。
外部中断PPT课件
断源所对应的中断类型号和中断服务程序入口地址:
中断源
n
入口地址
外部中断0
0
0003H
定时/计数器0 1
000BH
外部中断1
2
0013H
定时/计数器1 3
001BH
串行口
4
0023H
第22页/共34页
例如定时器T0的中断服务程序用如下方法编写:
void time0(void)interrupt 1 using 0 //定时器T0的中断服务函数,T0的编号为1,使用第0组工作寄存器 {
AT89C51
P0.0/AD0 P0.1/AD1 P0.2/AD2 P0.3/AD3 P0.4/AD4 P0.5/AD5 P0.6/AD6 P0.7/AD7
39 38 37 36 35 34 33 32
1 2 3 4 5 6 7 8
P2.0/A8 P2.1/A9 P2.2/A10 P2.3/A11 P2.4/A12 P2.5/A13 P2.6/A14 P2.7/A15
第7页/共34页
(二)80C51中断系统的结构
有5个中断源,2个优先级,可实现二级中断嵌
套 。 TCON
IE
IP
硬件查询
INT0 IT0 1
01
T0 INT1 IT1 1
01
T1
RX TX
EX0 1 EA 1 IE0
ET0 1 TF0
EX1 1 IE1
ET1 1 TF1
RI
TI
≥1
SCON
ES 1
第15页/共34页
该位是“1” 时,为高级 优先级
该位是 “ 0”时, 为低级优先 级
同一优先级中的中断申请不止一个时,则有中断 优先权排队问题。同级的中断优先权排队,由中 断系统硬件确定的自然优先级形成,其排列如所 示:
单片机五种中断类型
单片机五种中断类型
1. 特殊硬件外部中断:
特殊硬件外部中断是指单片机能够监测外部某些特殊硬件信号,当这
些硬件信号跳转电平发生变化时,单片机立刻识别,根据编程代码的
设置打断当前的程序执行,从而进入中断服务程序中执行某些特殊的
功能操作的中断类型,常用的外部硬件设备包括定时器,串行通信端口,外部中断请求线等。
2. 内部特殊条件中断:
内部特殊条件中断是单片机处理器根据内部状态检测特殊条件是否满足,从而自动执行相应的中断服务程序的中断类型。
这些特殊条件包
括计数器溢出,定时器完成重复动作,以及某些子程序返回等,这些
功能有时也被称为定时器硬件中断、子程序中断等。
3. 系统总线外部中断:
系统总线外部中断是指单片机的处理器检测系统总线线路上是否发生
了特殊的外部中断,如系统总线中断请求信号、总线错误检测信号等,如果这些系统总线外部中断发生,处理器就会立刻响应,打断正在执
行的当前程序,从而进入相应的中断服务程序中进行处理。
4. 多重向量中断:
多重向量中断一般由操作系统程序设定,它由一组特殊的中断向量构
成,每个中断向量都是一个指定的处理功能,处理器能够用向量的方式发出中断请求,让存放中断服务程序的芯片知道有哪种中断请求,从而直接进入特定的中断服务程序,而不必做特定的判断操作。
5. 软件中断:
软件中断一般是大多数单片机内部指令集支持的功能,它由单片机内部模拟处理器根据一定的条件执行特定指令,从而发生中断,这通常用来实现操作系统、任务间切换以及响应资源共享等功能,常见的软件中断有中断入口(INT)异常入口(TRAP)等。
单片机中断处理技术详解与应用实例
单片机中断处理技术详解与应用实例引言:单片机中断处理技术是嵌入式系统设计中十分重要的一部分。
通过合理利用中断处理技术,可以提高单片机系统的效率和可靠性。
本文将详细介绍单片机中断处理技术的原理和应用实例,并对其在嵌入式系统中的重要性进行探讨。
一、中断处理技术的原理中断处理技术是一种有效的事件驱动型编程方法,它在单片机工作过程中,能够在特定的事件发生时,立即打断当前正在执行的程序,转而处理该事件,从而提高系统的响应速度和执行效率。
在单片机系统中,中断分为外部中断和内部中断两种类型。
1. 外部中断外部中断是指单片机通过外部引脚接收到的中断信号,例如按键触发的中断。
当外部中断条件满足时,单片机会立即跳转到指定的中断服务子程序(ISR)进行处理。
外部中断可以通过使能寄存器和中断标志位进行控制,并且可以设置不同的中断触发方式,例如上升沿触发、下降沿触发或边沿触发等。
2. 内部中断内部中断是指单片机内部发生的事件触发的中断,例如定时器溢出中断。
内部中断由单片机内部硬件电路自动检测和触发,当中断条件满足时,单片机会自动跳转到相应的中断服务子程序进行处理。
内部中断的触发和控制一般通过相关的中断使能寄存器和中断标志位实现。
二、中断处理技术的应用实例中断处理技术在嵌入式系统设计中广泛应用,下面将介绍几个具体的应用实例,以便更好地理解中断处理技术的应用。
1. 按键中断处理在很多嵌入式系统中,通过按键进行各种控制操作是常见的需求。
通过使用中断处理技术,可以实现对按键的快速响应。
当按键被按下时,触发对应的外部中断,单片机会立即跳转到中断服务子程序进行处理,从而实现对按键事件的响应。
通过合理设计中断服务子程序,可以实现按键的消抖、长按检测和多按键组合等功能。
2. 定时器中断处理定时器是嵌入式系统中常用的计时和计数手段。
通过设置定时器中断,可以在特定的时间间隔内生成中断请求,从而实现时间精确控制。
在定时器中断服务子程序中,可以进行各种时间相关的操作,例如测量时间、控制外设、更新显示等。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
7.1EXTI外部按键中断实验前面我们学习了,LED灯和按键。
实际上对于STM32来说,我们是学习了它的外设GPIO。
这一节我们前面学习的内容,学习STM32的EXTI (External interrupt),即外部中断。
前面的按键章节中,我们检测按键是否被按下的方式是轮询检测的方式,这里我们改为使用中断检测的方式,提高CPU的效率。
7.1.1什么是中断单片机中断系统的概念:什么是中断,我们从一个生活中的例程引入。
比如说你在做A 事,但是突然间来了你想起来了更重要的B事,所以你马上去做B事了,做完之后再回来继续做A事,这个就是中断。
7.1.2什么是单片机的中断?当CPU正在执行一个任务,但突然又发生了一个更高级的任务,CPU必须立即去执行的任务,所以CPU必须中断当前的任务,并保存该任务已经执行的状态和相关信息,然后转而去执行那个更加高级的任务,因此就引入了“中断”这个概念。
中断是指计算机在执行程序的过程中,当出现异常情况或特殊请求时,计算机停止现行程序的运行,转向对这些异常情况或特殊请求的处理,处理结束后再返回现行程序的间断处,继续执行原程序。
中断是单片机实时地处理内部或外部事件的一种内部机制。
当某种内部或外部事件发生时,单片机的中断系统将迫使CPU暂停正在执行的程序,转而去进行中断事件的处理,中断处理完毕后,又返回被中断的程序处,继续执行下去。
在程序里面也是一样的。
举个例子可能会容易懂点,定时中断:比如你定时1ms,主程序在运行,每当1ms时间到后,就跑到定时中断子程序里面执行,执行完后再回到主程序(中断程序是1ms中断一次)。
那对于整个系统来说中断能实现什么好处呢?下面我们给以说明:1)提高了CPU的效率CPU是计算机的指挥中心,它与外围设备(如按键、显示器等)通讯的方法有查询和中断2种:查询的方法是无论外围IO是否需要服务,CPU每隔一段时间都要依次查询一遍,这种方法CPU需要花费一些时间在做查询服务工作。
中断则是在外围设备需要通讯服务时主动告诉CPU,这个时候CPU才停下当前工作去处理中断程序,不需要占用CPU主动去查询的时间,CPU可以在没有中断请求来临之前一直做自己的工作,从而提高了CPU效率。
2)可以实现实时处理外设任何时刻都可能发出请求中断信号,CPU接到请求后及时处理,以满足实时系统的需要。
3)可以及时处理故障计算机系统运行过程中难免会出现故障,有许多事情是无法预料的,如电源掉电、存储器出错、外围设备工作不正常等,这时可以通过中断系统向中断源CPU发送中断请求,由CPU及时转到相应的出错处理程序,从而提高计算机的可靠性。
7.1.3STM32中断的初步理解神舟III号开发板的主芯片是STM32F103ZET6,它采用的是ARM公司的Cortex-M3内核。
Cortex-M3内核支持256个中断,具有256级的可编程中断设置。
但STM32并没有使用M3内核的全部东西,而是只用了它的一部分。
STM32只有84个中断(16个内核+68个外部),具有16级可编程的中断优先级。
Cortex-M3内核具有强大的异常响应系统,它把能够打断当前代码执行流程的事件分为异常(exception)和中断(interrupt),并把它们用一个表管理起来,这个表就称为中断向量表。
而STM32对中断向量表重新进行了编排,把编号从-3至6的中断向量定义为系统异常,编号为负的内核异常不能被设置优先级,如复位(Reset)、不可屏蔽中断 (NMI)、硬错误(Hardfault)。
从编号7开始的为外部中断,这些中断的优先级都是可以自行设置的。
STM32的部分中断向量表如下图,详细内容请参考ST公司提供的参考手册相关中断的章节。
图 中断向量表STM32F103ZET6的芯片属于大容量的产品。
虽然都是STM32的芯片,但是不同类型的产品中断向量表是有区别的。
ST公司的参考手册中针对不同类型的产品,提供有不同的中断向量表。
实际应用的时候我们可以从启动文件startup_stm32f10x_hd.s中查找,在启动文件中,已经有相应芯片可用的全部中断向量。
我们编写代码的时候,在写中断服务函数时,可以从启动文件中定义的中断向量表查找中断服务函数名。
7.1.4STM32中断的初始化过程以及手册的查询关于中断的更加深入的理解查阅手册之后,ST明确给出需要查看另外的几个文档这两个手册都在光盘资料里可以找到,《STM32F10XXX参考手册》中主要介绍的是关于中断的屏蔽,哪根中断线进行上升沿或者下降沿触发等,如下手册目录截图:.这里没有涉及到优先级的设定,优先级的设定具体细节在另外一个手册中就是《STM32F10xxx Cortex-M3编程手册》,如下手册目录截图:最后第三个手册是《CM3技术参考手册》主要是介绍理论上的,介绍整个NVIC的编程器模型,有兴趣的可以详细去研究一下:这么用户手册,那么外部中断初始化的一般要经过那些步骤呢?请见下面:1)初始化IO口为输入。
2)开启IO口复用时钟,设置IO口与中断线的映射关系。
3)初始化线上中断,设置触发条件等(需参考《STM32F10XXX参考手册》)4)配置中断分组(NVIC),并使能中断(需参考《STM32F10xxx Cortex-M3编程手册》)5)编写中断服务函数。
通过以上几个步骤的设置,我们就可以正常使用外部中断了,关于IO口初始化中断之后,唯一复杂的就只剩下中断分组的优先级了,这个优先级原本在51单片机中是比较简单的,但在M3中就被设计得比较复杂一些,优先级无非就是这些任务按先后顺序进行切换,那么我们接来下做一些详细的分析:7.1.5NVIC中断控制器中断的数量到达一定的数量,控制起来变得麻烦,因此Cortex-M3给我们提供了NVIC (Nested Vectored Interrupt Controller),即向量中断控制器。
ST提供的参考手册中,并没有关于NVIC 的描述。
STM32的NVIC描述在手册《STM32F10xxx的Cortex-M3编程手册.pdf》中,特别是对相关寄存器的说明。
STM32采用Cortex-M3内核。
但是STM32并没有使用Cortex-M3内核全部的东西,因此它的NVIC是Cortex-M3内核NVIC的子集。
图 NVIC在内核中的位置我们对NVIC(向量中断控制器)进行操作的时候,一般要调用两个函数,中断分组函数NVIC_PriorityGroupConfig( )和初始化函数NVIC_Init( )。
我们先看一下,这两个函数怎么使用,然后再对重要的概念进行分析。
中断分组函数NVIC_PriorityGroupConfig( ),对于该函数只有一个参数,ST给我们提供了5个可用的参数,我们只需要直接调用即可。
NVIC初始化函数NVIC_Init() ,它有一个参数。
它的参数是一个NVIC_InitTypeDef 类型的结构体。
这个结构体参数一般由我们进行设定。
我们看一下该结构体的成员:NVIC_IRQChannel 需要配置的中断向量NVIC_IRQChannelCmd 使能或关闭相应中断向量的中断响应NVIC_IRQChannelPreemptionPriority配置中断向量抢先优先级NVIC_IRQChannelSubPriority 配置中断向量的响应优先级首先要用NVIC_IRQChannel参数来选择将要配置的中断向量,用NVIC_IRQChannelCmd 参数来进行使能(ENABLE)或关闭(DISABLE)该中断。
这两个比较好理解。
就是STM32的中断那么多,你要确认使用的是那一个,然后使能一下。
NVIC_IRQChannelPreemptionPriority成员配置中断向量的抢先优先级,在NVIC_IRQChannelSubPriority配置中断向量的响应优先级。
这两个优先级也是蛮好理解的。
中断可以停下CPU当前正在执行的任务,转去执行其它的任务。
当一个系统中,有许多的中断时。
大家都是中断,一个中断正在运行时,另一个中断发生,后一个中断是否能够将前一个中断停止,从而去执行其它的任务?当多个中断同时发送时,要先执行那个,后执行那个?这个就是优先级要解决的问题。
优先级的作用就是制定“规则”。
优先级只有在有多个中断的时候,才有意义。
一个系统中,只有一个中断的话,优先级就没有什么意义了。
下面我们详细分析一下,中断分组和中断优先级。
● 抢先优先级和响应优先级STM32的中断具有两个属性,一个为抢先属性,另一个为响应属性,其属性编号越小,表明它的优先级别越高。
抢先,是指打断其它中断的属性,即因为具有这个属性,会出现嵌套中断(在执行中断服务函数A的过程中被中断B打断,执行完中断服务函数B再继续执行中断服务函数A),抢先属性由NVIC_IRQChannelPreemptionPriority的参数配置。
而响应属性则应用在抢先属性相同的情况下,当两个中断向量的抢先优先级相同时,如果两个中断同时到达,则先处理响应优先级高的中断,响应属性由NVIC_IRQChannelSubPriority的参数配置。
例如,现在有三个中断向量:中断向量抢先优先级响应优先级A 0 0B 1 0C 1 1若内核正在执行C的中断服务函数,则它能被抢先优先级更高的中断A打断,由于B 和C的抢先优先级相同,所以C不能被B打断。
但如果B和C中断是同时到达的,内核就会首先响应响应优先级别更高的B中断。
●NVIC的优先级组在配置优先级的时候,还有一个优先级分组。
这个分组,对前面我们提到的抢先优先级和响应优先级进行分组。
就是说,一个中断系统中,有多少个抢先优先级,多少个响应优先级,可以由用户自行设定。
实际上,中断分组是由STM32的寄存器AIRC中PRIGROUP的值设定。
寄存器AIRC 在ST官方提供的参考手册中并没有提到,而是在《STM32F10xxx的Cortex-M3编程手册.pdf》手册中。
在底层的寄存器配置中,中断分组由4个位来决定。
2^4=16,那么NVIC可以配置16种中断向量的优先级。
对于这4bit的中断优先级控制位还分成2组。
第一组是定义抢先式优先级的位,第二组是定义子优先级的位。
4bit的分组组合可以有以下5种形式:组别 4个bit的分配优先级状况第0组 0:4 无抢先式优先级,16个子优先级第1组 1:3 2个抢先式优先级,8个子优先级第2组 2:2 4个抢先式优先级,4个子优先级第3组 3:1 8个抢先式优先级,2个子优先级第4组 4:0 16个抢先式优先级,无子优先级第0组中,4个bit都用来配置抢先优先级,即NVIC配置的2^4 =16种中断向量都是只有抢先属性,没有响应属性。