概述:

提供中断控制器,用于总体管理异常,称之为“嵌套向量中断控制器:Nested Vectored Interrupt Controller (NVIC)

  VIC:中断管理器;

  NVIC:内嵌中断管理器,将中断嵌套进入内核;

    带来的优势:1、响应速度提高;

          2、标准化,统一管理;

  stm32创新:所以IO口都可以中断;

  stm32的中断向量表:一个中断源,对应的地址、优先级等信息;

具体参见stm32的文档:

        

NVIC中断优先级:

  中断优先级高的中断可以抢占中断优先级低的中断,从而实现了中断嵌套;

  STM32中有两个优先级的概念-------抢占式优先级(主优先级)和响应优先级(从优先级),每个中断源都需要被指定这两种优先级,具有高抢占式优先级的中断可以在具有低抢占式优先级的中断处理的中断过程中被响应,即中断嵌套,或者说高抢占式优先级的中断可以嵌套低抢占式优先级的中断;

  当两个中断源的抢占式优先级相同时,这两个中断将没有嵌套关系,当一个中断到了时,如果cpu正在处理另一个中断,这个后到的中断就要等到前一个中断处理完之后才能被处理;(从优先级不能抢占关系)

  如果这两个中断同时到达而从优先级不同时,则中断控制器根据他们的响应优先级高低来决定先处理哪一个;

  如果他们的抢占式优先级和响应优先级都相等,则根据他们在中断表中的排位顺序决定先处理哪个中断;  

  

Cortex-m3允许具有较少中断源时,使用较少的寄存器位指定中断源的优先级,因此STM32把中断优先级的寄存器位由8位减少到4位,这4个寄存器位的分组方式如下:

  第0组:所以4位用于指定响应优先级;

  第1组:最高1位用于指定抢占式优先级,最低3位用于指定响应优先级;

  第2组:最高2位用于指定抢占式优先级,最低2位用于响应优先级;

  第3组:最高3位用于指定抢占式优先级,最低1位用于指定响应优先级;

  第4组:所以4位用于指定抢占式优先级;

以上设置可以调用固件库函数中的NVIC_PriorityGroupConfig()选择使用哪种优先级分组方式;

 (NVIC_PriorityGroup_0,  NVIC_PriorityGroup_1,  NVIC_PriorityGroup_2, NVIC_PriorityGroup_3, NVIC_PriorityGroup_4)

  typedef  struct

  {

    u8  NVIC_IRQChannel;  //中断通道号;

    u8  NVIC_IRQChannelPreemptionPriority;  //主优先级

    u8  NVIC_IRQChannelSubPriority;      //从优先级

    FunctionalState NVIC_IRQChannelCmd;    //是否使能

  }NVIC_InitTypeDef;

外部中断:

            

另外三种其他的外部中断/事件控制器连接如下:

    EXTI线16连接到PVD输出;

    EXTI线17连接到RTC闹钟事件;

    EXTI线18连接到USB唤醒事件;

外部中断配置:

  外部中断/事件控制器由19个产生事件/中断要求的边沿检测器组成。每个输入线可以独立地
配置输入类型(脉冲或挂起)和对应的触发事件(上升沿或下降沿或者双边沿都触发)。每
个输入线都可以被独立的屏蔽。挂起寄存器保持着状态线的中断要求。

硬件中断选择:
通过下面的过程来配置19个线路做为中断源:
  

stm32之中断系统的更多相关文章

  1. STM32的中断系统

    STM32的中断系统 STM32具有十分强大的中断系统,将中断分为了两个类型:内核异常和外部中断.并将所有中断通过一个表编排起来,下面是stm32中断向量表的部分内容: 上图-3到6这个区域被标黑了, ...

  2. STM32外部中断具体解释

      一.基本概念 ARM Coetex-M3内核共支持256个中断,当中16个内部中断,240个外部中断和可编程的256级中断优先级的设置.STM32眼下支持的中断共84个(16个内部+68个外部), ...

  3. (二)stm32之中断配置

    一.stm32的中断和异常 Cortex拥有强大的异常响应系统,它能够打断当前代码执行流程事件分为异常和中断,它们用一个表管理起来,编号为0~15为内核异常,16以上的为外部中断,这个表就是中断向量表 ...

  4. stm32之中断配置

    一.stm32的中断和异常 Cortex拥有强大的异常响应系统,它能够打断当前代码执行流程事件分为异常和中断,它们用一个表管理起来,编号为0~15为内核异常,16以上的为外部中断,这个表就是中断向量表 ...

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

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

  6. 【原创】MIPS中断系统的板级验证及实例测试

    “五一”假期前后这约五天时间,终于将MIPS中断系统进行了板级验证及实例测试.因为老师给的交叉编译工具不会用,所以测试代码完全用MIPS汇编编写.使用MARS而没有用QtSpim,其实我觉得SPIM这 ...

  7. 【原创】MIPS浅议之——中断系统之我见

    最近,准确的说应该是最近两个月的时间,我都在研究MIPS的异常与中断.或者可以说,最近这两个月,我才真正了解中断系统的整个结构和处理流程以及为什么要这样做?这段时间我最大的体会就是以前我们在“计算机组 ...

  8. STM32F072B-DISCO 深入研究 中断系统

    STM32F072B-DISCO 是我认为性价比最高的一款CPU的demo系统,以前一直在用PIC的CPU但最近几年ST异军突起,几次课题查找芯片无一例外都是ST,像USB,CAN,ZIGBEE等,S ...

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

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

随机推荐

  1. jsp 有哪些动作?作用分别是什么?

    答:JSP 共有以下 6 种基本动作jsp:include: 在页面被请求的时候引入一个文件.jsp:useBean: 寻找或者实例化一个 JavaBean.jsp:setProperty: 设置 J ...

  2. C++ 变量的声明与定义的区别

    变量声明和定义的区别 我们在程序设计中,时时刻刻都用到变量的定义和变量的声明,可有些时候我们对这个概念不是很清楚,知道它是怎么用,但却不知是怎么一会事,下面我就简单的把他们的区别介绍如下:(望我的指点 ...

  3. POJ 3461 Oulipo(模式串在主串中出现的次数)

    题目链接:http://poj.org/problem?id=3461 题意:给你两个字符串word和text,求出word在text中出现的次数 思路:kmp算法的简单应用,遍历一遍text字符串即 ...

  4. Problem D: Integer Inquiry

    Problem D: Integer InquiryTime Limit: 1 Sec Memory Limit: 128 MBSubmit: 41 Solved: 12[Submit][Status ...

  5. 各种输入速度比较(cin,scanf,getchar,pascal的read)

    每个程序都是纯读入与1个输出.输入数据分别有1e2,1e3,1e4,1e5,1e6,1e7个数. C++使用getchar()读入是最快的.流输入是非常非常慢! 比赛还是用gechar比较好...

  6. Struts学习之自定义结果集

    转自:http://blog.csdn.net/hanxuemin12345/article/details/38763057 项目中我们经常遇到这样的需求——页面部分刷新,例如:添加用户,转到添加用 ...

  7. HDU2023-求平均成绩

    描述: 假设一个班有n(n<=50)个学生,每人考m(m<=5)门课,求每个学生的平均成绩和每门课的平均成绩,并输出各科成绩均大于等于平均成绩的学生数量. 输入数据有多个测试实例,每个测试 ...

  8. Media Queries for Standard Devices

    /* Smartphones (portrait and landscape) ----------- */ @media only screen and (min-device-width : 32 ...

  9. JDK JRE先保存 后面再整理

    1. 定义 JRE(Java Runtime Enviroment)是Java的运行环境.面向Java程序的使用者,而不是开发者.如果你仅下载并安装了JRE,那么你的系统只能运行Java程 序.JRE ...

  10. python mysql多条插入

    程序的目的是把文本里面的数据存储到数据库中,原来的思路是读一条,插入一条,结果就是时间长的不得了...18万条的数据,真是慢. 后来的想法是把所有的记录都读到一个list里,结果是mysql奔溃go ...