Interrupt_event梳理


1.预备资料

MM32/stm32中文参考手册

Cortex-M3权威指南(深入了解中断和异常)

MM32F103产品手册(配置GPIO的复用功能可能用到)


2.提出问题

什么是中断?

怎样配置一个中断?


3.思维导图整体框架(CTRL+中键缩放查看)


4.什么是中断?

中断,Interrupt,就是CPU正在执行某项任务,被此项任务外的其他事务打断,CPU将正在执行的任务暂停(保护现场)转而执行其他高优先级的事务(处理中断),等此项事务执行完成,CPU再来执行先前被打断的任务(返回/恢复现场)。

对于用户而言,我们不必关心CPU怎样跳转(保护/恢复现场),我们主要关注CPU响应我们的预置中断请求即可。

因此,中断的配置主要关注:怎样进入中断和中断中做什么事情。


5.NVIC(嵌套中断向量中断控制器)


中断和异常向量

中断与异常是ARM内核的东西,需要深入了解可以看《Cortex-M3权威指南》

这里分析stm32中的中断向量表的使用与查询

表中的几个重要参数:

位置:配置中断是,告诉CPU中断的位置

名称:外设请求的中断名称,详情可以看“说明”字段

优先级:当同时发生多个中断请求时,CPU需要一种合理高效的调度模式,决定处理各个中断请求的次序(抢占优先级,响应优先级)

以表中的EXTI0说明:

这里需要配置EXTI0上的中断,即当EXTI0线上发生上升沿或者下降沿(可配置)时,我们需要CPU跳转到相应的中断服务函数中执行我们想执行的任务,可以这样配置:

  • 设置NVIC的中断位置为6
  • 设置边沿触发模式(上升沿/下降沿/双边沿)
  • 适当的时候在EXTI0上产生触发信号,激活中断执行中断服务函数

关于产生EXTI0触发信号

查阅外部中断通用I/O映射可以知道,通过配置GPIO[x]0连接到EXTI0线


6.EXTI(外部中断/事件控制器)


框图

  • 配置1-3 + NVIC响应中断使能 可以触发硬件的外部中断
  • 配置2-3 + NVIC响应中断使能 可以触发软件的外部中断
  • 配置1-4可以触发硬件的外部事件(事件可用于sleep mode唤醒等)
  • 配置2-4可以触发软件的外部事件

配置一个中断(EXTI0外部中断)


配置时钟和GPIO(EXTI0输入)

  1. GPIO_InitTypeDef GPIO_InitStructure; //GPIO
  2. RCC_APB2PeriphClockCmd(RCC_APB2Periph_ALL,ENABLE);
  3. RCC_PCLK2Config(RCC_HCLK_Div8);
  4. RCC_APB1PeriphClockCmd(RCC_APB1Periph_ALL,ENABLE);
  5. RCC_PCLK2Config(RCC_HCLK_Div8);
  6. GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; //配置EXTI0的触发信号,具体查阅--外部中断/事件线路映射
  7. GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; //input mode
  8. GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz; //50M
  9. GPIO_Init(GPIOA, &GPIO_InitStructure);

配置EXTI控制器

  1. NVIC->ISER[0]=(1<<6);//使能CPU的中断响应,其中位置为6,在中断和异常向量表中可以查询得到
  2. EXTI->IMR=(0x1<<0); //配置EXTI的中断使能,请看上边的框图分析
  3. EXTI->RTSR=(0x1<<0); //line 0 rising 配置上升沿触发
  4. EXTI->FTSR=(0x1<<0); //line 0 falling 配置下降沿触发,细节请看EXTI的寄存器描述
  5. while(EXTI->IMR&0x100); //等待进入中断

写中断服务函数

  1. void EXTI0IRQHandler(void) //中断服务函数,请到库函数查看各个中断对应的预定义中断函数名
  2. {
  3. EXTI->PR=0x1; //清除挂起中断
  4. print("Hello EXTI0\n");
  5. EXTI->IMR&=0xfffffc1f; //除能中断
  6. }

触发

这样通过在GPIO引脚输入脉冲即可进入中断函数。

7.总结中断配置步骤

  • 配置NVIC寄存器NVIC->ISER[0]=(0x1<<6)
  • 配置外设中断寄存器,使能中断
  • 根据定义的中断子函数名写中断函数,例如void EXTI0IRQHandler(void
  • 运行程序,使之产生中断
  • 查看进入中断情况,是否触发中断

参考资料

[1]. MM32参考手册

[2]. stm32中文参考手册

[3]. Cortex-M3权威指南

[4]. MM32F103产品手册

MM32/STM32中断和事件梳理的更多相关文章

  1. 转载:STM32之中断与事件---中断与事件的区别

    这张图是一条外部中断线或外部事件线的示意图,图中信号线上划有一条斜线,旁边标志19字样的注释,表示这样的线路共有19套.图中的蓝色虚线箭头,标出了外部中断信号的传输路径,首先外部信号从编号1的芯片管脚 ...

  2. STM32之中断与事件---中断与事件的区别

    STM32之中断与事件---中断与事件的区别  http://blog.csdn.net/flydream0/article/details/8208463 这张图是一条外部中断线或外部事件线的示意图 ...

  3. STM32中断管理函数

    CM3 内核支持256 个中断,其中包含了16 个内核中断和240 个外部中断,并且具有256 级的可编程中断设置.但STM32 并没有使用CM3 内核的全部东西,而是只用了它的一部分. STM32 ...

  4. stm32 中断几个库函数实现过程分析

    感谢原文作者:鱼竿的传说,这篇文章写得不错,转载自 http://www.cnblogs.com/chineseboy/archive/2013/03/14/2956782.html 前题: 闭门造车 ...

  5. 第16章 STM32中断应用概览

    第16章     STM32中断应用概览 全套200集视频教程和1000页PDF教程请到秉火论坛下载:www.firebbs.cn 野火视频教程优酷观看网址:http://i.youku.com/fi ...

  6. STM32 中断应用概览

    本章参考资料< STM32F4xx 中文参考手册>第十章-中断和事件.<ARM Cortex™-M4F 技术参考手册> -4.3 章节: NVIC 和 4.4 章节: SCB— ...

  7. 第16章 STM32中断应用概览—零死角玩转STM32-F429系列

    第16章     STM32中断应用概览 全套200集视频教程和1000页PDF教程请到秉火论坛下载:www.firebbs.cn 野火视频教程优酷观看网址:http://i.youku.com/fi ...

  8. STM32中断

    STM32的中断分两个类型:内核异常和外部中断. 内核异常不能够被打断,不能被设置优先级(它的优先级是凌驾于外部中断之上的).常见的内核异常有以下几种:复位(reset),不可屏蔽中断(NMI),硬错 ...

  9. STM32—中断详解(配合按键中断代码,代码亲测)

    在STM32中执行中断主要分三部分: 1.配置NVIC_Config()函数 2.配置EXTI_Config()函数 3.编写中断服务函数 (注:本文章所用代码为中断按键代码,实现了按键进入中断从而控 ...

随机推荐

  1. UNIX基础知识

    一.线程 线程是进程某程序段的一次运行. 1.线程共享资源,利用共享的资源,线程很容易能够互相通信 (1)进程代码段:每个线程有各自的寄存器组,在运行时期拷贝给cpu寄存器,来确定运行的是哪段代码段. ...

  2. _Obj* __STL_VOLATILE* __my_free_list

    今天在读<STL源码剖析>空间配置器第二级时看到了这句,有点不解,于是查阅后知: obj后面是个指针 STL_VOLATILE也应该是个类型定义的吧,程序中应该有define来对它定义.所 ...

  3. js 判断url的?后参数是否包含某个字符串

    function GetQueryString(name){    var reg=eval("/"+name+"/g");   var r = window. ...

  4. javascript在一个字符串中每隔多少字符插入某个字符串

    function insertStr(str,tar,n,m){ var x='' var str=str.split('') if(str.length==0) return for(var i=n ...

  5. angularJS中XHR与promise

    angularJS应用是完全运行在客户端的应用,我们可以通过angularJS构建一个不需依赖于后端,同时能够实现动态内容和响应的web应用,angularJS提供了将应用与远程服务器的信息集成在一起 ...

  6. iOS的REST服务-备

    REST式的服务最重要的三个特征就是**无状态性**(statelessness).**统一资源定位**(uniform resource identification)和**可缓存性**(cache ...

  7. 构建高可用web站点(五)

    数据库是web站点中重要的应用,放在第四篇是因为之前来不及总结的原因,在之前的文章我看到了无论是Mysql或者是nosql的一些缓存和分布式一些比较扩展性的功能.但是对于单个数据库来说,它的优化也是我 ...

  8. ChatCell

    import UIKit let chatCellHeight: CGFloat = 72 let chatCellInsetLeft =  chatCellHeight + 8 class Chat ...

  9. JAVA简单的SWING及AWT

    慢慢找感觉~~ package SwingGui.sky.com; import javax.swing.*; import java.awt.*; import java.awt.event.*; ...

  10. ARP劫持攻击

    今天下午,莫名其妙的产生. 部分客户的网站产生乱码,但本机访问或是好好的. 外网访问,乱码的原文件是一个<IFRAME>网页. 听说,有时ARP攻击是导致网络中断或时断时续. 安全狗和36 ...