精华内容
下载资源
问答
  • 1、中断类型 从之前串口实验可以看出,STM32总共分为内部中断和外部中断,内部和...2、外部中断配置过程 1、开时钟(必须开启复用时钟) 2、初始化用到GPIO口 3、将使用到GPIO口挂载到中断线上 GPIO_EXTILineCon

    1、中断类型

    从之前的串口实验可以看出,STM32总共分为内部中断和外部中断,内部和外部的配置差别不是很大,外部中断只是多了一步,需要通过
    GPIO_EXTILineConfig(uint8_t GPIO_PortSource, uint8_t GPIO_PinSource)函数(在stm32f10x_gpio.h里面)
    将外部中断源挂载到中断线上即可。

    2、外部中断配置过程

    1、开时钟(必须开启复用时钟)
    2、初始化用到的GPIO口
    3、将使用到的GPIO口挂载到中断线上 GPIO_EXTILineConfig(uint8_t GPIO_PortSource, uint8_t GPIO_PinSource)函数
    4、配置EXTI_Init() //中断线,中断的类型、触发方式
    5、配置NVIC_Init() //中断优先级
    6、编写中断服务函数

    3、外部中断的主要配置说明

    1)NVIC
    外部出现满足中断条件,开始执行中断服务函数,如同时出现多个中断,则根据NVIC设定的优先级开始执行中断函数。
    NVIC分组分析:NVIC的库函数和结构体定义都在misc文件中。
    NVIC的分组分为两组,但优先级总数不变,均为16组,并且编号越小,优先级越高

    ============================================================================================================================
        NVIC_PriorityGroup   | NVIC_IRQChannelPreemptionPriority | NVIC_IRQChannelSubPriority  | Description
      ============================================================================================================================
       NVIC_PriorityGroup_0  |                0                  |            0-15             |   0 bits for pre-emption priority
                             |                                   |                             |   4 bits for subpriority
      ----------------------------------------------------------------------------------------------------------------------------
       NVIC_PriorityGroup_1  |                0-1                |            0-7              |   1 bits for pre-emption priority
                             |                                   |                             |   3 bits for subpriority
      ----------------------------------------------------------------------------------------------------------------------------    
       NVIC_PriorityGroup_2  |                0-3                |            0-3              |   2 bits for pre-emption priority
                             |                                   |                             |   2 bits for subpriority
      ----------------------------------------------------------------------------------------------------------------------------    
       NVIC_PriorityGroup_3  |                0-7                |            0-1              |   3 bits for pre-emption priority
                             |                                   |                             |   1 bits for subpriority
      ----------------------------------------------------------------------------------------------------------------------------    
       NVIC_PriorityGroup_4  |                0-15               |            0                |   4 bits for pre-emption priority
                             |                                   |                             |   0 bits for subpriority                       
      ============================================================================================================================
    

    这里解释一下中断优先级分组是什么意思,有什么作用
    第二列:NVIC_IRQChannelPreemptionPriority 抢占优先级
    第三列:NVIC_IRQChannelSubPriority 响应优先级
    (1)抢占优先级:指此中断的抢占能力,抢占优先级越高,则此中断就可以打断优先级低的函数,这样就会出现中断的嵌套。①两个抢占优先级一样的中断同时到达,那么就会比较响应优先级,越高越先反应;②两个抢占优先级一样的中断不同时到达,无关响应优先级,前一中断不会被打断,直到执行完前一中断,才会执行后一个中断。
    (2)响应优先级:同时到达的中断的响应先后。两个抢占优先级一样的中断同时到达,那么就会比较响应优先级,越高越先反应。

    2)中断服务函数
    中断服务函数已经在“startup_stm32f10x_hd.s”中的264-323行声明,需要哪种中断直接去找即可。在配置EXTI时使用的中断线是哪一条,那么中断服务函数就选择哪一个。
    个人建议所有的中断服务函数写在“stm32f10x_it.c”中,然后在原本设置的.c文件里面打一个备注,这样中断服务函数一目了然,在各个子程序里面也可以看到备注。

    4、代码示例

    /*
    *main.c中需要添加
    */
    	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //设置NVIC中断分组2:2位抢占优先级,2位响应优先级	
    	LED_Init();
    	KEY_Init();   	
    	EXTI_Config();	
    
    /*
    *EXTI 和 NVIC 配置函数
    */
    void EXTI_Config(void)
    {
    	EXTI_InitTypeDef	EXTI_InitStructure;
    	NVIC_InitTypeDef	NVIC_InitStructure;
    	
    	KEY_Init();//先配置需要用到的按键
    	
    	RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);//一定要开启复用时钟
    	
    //KEY1 PE3 	上升沿	优先级2 1
    	GPIO_EXTILineConfig(GPIO_PortSourceGPIOE,GPIO_PinSource3);
    	EXTI_InitStructure.EXTI_Line = EXTI_Line3;
    	EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
    	EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;
    	EXTI_Init(&EXTI_InitStructure);	
    	
    	NVIC_InitStructure.NVIC_IRQChannel = EXTI3_IRQn;
    	NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x02;
    	NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x01; 
    	NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
    	NVIC_Init(&NVIC_InitStructure);
    }
    
    /*
    *中断服务函数
    */
    //KEY1 中断服务函数
    void EXTI3_IRQHandler(void)
    {
    	delay_ms(10);//消抖
    	if(KEY1 == 1)
    	{
    		LED1 = !LED1;
    	}
    	EXTI_ClearITPendingBit(EXTI_Line3); //清除LINE3上的中断标志位  
    }
    
    展开全文
  • 内部中断是不可屏蔽的中断 软中断优先级最高 外部中断是可屏蔽中断 比如软中断 就可以屏蔽 不响应 还有响应中断的话 是必须联和设置才可以响应 否则不会响应 比如ss:sp 这个联合设置 代码举例 mov ax,1000H mov ss,...

    内部中断是不可屏蔽的中断 软中断优先级最高 外部中断是可屏蔽中断 比如软中断 就可以屏蔽 不响应
    还有响应中断的话 是必须联和设置才可以响应 否则不会响应 比如ss:sp 这个联合设置 代码举例
    mov ax,1000H
    mov ss,ax
    mov sp,0
    这种是可行的 因为ss和sp是联合起来设置 如果ss 和sp 设置中间有额外的指令插入 那么就会无响应

    中断的过程:
    1.cpu取得中断类型码 放入中断装置
    2.TF=IF=0 TF 是控制中断是否可进行中断 并且跟踪中断 IF是是否允许中断
    3.pushf 存入标志寄存器到栈
    4.然后将 cs:ip 从高地址依次存入栈
    5然后通过数据总线取到 cs:类型码4+2 ip:类型码4
    6.然后执行对应的中断处理程序

    注意:中断向量表存储在0000:0000 到0000:03FFH 中断向量表 也就是指的是存储中断处理程序的位置 总共有256种处理程序 但是一般8086 的0000到02ff 偏移地址内 是 无程序的 总共有1k个存储单元

    展开全文
  • 蓝桥杯 — 外部中断

    2020-02-14 19:13:25
    CPU暂时停止当前工作(中断响应),转而去处理事件B(中断服务),待CPU处理事件B完成后,再回到原来事件A被中断地方继续处理事件A(中断返回)。 ①中断源// 5个中断源都有一个中断入口地址,当某个中断源...

    目录

     

    1、中断过程

    2、中断引脚与相关寄存器

    3、外部中断实例

    4、结论与体会


    1、中断过程

            对于单片机来讲,中断是指CPU在处理某一时间A时,发生了另一事件B请求CPU立刻去处理(中断发生);CPU暂时停止当前的工作(中断响应),转而去处理事件B(中断服务),待CPU处理事件B完成后,再回到原来事件A被中断的地方继续处理事件A(中断返回)。

            ① 中断源 // 5个中断源都有一个中断入口地址,当某个中断源产生中断时,CPU响应中断便到相应的中断入口地址执行中断服务程序

    51单片机中无T2时
                外部中断请求源                                      内部中断请求源
                    INT0、INT1                                       T0、T1、TI\RI

            ② 中断的嵌套与优先级处理与起始地址

                  自然优先级关系:INT0>T0>INT1>T1>串口通信

            ③ 中断的响应过程

    2、中断引脚与相关寄存器

    (1)引脚P3.2和P3.3

              对应关系:       P32(外部中断0)——按键S5    ;  P33(外部中断1)——按键S4

    (2)控制寄存器

     \bullet IE:中断允许寄存器

    •  EA:中断总控制位。EA=1,CPU开放所有中断;EA=0,CPU禁止所有中断。
    • ES:串行口中断控制位。ES=1,允许串行口中断;ES=0,屏蔽串行口中断。
    • ET1:定时/计数器TI中断控制位。ET1=1,允许T1中断;ET1=0,禁止T1中断。
    • EX1:外部中断1中断控制位。EX1=1,允许外部中断1中断;EX1=0,禁止外部中断1中断。
    • ET0:定时/计数器T0中断控制位。ET0=1,允许T0中断;ET0=0,禁止T0中断。
    • EX0:外部中断0中断控制位。EX0=1,允许外部中断0中断;EX0=0,禁止外部中断0断。

     \bullet IP:中断优先级寄存器

     

           在该寄存器中,优先级分为1 、0两级,对应的位置为1则为高优先级,位置为0则为低优先级。执行时先将高优先级的中断执行完后才会执行低优先级(同样高优先级情况下,按默认优先级排)。

    • PS:串行口中断优先级控制位
    • PT1:定时器1优先级控制位
    • PX1:外部中断1优先级控制位
    • PT0:定时器0优先级控制位
    • PX0:外部中断0优先级控制位

    (3)中断请求标志寄存器

    \bulletTCON寄存器

           低4位给外部中断请求源使用,高4位给内部中断请求源定时器T0 T1使用

     

    外部请求源:

    • IT0:INT0触发方式控制位,可由软件进行置位和复位。IT0=0时,INT0为低电平触发方式。IT0=1时,INT0为负跳变触发方式。
    • IE0:INT0中断请求标志位。当有外部的中断请求时,该位置1(这由硬件来完成),在CPU响应中断后,由硬件将IE0清0。
    • IT1、IE1的用途和IT0、IE0相似。

    内部请求源:

    • TF0:定时/计数器T0溢出中断标记,当T0产生溢出时,TF0置位。当CPU响应中断后,硬件将TF0复位
    • TR0:T0的开闭控制位,TR0=1时定时计数器打开,TR0=0时定时计数器关闭
    • TF1、TR1与TF0、TR0相似。

    \bullet SCON寄存器

     低2位与串口中断相关
    低2位与串口中断相关

     

    内部请求源:

    • TI、RI:串行口发送、接收中断

    3、外部中断实例

     例1:使用中断INT0控制一个LED灯;

    #include<reg52.h>
    
    sbit LED=P0^0;
    void Init_interrupt();
    
    void main(){
    P2=0XA0;P0=0X00;P2=0X80;P0=0XFF;  //初始化
    Init_interrupt();
    while(1);
    }
    
    //中断初始化
    void Init_interrupt(){
    EX0=1;	         //定时/计数器T0中断控制位。ET0=1,允许T0中断;
    IT0=1;			//INT0触发方式控制位,可由软件进行置位和复位。IT0=1时,INT0为负跳变触发方式。
    EA=1;			//中断总控制位。EA=1,CPU开放所有中断;
    }
    
    //中断服务函数
    void isr_interrupt0() interrupt 0  //外部中断优先级最高
    {
    P2=((P2&0X1F)|0X80);
    LED=~LED;
    P2=P2&0X1F;
    }
    
     

     例2:使用中断控制数码管显示0到9

    #include<stc15f2k60s2.h>
    unsigned int i=0;
    unsigned char code tab[]={0XC0,0XF9,0XA4,0XB0,0X99,0X92,0X82,0XF8,0X80,0X90};
    void Init_interrupt0();
    void main(){
    P2=0XA0;P0=0X00;P2=0X80;P0=0XFF;
    P2=0XC0;P0=0X01;P2=0XFF;P0=0XFF;
    Init_interrupt0();
    while(1){
    }
    }
    
    void Init_interrupt0(){
    EX0=1;
    IT0=1;
    EA=1;
    }
    
    void Service_interrupt0() interrupt 0
    {
    P2=((P2&0X1F)|0X80);
    P2=0XA0;P0=0X00;P2=0X80;P0=0XFF;
    P2=0XC0;P0=0X01;P2=0XFF;P0=0XFF;
    P0=tab[i];
    i++;
    if(i==10) i=0;
    P2=P2&0X1F;
    }
    
    

    4、结论与体会

    中断部分要会写中断初始化函数(对于外部中断0来说):EX0=1(允许外部中断0),IT0=1(触发方式),EA=1(开启总中断),就这三个操作。

    对于中断服务函数来说:要记着P2=((P2&0X1F)|0X80)和P2=P2&0X1F这两个操作代码。

    展开全文
  • CPU在执行的过程中,一般来说都是在执行主程序(main函数里面代码)。... MCS-51 单片机中,有两个外部中断(INT0与INT1),中断有两种方式低电平触发与负跳变(下降沿)触发。 下面通过讲IN...

    CPU在执行的过程中,一般来说都是在执行主程序(main函数里面的代码)。如果希望处理其他的功能,可以通过查询的方式进行,判断是否需要处理或者通过中断的方式,进入中断服务函数程序里面执行。

        前者是在主程序中判断条件是否成立,如果成立则执行其他功能,否则不执行;后者是CPU在执行过程中,判断是否有中断标志位,响应中断进入中断服务函数,执行相关功能。

        MCS-51 单片机中,有两个外部中断(INT0与INT1),中断有两种方式低电平触发与负跳变(下降沿)触发。

     

        下面通过讲INT0说明外部中断,INT1同理。

     

        原理图:

        P0连接8个LED,INT0引脚连接一个按钮连接到地。

           

          在中断系统中,INT0设计的寄存器中有IE、IP、TCON,在C51规定特殊寄存器的地址为8的倍数均可以位寻址。IE寄存器地址为:0xA8;IP寄存器地址为0xB8;TCON寄存器地址为0x88;因此它们可以被位寻址。

        以下是它们的位定义。

    /*  TCON  */
    sbit TF1   = TCON^7;
    sbit TR1   = TCON^6;
    sbit TF0   = TCON^5;
    sbit TR0   = TCON^4;
    sbit IE1   = TCON^3;
    sbit IT1   = TCON^2;
    sbit IE0   = TCON^1;
    sbit IT0   = TCON^0;
    ​
    /*  IE  */
    sbit EA    = IE^7;
    sbit ET2   = IE^5; //8052 only
    sbit ES    = IE^4;
    sbit ET1   = IE^3;
    sbit EX1   = IE^2;
    sbit ET0   = IE^1;
    sbit EX0   = IE^0;
    ​
    /*  IP  */
    sbit PT2   = IP^5;
    sbit PS    = IP^4;
    sbit PT1   = IP^3;
    sbit PX1   = IP^2;
    sbit PT0   = IP^1;
    sbit PX0   = IP^0;

     

            如果需要使用外部中断,需要满足以下条件

            1)中断中允许设置(置1)EA = 1;

            2)中断源允许设置(置1)Ex0 = 1;

            3)中断触发方式设置(置1或置0) IT0 =1 或者 IT0 = 0;

            4)  中断服务函数 

     

     

    代码实现

    #include "reg52.h"
    #include "stdio.h"
    ​
    void main(){
       IT0 = 1;
       EA = 1;
       EX0 = 1;
       while(1){};
    ​
    }
    ​
    void irq0(void) interrupt  0
    {
        P0=~P0;
    }

     

        注:由于IT0 =1;设置中断触发方式为负跳变(下降沿),CPU相应中断后清除中断标志位。而由于IT0 =0;设置中断触发方式为低电平触发,CPU相应中断后不会清除中断标志位。

         在上面的中断服务功能中表现,按一下LED灯亮,再按一次LED灯灭;

    如果将IT0设置为0,则按下时LED会闪烁。因为中断标志位没有清除,不断进入中断服务函数。

     

       如果需要设置外部中断1,负跳变触发。只需要改上面代码的三条语句即可。

     IT0 = 1; ---->  IT1 = 1;
     
      EX0 = 1;  ---->  EX1 = 1;
       
       
    void irq0(void) interrupt  0   -->  修改终端号,将0 修改为2;
    ​
    void irq0(void) interrupt  2    ---->函数名irq0,可根据需要修改或不改 

     

     

     

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

    如果觉得文章还不错,那就扫码关注吧!

    展开全文
  • 盛科技术人员说法是该芯片支持GPIO管脚中断和PCIE MSI中断,使用过程中二选一即可。目前PCIE MSI中断已经解决,需要调试GPIO管脚中断方式,ZYNQ连接示意图如下。如上图所示,四根线之间连入一个concat,再加上PCIE...
  • 51单片机外部中断

    2021-01-16 19:27:24
    中断响应 -> 中断处理 -> 中断返回 什么是中断系统 计算机执行某程序时,发生了紧急事件或有特殊请求,CPU暂停某程序执行,转而去处理上述事件或请求,处理完毕后再重新执行某程序的过程叫做中断。 数据...
  • 中断处理基本过程

    千次阅读 2020-03-24 15:07:49
    中断处理的基本过程包括中断请求、中断判优、中断响应、中断服务 和中断返回等五个阶段。 1.中断请求阶段 1)发生在CPU内部的中断(内部中断),不需要中断请求,CPU内部的中断控制逻辑直接接收处理。 2)外部中断...
  • 外部中断(CC2530)

    2020-08-30 23:07:43
    1.CPU在执行当前程序时,由于系统出现了某急需处理的的情况,CPU暂停正在执行程序,转而去执行另外一段特殊程序来处理出现紧急事务,处理结束后,CPU自动返回到带原来暂停程序中去继续执行,这种程序在执行...
  • CPU暂时中断当前工作,转去处理事件B(中断响应和中断服务); 待CPU将事件B处理完毕后, 再回到原来事件A被中断地方继续处理事件A(中断返回),这一过程称为中断。 我第一眼看见这东西,感觉跟函数嵌套调用...
  • 一、基础知识 1.ARM的中断优先级分硬件优先级和软件优先级两种 当中软件优先级又由抢占... 具有高抢占式优先级的中断能够在具有低抢占式优先级的中断处理过程中被响应,即中断嵌套。或者说高抢占式优先级的中断...
  • 2. 89C51的中断系统有5个中断源(按优先级高低排序为:外部中断0、计时器中断0、外部中断1、计时器中断1、串口中断),2个优先级,可实现二级中断嵌套(中断处理过程又有优先级更高的中断发生)。高级单片机中可能有...
  • 1.简介中断概念:中断发生CPU在处理某一事件A时,发生了另一事件B请求CPU迅速去处理中断响应和中断服务CPU暂时中断当前工作,转去处理事件B中断返回待CPU将事件B处理完毕后,再回到原来事件A被中断地方继续...
  • STM32F030C6外部中断问题

    千次阅读 2018-06-19 11:48:06
    使用STM32F030C6外部中断的时候碰到一个很奇怪问题:1、中断线13一直响应(没有外部触发这个中断);2、在debug时候,按下按键触发中断可以进入中断;3、但下载到单片机中运行,发现中断没有被触发。4、debug...
  • 0. 外部中断  书上废话当然是很多了,对于中断我想大家应该早就有一个很直观... 80C51一共是5个中断源,这五个中断源分别是外部中断0,1定时器中断0,1,串口中断。 1. 我们现在先来看外部中断: ...
  • 即CPU在正常执行程序的过程中,遇到外部或内部紧急事件需要处理,暂时中断(中止)当前程序执行,而转去完成事件服务程序,待事件完毕后,再返回到暂停处(断点)继续执行原来程序。事件服务程序又称中断处理程序...
  • 如果追电视剧是在执行主程序,那么电话就是中断源,电话铃响了就是中断请求,暂停电视就是现场保护,接电话就是中断响应,门铃响了是更高一级的中断请求,去把门打开,那就是中断嵌套。开完门回来接着聊电话,那是...
  • 51单片机之中断的实现过程

    万次阅读 多人点赞 2017-05-08 16:15:58
    我们首先需要了解什么是中断? 中断是指cpu在执行某一过程中由于外界原因必须暂停现在事情,处理别事情,处理完了再回去执行暂停事情。 中断优点? 1.分时操作。 2.实时响应 ...EX1:外部中断1允许位
  • 这个部分内容是写在HAL库GPIO外部中断 EXTI15_10_IRQHandler10中回调函数HAL_GPIO_EXTI_Callback中,HAL库逻辑是执行完回调函数然后配置好了关闭中断函数,所以一般不需要在回调函数里用完之后手动关闭。...
  • CPU暂时中断当前工作,转去处理事件B(中断响应和中断服务); 待CPU将事件B处理完毕后,再回到原来事件A被中断地方继续处理事件A(中断返回),这一过程称为中断。 通俗点说:你正在家里做家务,突然有人来找...
  • X86体系中,CPU在INTR引脚上接到一个中断请求信号,如果此时IF=1,CPU就会在当前指令执行完以后开始响应外部的中断请求,这时,CPU在INTA引脚连续发两个负脉冲,外设在接到第二个负脉冲以后,在数据线上发送中断...
  • 中断处理过程

    2011-07-30 22:28:00
    一个完整的中断处理过程应该包括:中断请求、中断排队或中断判优、中断响应、中断处理和中断返回等环节,下面分别进行讨论。 1.中断请求 中断请求是由中断源向CPU发出中断请求信号。外部设备发出中断请求信号要...
  • 这样后果会造成有可能丢失外部中断。于是,linux内核设计出了一种架构,中断函数需要处理任务分为两部分,一部分在中断处理函数中执行,这时系统关闭中断。另外一部分在软件中断中执行,这个时候开启中断,系统...
  • 中断的作用

    2016-04-23 10:44:00
    1. 什么叫中断?有哪几种不同类型的中断? 由于某个事件的发生,CPU暂停当前...大多数的中断源在CPU的外部,称为外部中断。 根据中断引脚的不同,或者CPU响应中断的不同条件,也可以把中断划分为可屏蔽中断和不...
  • 中断

    2020-05-06 21:07:32
    1.中断向量表 中断向量:中断服务程序入口地址 每个中断类型对应一个中断向量(4字节) 前两个字节单元存放中断服务程序入口地址...CPU关闭中断响应,即不再接受其他外部中断请求 ②保存断点 将发生...

空空如也

空空如也

1 2 3 4 5 ... 7
收藏数 138
精华内容 55
关键字:

外部中断1的中断响应过程