精华内容
下载资源
问答
  • 前几天把外部中断基本搞好了,但对几个中断寄存器的具体含义和区别不是很了解。今天特意拿起datasheet详读并网络上查了这方面的资料。将结果记录如下: S3C2440的中断寄存器有6个中断裁决器,分为2级:第一级为5...

    http://www.chinadmd.com/file/uteitwu3rosprowcoras3eov_1.html

    前几天把外部中断基本搞好了,但对几个中断寄存器的具体含义和区别不是很了解。今天特意拿起datasheet详读并网络上查了这方面的资料。将结果记录如下:

    S3C2440的中断寄存器有6个中断裁决器,分为2级:第一级为5个,第二级为1个。详见Datasheet的P380的interrupt sources和P381的interrupt sub sources。第一级的32个中断源包含26个内部中断,6个外部中断。 这6个中断分别为:EINT0,EINT1.EINT2,EINT3,EINT4_7,EINT8_23。其中EINT4_7,EINT8_23分别都是共享一个中断的。在外部中断有中断请求时,因为EINT4_7和EINT8_23是分别共享中断的,而SRCPND和INTPND的BIT4或BIT5也是共享使用的,那么怎么区别是EINT4还是EINT5或EINT6发生中断呢,这就需要另一个寄存器EINTPEND来判断,由于EINT0~EINT3都独享一个中断,所以EINTPEND只有EINT4~23,读取该寄存器就知道哪个中断触发了。

    一、三个中断未决寄存器:中断源未决寄存器(SRCPND)和中断未决寄存器(INTPND)以及外部中断未决寄存器(EINTPEND) SRCPND 寄存器有效位为32位,每一位对应一个中断源,某个位被置一表示相应的中断被触发,但我们知道系统 在同一时间内可以触发多个中断,只要中断触发了,相应的位就被置一,直到该位被清除为止,也就是说在同一时刻 SRCPND寄存器可以有多个位被同时置1,该位写1后被清0。

    INTPND 寄存器有效位为32位,看似跟SRCPND一样,其实有很大的不同,在某一时刻INTPND寄存器只能有一个 位被置一,INTPND某位被置一说明,该位所对应的中断在所有已触发的中断里中断优先级最高且没有被屏蔽,表示CPU 即将或已经在处理在与该位对应的中断进行处理,该位写1后被清0。

    两者的区别:SRCPND表明当前有什么中断被触发了;INTPND表明CPU即将或正在处理某个中断。

    EINTPEND:寄存器有效位为24位,低4位保留,EINTPENG只有EINT4~E23,跟SRCPND一样,可以在同一时刻多 个位同时为1,用来区分共享中断EINT4_7和EINT8_23具体为哪个或哪几个被触发,该位写1后被清0。

    例程:在外部中断例程的中断处理程序里是如下写法:

    if(rINTPND==0x10)

    {

    rSRCPND = 0x10; rINTPND = 0x10;

    if(EINTPEND & 0X10) //EINT4

    {

    EINTPENG |= 0X10; Uart_Printf("K4发生中断\n");

    }

    if(rEINTPEND&0x20) //EINT5

    {

    rEINTPEND |= 0x20; Uart_Printf("K5发生中断\n"); }

    }

    判断条件为INTPND,如果INTPND该位置1说明当前CPU正在处理EINT4_7,将SRCPND和INTPND的位1都写1,清0标志。if(EINTPEND & 0X10)为第二判定条件,确认为EINT4_7中的EINT4中断发生。

    二、INTMOD 中断模式寄存器,每一位与SRCPND中各位对应,0--IRQ模式,1--FIQ模式,默认初始化全0,每次只能 对一个中断源置成FIQ,所以每次只能对INTMOD中的一位置1, FIQ中断优先级比IRQ高。

    三、INTMSK 中断屏蔽寄存器,每一位与SRCPND中各位对应,0--未屏蔽,1--屏蔽中断请求,默认初始化全1。

    四、INTSUBMSK、SUBSRCPND是副中断源引脚寄存器,使用情况与主中断源类似,第二级副中断源列表在datasheet P381。

    展开全文
  • STM32自学笔记EXTI(外部中断)寄存器

    千次阅读 2019-12-07 20:55:57
    EXTI寄存器外部中断通用I/O映像中断处理函数分配EXTI寄存器一览中断屏蔽寄存器(EXTI_IMR)事件屏蔽寄存器(EXTI_EMR)上升沿触发选择寄存器(EXTI_RTSR)下降沿触发选择寄存器(EXTI_FTSR)软件中断事件寄存器(EXTI_SWIER)...

    外部中断通用I/O映像

    在这里插入图片描述

    中断处理函数分配

    在这里插入图片描述

    EXTI寄存器一览

    以下图片全部摘自STM32中文参考手册

    中断屏蔽寄存器(EXTI_IMR)

    在这里插入图片描述

    往对应的位写1就是开启中断,写0就是关闭中断

    例如开放来自线0上的中断请求

    	EXTI->IMR|=1<<0;//开放来自线0上的中断请求
    

    事件屏蔽寄存器(EXTI_EMR)

    在这里插入图片描述

    参考**中断屏蔽寄存器(EXTI_IMR)**的操作

    上升沿触发选择寄存器(EXTI_RTSR)

    在这里插入图片描述

    设置对应的外部中断触发事件为上升沿
    上升沿就是电平从0到1

    例如允许输入线0上的上升沿触发

    	EXTI->RTSR|=1<<0;//允许输入线0上的上升沿触发
    

    下降沿触发选择寄存器(EXTI_FTSR)

    在这里插入图片描述

    设置对应的外部中断触发事件为下降沿
    下降沿就是电平从1到0

    例如允许输入线0上的下降沿触发

    	EXTI->FTSR|=1<<0;//允许输入线0上的下降沿触发
    

    软件中断事件寄存器(EXTI_SWIER)

    在这里插入图片描述

    对应位写1则触发中断

    挂起寄存器(EXTI_PR)

    在这里插入图片描述

    这个寄存器和SR寄存器差不多,都是检查相应的中断是否发生,不同的是清除的方式

    外部中断配置寄存器 1(AFIO_EXTICR1)

    在这里插入图片描述

    外部中断配置寄存器 2(AFIO_EXTICR2)

    在这里插入图片描述

    外部中断配置寄存器 3(AFIO_EXTICR3)

    在这里插入图片描述

    外部中断配置寄存器 4(AFIO_EXTICR4)

    在这里插入图片描述

    实例操作

    这里我们开启外部中断线0上的PA0

    步骤

    1)开启PA的时钟,配置IO

    	RCC->APB2ENR|=1<<2;//使能PA时钟
    	GPIOA->CRL&=0XFFFFFFF0;//PA0配置清零
    	GPIOA->CRL|=0X00000008;//PA0下拉输入
    	GPIOA->ODR|=0<<0;//PA0下拉
    

    2)开启复用时钟,设置 IO 口与中断线的映射关系

    	RCC->APB2ENR|=1<<0;//开启复用辅助时钟
    	AFIO->EXTICR[0]&=~(0XF<<0);//清除原来的设置
    	AFIO->EXTICR[0]|=0<<0;//外部中断0映射到PA0上
    

    特别注意这里的AFIO->EXTICR寄存器的编号

    3)开启外部中断线上中断,设置触发条件

    	EXTI->IMR|=1<<0;//开放来自线0上的中断请求
    	EXTI->RTSR|=1<<0;//允许输入线0上的上升沿触发
    

    4)配置中断分组(NVIC),并使能中断

    	MY_NVIC_Init(2,3,EXTI0_IRQn,2);	//抢占2,子优先级3,组2 
    

    5)编写中断服务函数

    //外部中断0服务程序
    void EXTI0_IRQHandler(void)
    {
    	delay_ms(10);	//消抖
    	if(GPIOA->IDR&1<<0)	//PA0按下
    	{				 
    		LED1=!LED1;
    	}		 
    	EXTI->PR=1<<0;  //清除线0上的中断标志位  
    } 
    

    源文件

    EXTI.C

    #include "EXTI.h"
    #include "delay.h"
    #include "led.h"
    
    void exti_init(void)
    {
    	RCC->APB2ENR|=1<<2;//使能PA时钟
    	GPIOA->CRL&=0XFFFFFFF0;//PA0配置清零
    	GPIOA->CRL|=0X00000008;//PA0下拉输入
    	GPIOA->ODR|=0<<0;//PA0下拉
    	
    	RCC->APB2ENR|=1<<0;//开启复用辅助时钟
    	AFIO->EXTICR[0]&=~(0XF<<0);//清除原来的设置
    	AFIO->EXTICR[0]|=0<<0;//外部中断0映射到PA0上
    	
    	EXTI->IMR|=1<<0;//开放来自线0上的中断请求
    	EXTI->RTSR|=1<<0;//允许输入线0上的上升沿触发
    	MY_NVIC_Init(2,3,EXTI0_IRQn,2);	//抢占2,子优先级3,组2  
    }
    //外部中断0服务程序
    void EXTI0_IRQHandler(void)
    {
    	delay_ms(10);	//消抖
    	if(GPIOA->IDR&1<<0)	//PA0按下
    	{				 
    		LED1=!LED1;
    	}		 
    	EXTI->PR=1<<0;  //清除线0上的中断标志位  
    } 
    

    EXTI.H

    #ifndef __EXTI_H
    #define __EXTI_H
    #include "sys.h"
    
    
    
    void exti_init(void);
    
    
    #endif
    
    

    MAIN.C

    #include "sys.h"
    #include "usart.h"		
    #include "delay.h"
    #include "led.h"
    #include "EXTI.h"
    
    
    
    
    int main(void)
    {
    	Stm32_Clock_Init(9);	//系统时钟设置
    	delay_init(72);	  		//延时初始化
    	uart_init(72,115200); 	//串口初始化为115200
    	led_init();				//LED初始化
    	exti_init();			//EXTI初始化
      	while(1)
    	{
    		LED0=!LED0;			//LED0用来指示程序正在运行
    		delay_ms(200);
    	}
    } 
    
    
    

    结果

    LED0(红灯)闪烁,代表程序正在运行
    在这里插入图片描述

    按下PA0之后,PA0电平由0变到1,LED1亮(绿灯)

    在这里插入图片描述
    在这里插入图片描述

    展开全文
  • 外部中断 1.初始化 IO 口为输入。 2)开启 IO 口复用时钟,设置 IO 口与中断线的映射关系。 3)开启与该 IO 口相对的线上中断/事件,设置触发条件。 4)配置中断分组(NVIC),并使能中断。 5)编写中断服务函数 ...

    外部中断

    1.初始化 IO 口为输入。
    2)开启 IO 口复用时钟,设置 IO 口与中断线的映射关系。
    3)开启与该 IO 口相对的线上中断/事件,设置触发条件。
    4)配置中断分组(NVIC),并使能中断。
    5)编写中断服务函数

    GPIOA 有16个中断通道

    	 RCC->APB2ENR|=1;  //AFIO时钟
    	 RCC->APB2ENR|=1<<3;  // GPIOB
    	 RCC->APB2ENR|=1<<6;   //GPIOE
    	 
    	 AFIO->EXTICR[0] &=0x0FF0;//中断0   中断3
         AFIO->EXTICR[0] |=0x4000;//PA0  PE3
    		
    	AFIO->EXTICR[1] &=0xFFF0;
        AFIO->EXTICR[1] |=0x0004;//PE4  中断4
    
    

    在这里插入图片描述

    在这里插入图片描述

    	
         EXTI->IMR |=1<<0;//开放来自线0上的中断请求。
    	 EXTI->RTSR|=1<<0;//线0上的上升沿触发事件配置位
    
    	 EXTI->IMR |=1<<3;//开放来自线3上的中断请求。
    	 EXTI->FTSR|=1<<3;//线3上的下降沿触发事件配置位
    
    	 EXTI->IMR |=1<<4;开放来自线4上的中断请求。
    	 EXTI->FTSR|=1<<4;//线4上的下降沿触发事件配置位
    

    服务函数

     void  EXTI0_IRQHandler(void)
     {
    		delay_ms(10);
    	 
    	 if(KEYUP==1)
    	 {
    			beep=!beep;
    	  }
    		  EXTI->PR|=1;
    	 
     }
     
      void  EXTI3_IRQHandler(void)
    	 {
    	 	delay_ms(10);
    	 
    	 if(KEY0==0)
    	 {
    			led0=!led0;
    	 }
    		EXTI->PR|=1<<3;
    	
    	 }
    	 
    	 void  EXTI4_IRQHandler(void)
    		 {
    		 	 	delay_ms(10);
    	 if(KEY1==0)
    	 {
    			led1=!led1;
    	 }
    		EXTI->PR|=1<<4;
    		 }
    		 
    
    
    展开全文
  • 我感觉stm32的外部中断都是大同小异的,因此我以stm32g474为例,配置一下外部中断。举例引脚: PE5 配置引脚为输入模式(GPIOx_MODER); 配置触发模式(上升沿/下降沿); 配置EXTI的中断屏蔽寄存器(EXTI_IMR)...

    我感觉stm32的外部中断都是大同小异的,因此我以stm32g474为例,配置一下外部中断。举例引脚: PE5

    1. 配置引脚为输入模式(GPIOx_MODER);
    2. 配置触发模式(上升沿/下降沿);
    3. 配置EXTI的中断屏蔽寄存器(EXTI_IMR);
    4. 配置具体触发引脚(SYSCFG_EXTICR);
    5. 配置中断允许(ISER);(当然也可以配置优先级分组,我这里不需要,因此省略)

    首先看EXTI的中断/事件框图:
    在这里插入图片描述
    要想触发中断,首先经过“边沿检测器”,而边沿检测器需要配置上升沿检测还是下降沿检测。然后通过或门,可以看到或门的另一个输入连接着“软件中断事件寄存器”,这个寄存器可以不用管,然后就是 与上一个 “中断屏蔽寄存器”,最后连接到“中断挂起寄存器”,因此可以看到触发中断需要配置“边沿检测器”和“中断屏蔽寄存器”就可以触发中断了(唤醒和事件也以此类推)。以PE5举例:

    EXTI->RTSR1 |= 0x0020;
    EXTI->IMR1 |= 0x0020;
    

    配置完之后发现并不能进入中断,那是由于中断允许位没有配置。由于是PE5,那么该引脚属于EXTI5-line,在STM32G4系列向量表中找到EXTI5:
    在这里插入图片描述
    表中说EXTI的lin5~9都共用这一个向量,那就是它了。配置ISER寄存器的第22位。

    NVIC->ISER[0] = 0x00800000;
    

    编译运行,发现PE5的上升沿不能进入中断,PA5的上升沿可以,可能还有个选择端口的寄存器,再看手册:
    在这里插入图片描述
    嗷嗷,还要配置SYSCFG_EXTICR寄存器啊,康康寄存器说明:
    在这里插入图片描述
    在这里插入图片描述
    PE5,那就将这个寄存器配置为0x00000040:

    SYSCFG->EXTICR[1] = SYSCFG_EXTICR2_EXTI5_PE;
    

    OK,这样就可以通过PE5顺顺利利地进入中断了,中断函数名称不确定的话可以在“.s”文件中找:
    在这里插入图片描述

    OK,结束垃圾流水账。

    展开全文
  • 把前面的那些中断基本搞懂之后,突然出现了这个外部中断控制寄存器,找了好多资料都只是泛泛而谈,根本不知道具体是干什么的,搞的我一头雾水,后来知道了这个是设置EINT0~EINT23的触发方式的,但又没讲怎么去...
  • 【stm32f103】stm32 外部中断寄存器版) 中断分类  STM32的EXTI控制器支持19 个外
  • STM32_外部中断寄存器版)_笔记

    千次阅读 2016-05-05 21:07:19
    STM32_外部中断,从程序入手,深度解读每条程序,理解知识点。
  • LPC2101/02/03多包含了三个外部中断输入作为可选择的管脚功能。管脚进行组合后,外部事件可以处理成三个独立... 有四个寄存器涉及外部中断 External Interrupt
  • S3C6410将外部GPIO/EINT中断源分成了10组、分别通过以下外部中断控制寄存器来设置它们: rEINT0CON0(rEINT0CON1)、rEINT0MASK、rEINT0PEND/控制第0组; rEINT12CON、rEINT12MASK、rEINT12PEND/控制第1和第2组...
  • 51单片机中断相关寄存器

    千次阅读 多人点赞 2018-12-31 15:52:58
    ET2——定时器2中断 EX1——外部中断1 ET1——定时器1 中断 EX0——外部中断0 中断优先级寄存器IP PS——串口 PT——计时器 PX——外部中断  置0——低优先级 置1——高优先级 定...
  • MCS51单片机定时器外部中断寄存器
  • STM32 EXTI 外部中断寄存器学习笔记

    千次阅读 2018-09-08 22:23:05
    EXTI 外部中断寄存器                                                             ...
  • stm32中断相关寄存器

    2021-02-18 21:40:53
    在MDK内,与NVIC相关寄存器,MDK为其定义了如下的结构体: typedef struct { vu32 ISER[2]; //2个32位中断使能寄存器分别对应到60个可屏蔽中断 u32 RESERVED0[30]; vu32 ICER[2]; //2个32位中断除能寄存器...
  • 虽然说单片机开发就是对手册的研究,但是开发过程中,还是要做些笔记的,方便...配置PD口的外部中断是,发现EXTI_CR1寄存器无法写入.于是开始寻找原因. 在配置EXTI_CR1寄存器时看见" 这些位仅在CC寄存器的I...
  • LPC2114有4个外部中断,分别为EINT0、EINT1、EINT2、EINT3,具有4个相关寄存器外部中断输入可以用于将处理器从掉电模式唤醒。 EXTINT是外部中断标志寄存器。当一个管脚选择使用外部中断功能时,对应在EXTMODE和...
  • stm32外部中断寄存器配置分析

    千次阅读 2016-03-15 21:15:05
    由上图可以看到:事件和中断的触发源都是一样的 均可以是(外部触发沿和软件中断寄存器触发) 1>当一个触发沿到来或者软件触发中断开启 触发信号经过或门一方面进入请求挂起寄存器挂起,而另一方面进入图中的与门触发...
  • 外部中断(EXTI),和在【STM32】NVIC中断优先级管理(中断向量表) 中讲述的CM3内核的外部中断不同。特指的是,在中断向量表中的EXTI的外部中断。STM32的每个IO都可以作为外部中断输入。 外部中断线 STM32的中断...
  • S5PV210中的中断相关寄存器有很多,这里我只详细介绍我们常用的几个比较重要的寄存器: * VICnINTENABLE和VICnINTENCLEAR * VICnINTSELECT * VICnIRQSTATUS和VICnFIQSTATUS * VICnVECTPRIORITY0~VICnVECTPRIORITY31...
  • 一、中断模块寄存器介绍   本节我们主要介绍C6748的中断模块。  中断是硬件系统的基本功能,DSP通过中断实现和其他芯片的实时交互。中断是指DSP在执行程序的过程中,当出现异常情况或特殊请求时,DSP停止...
  • 喜欢用寄存器的方式来敲代码, 很爽的感觉; 为了方便查阅, 工作过程中顺便把各个外设的寄存器整理成表格了; 分享给也喜欢使用寄存器操作的朋友! 你可以下载整个表格的完整包喔,我会不断完善的 : ...
  • 外部中断

    千次阅读 2020-03-01 17:28:35
    外部中断相关寄存器**1.中断允许寄存器(IE)**2.中断标志寄存器(TCON)三.外部中断配置与程序举例 一.外部中断输入引脚 外部中断0(INT0):P3.2口的附加功能 外部中断1(INT1):P3.3口的附加功能 当引脚上出现...
  • S3C2440 中断相关寄存器小探

    千次阅读 2014-01-16 14:50:01
    肯定有的朋友和我一样,对2440里面的中断寄存器迷惑,屡不清脉络。结合网上资料和自己的琢磨,我大概搞清楚了。先上图,以飨读者。
  • 定时器中断各个寄存器含义

    千次阅读 2016-06-07 11:41:00
    中断寄存器,定时器/计数器相关寄存器本身或者相关位用来做初始化,中断函数的内容主要是体现发生中断后所需要的操作(在中断函数内写代码)。 1.中断允许寄存器IE 图1.中断寄存器IE 中断寄存器用来设定各个中断...
  • 寄存器实现外部中断

    2018-04-17 23:25:28
    怎样实现中断函数的创建以及中断服务函数的设置//实现中断优先级//初始化外部中断输入的IO口的状态(上拉下拉输入)//开启IO口的复用时钟,设置IO口和中断线之间的映射关系//开启IO口的线上中断,设置触发条件(上升...
  • 这次解读的stm32 使用外部中断按键控制led灯的代码 开始使用源码分析 先进个main函数 看见我们的重要函数EXTIX_INIT(); 同时使用文档解读 简单来说 1 初始化io口 :设置已经存在的状态 2 让io口和中断线建立映射 :...
  • STM32的EXTI外部中断(直接操作寄存器),亲测可用,内有详细代码注释和说明讲解,很好的学习资料。
  • STM32的中断控制是分级管理的,CM3内核中的NVIC是顶层,对每个通道都设有1BIT的中断挂起位, 但每个通道可能不止一个中断源,比如EXTI5_9_IRQn,对NVIC而言,只算一个通道,但实际包含有5个中断源, 因此,下层就...
  • 外部中断使用指南(寄存器设置)

    千次阅读 2016-09-11 21:51:01
    实验板子:tiny210(芯片:s5pv210) ...实验目的:通过外部中断操作两个按键实现对LED灯的亮灭控制 步骤:①初始化GPIO端口,使GPIO为外部中断状态;(寄存器:GPxxCON)  例:    ②配置
  • 中断寄存器记录

    2020-08-27 20:23:06
    8259A有8条外部中断请求输入信号线IR0-IR7,每一条请求线上有一个相应的触发器来保存请求信号,它们形成了中断请求寄存器IRR(Interrupt Request Register)。 ⑵中断屏蔽寄存器IMR I.MR(Interrupt Mask Register)...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 59,430
精华内容 23,772
关键字:

外部中断相关的寄存器