外部中断

中断寄存器的配置在两个地方。

第一个是在SYSCFG,完成外部GPIO端口和外部中断源的映射。stm32f4xx_syscfg.c
第二个是在第10章,配置中断的沿,使能等信息。stm32f4xx_exti.c

一般的外部中断用法如下:

void EXTIX_Init(void)
{
    NVIC_InitTypeDef   NVIC_InitStructure;
    EXTI_InitTypeDef   EXTI_InitStructure;

    RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE);//使能syscfg模块的时钟

    SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOE, EXTI_PinSource2);//完成GPIO和外部中断的映射
    SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOE, EXTI_PinSource3);//
    SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOE, EXTI_PinSource4);//
    SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOA, EXTI_PinSource0);// 

  /* 配置EXTI_Line0,对应GPIOA0 */
  EXTI_InitStructure.EXTI_Line = EXTI_Line0;//LINE0
  EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;//选择事件,或是选择中断,这两个的屏蔽寄存器是不一样的EXTI_IMR和EXTI_EMR
  EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising; //上升沿触发
  EXTI_InitStructure.EXTI_LineCmd = ENABLE;//是否屏蔽,操作屏蔽寄存器
  EXTI_Init(&EXTI_InitStructure);//调用初始化函数

    NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQn;//外部中断0
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x00;//抢占优先级
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x02;//响应优先级
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;//使能
  NVIC_Init(&NVIC_InitStructure);//初始化

}

然后就是调用中断处理函数

void EXTI0_IRQHandler(void)
{
    delay_ms(10);    //
    if(WK_UP==1)
    {
        BEEP=!BEEP; //
    }
     EXTI_ClearITPendingBit(EXTI_Line0); // 通过操作PR寄存器,清除中断
}    

中断其余相关函数都很普通,因为本来就没有几个配置寄存器。这个寄存器之前没关注过。

软件给这个寄存器的某些位写1,就能触发中断,和外部发生中断的效果是一样一样的。

void EXTI_GenerateSWInterrupt(uint32_t EXTI_Line)
{
  /* Check the parameters */
  assert_param(IS_EXTI_LINE(EXTI_Line));

  EXTI->SWIER |= EXTI_Line;
}
时间: 2024-11-20 14:07:45

外部中断的相关文章

《零死角玩转STM32》-17-EXTI外部中断/事件控制器

/* * 本文中的相关图片来自火哥的教程,只作为随笔记录,无侵权之意 * 21:25:46, 2017-04-08 */ EXTI:外部中断/事件控制器.STM32F429共有23根,其中EXTI0~EXTI15,分别对应GPIO中的PX0 ~ PX15,另外7根线有如下用途: (中间省略了EXTI1 ~ EXTI15) EXTI功能框图如下所示: 按照图中的序号标识,可以清晰的看出外部GPIO引脚上的电平变化是如何传递到内核,即GPIO -> EXTI -> NVIC,并触发相应的中断/事件

掌握所有IO口的外部中断

外部中断配置流程 1.初始化IO口工作在普通IO.上拉输入状态. 2.首先开IO口组中断(P0IE=1.P1IE=1.P2IE=1): 3.开组内对应的具体某IO口中断(P0IEM.P1IEM.P2IEM该寄存器里面的对应位对应相应的IO口): 4.上升沿还是下降沿触发(PICTL寄存器): 5.开CPU总中断EA=1; #include <cc2530.h> void main() { //步骤1 P0SEL &=0xDF;//P05口表示为普通IO口 P0DIR &=0xD

STM32外部中断

0.STM32F103上测试 #include <stm32f10x.h> void GPIO_Config(void); void NVIC_Config(void); void EXTI_Config(void); int main(void) { GPIO_Config(); NVIC_Config(); EXTI_Config(); while(1): } void GPIO_Config(void) { /*定义一个GPIO_InitTypeDef类型的结构体,本类型在stm32f1

[ZYNQ-7]PS处理PL外部中断的简单实例的剖析 (参考米联miz702n)

Zynq的ARM通过GIC中断控制器来接收核仲裁所有的中断.由于中断向量表只有4Bytes大小,仅仅正好存放一条跳转语句,因此当产生一个外部中断时,中断处理的大致过程:PC内容保存到LR_IRQ用于中断返回,拷贝CPSR到SPSR_IRQ以反应中断模式,屏蔽其他中断,紧接着将PC设置为中断向量表入口.CPU完成现场保护.确认中断源,并调用相关的中断处理函数.恢复CPSR,恢复CPU现场,中断返回. main.c of simplified Interrupt instance (from miz

STM32F4——NVIC中断优先级及外部中断

NVIC中断优先级 一.简介: CM4内核可以支持256个中断,包括16个内核中断和240个外部中断,256级的可编程中断设置.对于STM32F4没有用到CM4内核的所有东西,只是用到了一部分,对于STM32F40和41系列共有92个中断,其中有10个内核中断和82个可屏蔽中断,常用的为82个可屏蔽中断. 二.相关寄存器: ISER[8]-中断使能寄存器组,用来使能中断,每一位控制一个中断,由于上面已经说明了控制82个可屏蔽的中断,因此利用ISER[0~2]这三个32位寄存器就够了.一下的几个寄

LPC1768外部中断与GPIO中断

LPC1768的外部中断严格来说只有四个,分别是EINT0,EINT1,EINT2,EINT3,技术手册上有如下说明 控制这四个外部中断靠以下寄存器 这三个寄存器的0 1 2 3位分别代表中断的0 1 2 3,EXTINT寄存器表示中断是否发生,在发生中断的时候该寄存器会置位,可以通过写1清零,EXTMODE寄存器表示触发模式,有电平触发和变化沿触发两种,EXTPOLAR与EXTMODE,在电平触发模式下,决定高电平还是低电平触发,在变化沿触发的情况下决定上升沿还是下降沿触发 这三个中断分别相关

CC2540开发板学习笔记(三)&mdash;&mdash;外部中断

一.实验内容 通过外部中断方式依次按下按键S1控制LED1的亮灭 二.实验过程 1.电路原理图同上 2.中断的概念 比如说我们在执行main函数时,突然来了个指令.优先级比现在执行的main还高,那我们便选择跳过去执行优先级高的,完了之后再执行main函数,中断就类似这样一个概念,使用中断可以减少CPU的无效浪费,降低能耗. 3.寄存器调度 (1)LED1的初始化..同前两节,就是SEL,DIR,INP三个,还有附初始状态. (2)外部中断初始化(S1的外部中断初始化) 按键S1外部中断初始化方

中断之外部中断

. ARM Cortex M3共有256个中断. STM32F103CB共有43个外部中断和16个内部中断. 具有相同数值编号的IO口被分配为同一组,共用一条中断请求线,如下图: 所以共有15条中断线,另外 ●EXTI线16连接到PVD输出●EXTI线17连接到RTC闹钟事件●EXTI线18连接到USB唤醒事件 寄存器:1.外部中断配置寄存器    AFIO_EXTxCR1------->用于选择输入中断源  Pin 0..3 AFIO_EXTxCR2------->用于选择输入中断源  Pi

28335外部中断

/*****************************************************************************Copyright: 2014,TkaiFile name: main.cDescription:28335外部中断测试Author: Version: v1.0Date: 2014.05.27History: 无*****************************************************************

STM32——外部中断EXIT实现

外部中断实现步骤: 一.初始化,包括:1.AFIO时钟中断和GPIO时钟使能:                          2.GPIO初始化                          3.设置EXTI线                          4.中断向量初始化 二.中断服务函数 采用PB9作为外部中断源,具体实现程序如下: 一.初始化 1 void EXTI_PB9_Init(void) 2 3 { 4 5 GPIO_InitTypeDef GPIO_InitStru