精华内容
下载资源
问答
  • 外部中断执行流程

    2021-10-22 18:45:44
    设备->中断请求芯片->CPU->...4、保存断点,CPU根据中断号在RAM中的中断向量表中寻找对应中断程序 5、CPU开始执行中断程序 6、中断程序执行完毕,恢复断点 中断请求芯片8259A如下图: ...

    设备->中断请求芯片->CPU->中断向量表(RAM)->中断程序

    1、设备向中断请求芯片发出中断请求

    2、中断请求芯片根据优先级排序选择响应优先级较高的中断

    3、根据响应的中断引脚在其内部存储器取与引脚对应位置的中断号并提交给CPU

    4、保存断点,CPU根据中断号在RAM中的中断向量表中寻找对应中断程序地址

    5、CPU开始执行中断程序

    6、中断程序执行完毕,恢复断点

    中断请求芯片8259A如下图:

    展开全文
  • 5.外部中断初始化,包括中断线,中断触发方式,中断模式和使能 6.配置中断抢占优先级和子优先级,配置之前在主函数比较靠前的位置先设置分组 7.编写中断服务函数,包括中断标志位的判断以及解挂操作 void MY_EXTI_...

    1.使能GPIO
    取决于外部中断线要映射到哪个GPIO
    2.初始化GPIO
    3.使能系统配置时钟SYSCFG
    4.配置中断线,映射到相应GPIO端口
    5.外部中断初始化,包括中断线,中断触发方式,中断模式和使能
    6.配置中断抢占优先级和子优先级,配置之前在主函数比较靠前的位置先设置分组
    7.编写中断服务函数,包括中断标志位的判断以及解挂操作

    void MY_EXTI_INIT()
    {	
    	GPIO_InitTypeDef GPIO_InitStruct;
    	EXTI_InitTypeDef EXTI_InitStruct;
    	NVIC_InitTypeDef NVIC_InitStruct;
    	
    	//1.使能GPIOA
    	RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA,ENABLE);
    	
    	//2.初始化IO口输入
    	GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IN;
    	GPIO_InitStruct.GPIO_OType = GPIO_OType_PP;
    	GPIO_InitStruct.GPIO_Pin = GPIO_Pin_0;
    	GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_DOWN;
    	GPIO_InitStruct.GPIO_Speed = GPIO_Fast_Speed;
    	GPIO_Init(GPIOA,&GPIO_InitStruct);
    	
    	//3.使能SYSCFG
    	RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG,ENABLE);
    	
    	//4.配置中断线,映射到IO口
    	 SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOA,EXTI_PinSource0);
    	
    	//5.配置中断触发方式及使能
    	EXTI_InitStruct.EXTI_Line = EXTI_Line0;
    	EXTI_InitStruct.EXTI_LineCmd = ENABLE;
    	EXTI_InitStruct.EXTI_Mode = EXTI_Mode_Interrupt;
    	EXTI_InitStruct.EXTI_Trigger = EXTI_Trigger_Rising;
    	EXTI_Init(&EXTI_InitStruct);
    	
    	//6.配置中断优先级
    	NVIC_InitStruct.NVIC_IRQChannel = EXTI0_IRQn;
    	NVIC_InitStruct.NVIC_IRQChannelCmd = ENABLE;
    	NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority = 0;
    	NVIC_InitStruct.NVIC_IRQChannelSubPriority = 1;
    	NVIC_Init(&NVIC_InitStruct);	
    }
    //7.编写中断服务函数
    void EXTI0_IRQHandler(void)
    {
    	//中断服务函数
    	//获取状态
    	 if(EXTI_GetFlagStatus(EXTI_Line0)==1)
    	 {	
    		delay_ms(10);
    		if(WK==1)
    			LED0 = ~LED0;
    	 }
    	 //解挂
    	 EXTI_ClearITPendingBit(EXTI_Line0);
    }
    
    展开全文
  • 中断和中断处理流程

    千次阅读 2020-12-20 04:41:20
    1. 中断概念中断是指由于接收到来自外围硬件(相对于中央处理器和内存)的异步信号或来自软件的同步信号,而进行相应的硬件/软件处理。发出这样的信号称为进行中断请求(interrupt request,IRQ)。硬件中断导致处理器...

    1. 中断概念

    中断是指由于接收到来自外围硬件(相对于中央处理器和内存)的异步信号或来自软件的同步信号,而进行相应的硬件/软件处理。发出这样的信号称为进行中断请求(interrupt request,IRQ)。硬件中断导致处理器通过一个上下文切换(context switch)来保存执行状态(以程序计数器和程序状态字等寄存器信息为主);软件中断则通常作为CPU指令集中的一个指令,以可编程的方式直接指示这种上下文切换,并将处理导向一段中断处理代码。中断在计算机多任务处理,尤其是实时系统中尤为有用。这样的系统,包括运行于其上的操作系统,也被称为“中断驱动的”(interrupt-driven)。

    中断是一种使CPU中止正在执行的程序而转去处理特殊事件的操作,这些引起中断的事件称为中断源,它们可能是来自外设的输入输出请求,也可能是计算机的一些异常事故或其它内部原因。

    中断:在运行一个程序的过程中,断续地以“插入”方式执行一些完成特定处理功能的程序段,这种处理方式称为中断。

    2. 中断的作用

    并行操作

    硬件故障报警与处理

    支持多道程序并发运行,提高计算机系统的运行效率

    支持实时处理功能

    3. 术语

    按中断源进行分类:发出中断请求的设备称为中断源。按中断源的不同,中断可分为

    内中断:即程序运行错误引起的中断

    外中断:即由外部设备、接口卡引起的中断

    软件中断:由写在程序中的语句引起的中断程序的执行,称为软件中断

    允许/禁止(开/关)中断: CPU通过指令限制某些设备发出中断请求,称为屏蔽中断。从CPU要不要接收中断即能不能限制某些中断发生的角度 ,中断可分为

    可屏蔽中断 :可被CPU通过指令限制某些设备发出中断请求的中断, 那是不是意味着进中断时disable整个中断,其实disable的都是可屏蔽中断?

    不可屏蔽中断:不允许屏蔽的中断如电源掉电

    中断允许触发器:在CPU内部设置一个中断允许触发器,只有该触发器置“1”,才允许中断;置“0”,不允许中断。

    指令系统中,开中断指令,使中断触发器置“1”

    关中断指令,使中断触发器置“0”

    中断优先级:为了管理众多的中断请求,需要按每个(类)中断处理的急迫程度,对中断进行分级管理,称其为中断优先级。在有多个中断请求时,总是响应与处理优先级高的设备的中断请求。

    中断嵌套:当CPU正在处理优先级较低的一个中断,又来了优先级更高的一个中断请求,则CPU先停止低优先级的中断处理过程,去响应优先级更高的中断请求,在优先级更高的中断处理完成之后,再继续处理低优先级的中断,这种情况称为中断嵌套。

    Intel的官方文档里将中断和异常理解为两种中断当前程序执行的不同机制。这是中断和异常的共同点。不同点在于:

    中断(interrupt)是异步的事件,典型的比如由I/O设备触发;异常(exception)是同步的事件,典型的比如处理器执行某条指令时发现出错了等等。

    中断又可以分为可屏蔽中断和非可屏蔽中断,异常又分为故障、陷阱和异常中止3种,它们的具体区别很多书籍和官方文档都解释的比较清楚这里不再赘述。

    关于它们的区别有两点是需要注意的:

    平常所说的屏蔽中断是不包括异常的,即异常不会因为CPU的IF位被清(关中断,指令:cli)而受影响,比如缺页异常,即使关了中断也会触发CPU的处理,回答了我上面红色部分疑问。

    通常说的int 80h这种系统调用使用的中断方式实际上硬件上是理解为异常处理的,因此也不会被屏蔽掉,这也很好理解,int 80h这种中断方式是程序里主动触发的,对于CPU来说属于同步事件,因此也就属于异常的范畴。

    4. 中断(异常)处理过程

    需要明确的一点是CPU对于中断和异常的具体处理机制本质上是完全一致的,即:

    当CPU收到中断或者异常的信号时,它会暂停执行当前的程序或任务,通过一定的机制跳转到负责处理这个信号的相关处理程序中,在完成对这个信号的处理后再跳回到刚才被打断的程序或任务中。这里只描述保护模式下的处理过程,搞清楚了保护模式下的处理过程(更复杂),实模式下的处理机制也就容易理解了。

    具体的处理过程如下:

    1)  中断响应的事前准备:

    系统要想能够应对各种不同的中断信号,总的来看就是需要知道每种信号应该由哪个中断服务程序负责以及这些中断服务程序具体是如何工作的。系统只有事前对这两件事都知道得很清楚,才能正确地响应各种中断信号和异常。

    系统将所有的中断信号统一进行了编号(一共256个:0~255),这个号称为中断向量,具体哪个中断向量表示哪种中断有的是规定好的,也有的是在给定范围内自行设定的。  中断向量和中断服务程序的对应关系主要是由IDT(中断向量表)负责。操作系统在IDT中设置好各种中断向量对应的中断描述符(一共有三类中断门描述符:任务门、中断门和陷阱门),留待CPU查询使用。而IDT本身的位置是由idtr保存的,当然这个地址也是由OS填充的。

    中断服务程序具体负责处理中断(异常)的代码是由软件,也就是操作系统实现的,这部分代码属于操作系统内核代码。也就是说从CPU检测中断信号到加载中断服务程序以及从中断服务程序中恢复执行被暂停的程序,这个流程基本上是硬件确定下来的,而具体的中断向量和服务程序的对应关系设置和中断服务程序的内容是由操作系统确定的。

    2) CPU检查是否有中断/异常信号

    CPU在执行完当前程序的每一条指令后,都会去确认在执行刚才的指令过程中中断控制器(如:8259A)是否发送中断请求过来,如果有那么CPU就会在相应的时钟脉冲到来时从总线上读取中断请求对应的中断向量[2]。

    对于异常和系统调用那样的软中断,因为中断向量是直接给出的,所以和通过IRQ(中断请求)线发送的硬件中断请求不同,不会再专门去取其对应的中断向量。

    3) 根据中断向量到IDT表中取得处理这个向量的中断程序的段选择符

    CPU根据得到的中断向量到IDT表里找到该向量对应的中断描述符,中断描述符里保存着中断服务程序的段选择符。

    4) 根据取得的段选择符到GDT中找相应的段描述符

    CPU使用IDT查到的中断服务程序的段选择符从GDT中取得相应的段描述符,段描述符里保存了中断服务程序的段基址和属性信息,此时CPU就得到了中断服务程序的起始地址。这里,CPU会根据当前cs寄存器里的CPL和GDT的段描述符的DPL,以确保中断服务程序是高于当前程序的,如果这次中断是编程异常(如:int 80h系统调用),那么还要检查CPL和IDT表中中断描述符的DPL,以保证当前程序有权限使用中断服务程序,这可以避免用户应用程序访问特殊的陷阱门和中断门[3]。

    5) CPU根据特权级的判断设定即将运行的中断服务程序要使用的栈的地址

    CPU会根据CPL和中断服务程序段描述符的DPL信息确认是否发生了特权级的转换,比如当前程序正运行在用户态,而中断程序是运行在内核态的,则意味着发生了特权级的转换,这时CPU会从当前程序的TSS信息(该信息在内存中的首地址存在TR寄存器中)里取得该程序的内核栈地址,即包括ss和esp的值,并立即将系统当前使用的栈切换成新的栈。这个栈就是即将运行的中断服务程序要使用的栈。紧接着就将当前程序使用的ss,esp压到新栈中保存起来。也就说比如当前在某个函数中,使用的栈,在中断发生时,需要切换新的栈。

    6) 保护当前程序的现场

    CPU开始利用栈保护被暂停执行的程序的现场:依次压入当前程序使用的eflags,cs,eip,errorCode(如果是有错误码的异常)信息。

    官方文档[1]给出的栈变化的示意图如下:

    7) 跳转到中断服务程序的第一条指令开始执行

    CPU利用中断服务程序的段描述符将其第一条指令的地址加载到cs和eip寄存器中,开始执行中断服务程序。这意味着先前的程序被暂停执行,中断服务程序正式开始工作。

    8) 中断服务程序处理完毕,恢复执行先前中断的程序

    在每个中断服务程序的最后,必须有中断完成返回先前程序的指令,这就是iret(或iretd)。程序执行这条返回指令时,会从栈里弹出先前保存的被暂停程序的现场信息,即eflags,cs,eip重新开始执行。

    展开全文
  • stm32 HAL库开发,演示怎么用CubeMX配置外部中断

    实验目的:把按键当中断源,每产生一个中断,LED灯就改变一次状态(亮或者灭)

    实验现象:

     一、CubeMX配置

            打开CubeMX创建一个新工程,设置时钟、配置调试方式等,参考点亮led等那一节,这里直接演示怎么配置中断引脚。

            开发板原理图如图:        按键接在单片机的PA0引脚上。按键没有按下时对应SW1断开,这时PA0引脚接地;按键按下时PA0接高电平。按键两端并联的电容是为了实现硬件去抖。

    1、将PA0配置成外部中断模式

            CubeMX的配置如图:

     将PA0引脚配置成外部中断模式,下拉模式、上升沿触发。也就是说,当PA0从低电平跳变到高电平时,将会触发中断;对应按键按下时触发中断。

            另外PB5引脚是和led灯相连的,这里需要把PB5配置成输出模式。

    2、在NVIC中开启PA0的引脚的中断

            把中断EXTI0打上对勾,就开启中断了。

     二、写代码

            上面的配置好后就可以生成代码了。

            代码生成好,找到main.c中的user code begin 4段落,写上下面的代码:

    /* USER CODE BEGIN 4 */
    void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
    {
    	HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_5); //翻转PB5引脚的电平,改变led灯的状态
    }
    /* USER CODE END 4 */

            这个函数是中断产生后由HAL库中的中断处理代码自动调用的。注意这个函数的名称、参数、返回值必须按照上面的写,才能被正常调用。

            插一嘴,void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)这个函数已经在HAL库中弱定义了,我们这里把他重写出来,就类似Java或者C++里重写抽象方法一样。

    展开全文
  • 1. 对异常概念的理解异常就是可以打断CPU...2.Linux内核中断处理流程基于Linux-2.6.29.41、Linux内核中异常向量表的拷贝内核启动时将异常向量表从物理地址0x00000000拷贝到0xffff0000的虚拟地址中去;其中异常向量...
  • 51单片机 外部中断

    千次阅读 2021-04-09 21:13:42
    CPU与外设并行工作,当外设数据准备好或者有某种突发事件发生时,向CPU提出请求,CPU暂停正在进行的工作,为该外设服务(或者处理紧急事件),处理完毕后回到原断点继续执行原程序。该过程叫做中断。 二、什么是中断...
  • 单片机外部中断详解及程序

    千次阅读 2021-04-23 11:34:03
    单片机在自主运行的时候一般是在执行一个死循环程序,在没有外界干扰(输入信号)的时候它基本处于一个封闭状态。比如一个电子时钟,它会按时、分、秒的规律来自主运行并通过输出设备(如液晶显示屏)把时间显示出来...
  • 中断”与“轮询”“中断处理并非单片机控制系统所特有的现象,在我们的日常生活中“中断”的例子也随处可见。让我们来看看身边的例子吧。比如尽管您知道今天有快递送到,但却不知道快递送来的具体时间,在这种...
  • Linux中断处理

    2020-12-29 10:02:16
    4.中断处理流程。5.各类型中断的具体执行流程。中断的类型及具体的种类Linux0.11内核注释1.可屏蔽硬件中断。优先级较低,可以被忽略或者延后处理,通常有键盘,打印机。2.不可屏蔽硬件中断。CPU必须无条件响应,...
  • 实验板子:tiny210(芯片:s5pv210)实验目的:通过外部中断操作两个按键实现对LED灯的亮灭控制步骤:①初始化GPIO端口,使GPIO为外部中断状态;(寄存器:GPxxCON)例:②配置外部中断触发模式,上升沿触发,下降沿触发...
  • flag是申请时的选项,它决定中断处理程序的一些特性,其中最重要的是中断处理程序是快速处理程序(flag里设置了SA_INTERRUPT)还是慢速处理程序(不设置SA_INTERRUPT),快速处理程序运行时,所有中断都被屏蔽,而...
  • STM32-外部中断

    2021-10-02 22:07:22
    1 外部中断概述 EXTI(External interrupt/event controller)—外部中断/事件控制器,和在STM32NVIC中断优先级管理(中断向量表)中讲述的CM3内核的外部中断不同。特指的是,在中断向量表中的EXTI的外部中断。STM...
  • } } 2.2 外部中断 分析 可以看到,外部中断是非常符合上面这个中断流程的 打个比方,我要在床上吹风扇,我自己的电线不够长,我要用我室友的插排。首先我先要和室友请求,室友同意我就插上去了,最后需要室友把总...
  • 现在许多MCU都内嵌有中断,C51中有5个中断源,今天我们就来做一下外部中断的实验,使用的是外部中断0(INT0)。 文章目录前言中断系统1、中断系统的内部结构2、C51中断源3、中断有关寄存器(1)、中断请求寄存器...
  • CPU在执行的过程中,一般来说都是在执行主程序(main函数里面的代码)。... MCS-51 单片机中,有两个外部中断(INT0与INT1),中断有两种方式低电平触发与负跳变(下降沿)触发。 下面通过讲IN...
  • 恢复现场 POP PSW RETI 外部中断和定时器的中断的区别在于: 1、外部中断是靠中断来实现中断程序的,定时器是看对应的标志位是否出现溢出来实现中断的,出现溢出就处理,没有溢出就不处理。 2、外部中断需要给出...
  • 目录一、中断和异常二、NVIC和EXTI1、嵌套向量中断控制器(NVIC)2、外部中断/事件控制器(EXTI)3、区别三、NVIC寄存器和EXTI寄存器1、NVIC中的寄存器四、中断向量表 一、中断和异常 1、中断——当需要出现时,CPU暂时...
  • CPU与外设并行工作,当外设数据准备好或者有某种突发事件发生时,向CPU提出请求,CPU暂停正在进行的工作,转而为该外设服务(或者是处理紧急事件),处理完毕后再回到原断点继续执行原程序。这个过程称为中断中断...
  • 然后利用32的外部中断和定时器来测量32输出的波形 硬件:STM32F103C8T6核心板、示波器、串口调试助手 所用到的的引脚为PA8和PA0。 测量方案:在第一次外部中断(上升沿触发)到之时,开启定时器,同时计数器清零。...
  • 3、掌握中断处理程序的编写方法 4、熟悉接口程序调试方法。 二、实验设备(仪器) PC 微机一台 三、实验原理 1、外部中断的初始化设置共有三项内容:中断总允许即EA=1,外部中断允许即EXi=1(i=0或1),中断方式设置...
  • 学会知识只需要不段的积累和提高,但是如何将知识系统的讲解出来就需要...1.外部中断如果已经学习了SysTick系统时钟滴答实验,掌握了Cortex-M3中断的相关知识,那么外部中断也是比较好理解的,和SysTick中断一样,...
  • (1)利用外中断/INT0,控制P1口所接LED花样闪烁。 (2)利用外中断/INT1,统计中断次数,并将统计结果送P1口的8位LED显示。
  • 单一外部中断的应用

    2020-12-20 17:12:22
    80C51中断系统的组成 TCON寄存器(Timer/Counter Control Register) TCON为定时/计数器控制寄存器 SCON寄存器(Serial Control Register) SCON为串口寄存器 IE寄存器(Interrupt Enable Register) IE为...
  • 中断怎么发生,中断处理大概流程 1. 中断概念:  中断是指由于接收到来自外围硬件(相对于中央处理器和内存)的异步信号或来自软件的同步信号,而进行相应的硬件/软件处理。发出这样的信号称为进行中断请求...
  • 开发板IO口外部中断硬件电路2.STC8A8K64S4A12系列MCU外部中断3.单片机中断方式和查询方式4.外部中断配置步骤二、软件设计1.寄存器解析1.1.中断允许寄存器IE1.2.外部中断和时钟输出控制寄存器INTCLKO21.3.定时器/...
  • 三、CC2530的中断处理函数编写方法 四、CC2530的外部中断 五、实训案例:外部中断输入控制LED灯 一、中断相关的基础概念 内核与外设之间的主要交互方式有两种:轮询和中断。轮询的方式貌似公平,但实际工作效率...
  • 中断服务程序流程

    千次阅读 2020-12-20 04:41:20
    教学方法、实施步骤时间分配教学手段回顾...输入/输出设备称为外部设备,与存储器相比,外部设备有其本身的特点,存储器较为标准,而外部设备则比较复杂,性能的离散性比较大,不同的外部设备,其结构方式不同,有机...
  • 一个完整的中断处理过程应该包括

    千次阅读 2020-12-23 01:30:11
    一个完整的中断处理过程应该包括:中断请求、中断排队或中断判优、中断响应、中断处理和中断返回等环节,下面分别进行讨论。1.中断请求中断请求是由中断源向CPU发出中断请求信号。外部设备发出中断请求信号要具备...
  • 按键的外部中断0 前言1 基础知识1.1 按键原理图1.2 按键软件消抖1.3 外部中断2 程序的学习2.1 按键的外部中断在CubeMX里的配置2.2 HAL_GPIO_ReadPin函数介绍2.3 中断回调函数介绍2.4 程序中的前后

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 65,744
精华内容 26,297
关键字:

外部中断的处理流程