当前位置:首页 > 单片机 > 单片机
[导读]NVIC: Nested vectored interrupt controller, 嵌套中断向量控制器.中断与异常:所有能打断正常执行流的事件都称为异常. 异常与中断的区别在于, 中断请求是来自于Cortex内核外部, 比如各种片上外设, 外部中断请求等,

NVIC: Nested vectored interrupt controller, 嵌套中断向量控制器.

中断与异常:
所有能打断正常执行流的事件都称为异常. 异常与中断的区别在于, 中断请求是来自于Cortex内核外部, 比如各种片上外设, 外部中断请求等, 它们对于内核是”异步”的; 而异常则是由于Cortex内核在执行指令或者访问存储等操作时所产生的, 对于Cortex内核来说是属于”同步”的(可以参见Cortex M3权威指南), 异常和中断一般可以不加区分的使用.

Cortex内核可以支持多达240个外部中断, 编号16 – 255. 编号1 – 15的为系统异常, 编号0未被使用.
Cortex支行中断嵌套, 允许高优先级的中断抢占低优先级的中断. Cortex M3/M4可支行多达256级的可编程优先级和128级的抢占, 但有3个系统异常优先级固定, 并且优先级为负数, 高于其它任何异常, 这三个异常分依次为 复位, NMI, Hard Fault.
NMI是Non-Maskable Interrupt(不可屏蔽中断)缩写, 在STM32F4中, NMI被连接到时钟安全系统CCS(Clock security system)异常上.
Hard Fault是总线fault, 存储管理fault, 用法fault所产生的结果, 详细信息可以参考Cortex M3权威指南).

优先级寄存器
如上所述, Cortex M3/M4支行多达256级的可编程优先级和128级抢占, 每个中断使用一个8位的寄存来配置优先级. 但实际一款芯片会根据情况做适当的精简, 裁剪掉表达优先级的几个低端有效位, 以减少优先级的级数.但是不管使用多少位来表达优先级, 都是以MSB对齐的, 这主要是为了避免程序在不同器件之间移植时不会出现优先级顺序的更改.

抢占优先级和响应优先级
响应优先级也叫做 亚优先级 或者 子优先级, 每一个中断都有这两种优先级属性. 当一个低优先级的中断正在执行时, 如果有更高优先级的中断请求, 系统将会响应这个中断, 即发生中断嵌套.
如果两个中断的优先级相同, 则后来的中断要等到先来的中断执行完毕后才会被响应. 但是如果两个中断同时到达(或者都在挂起状态), NVIC会根据它们响应优先级的高低来决定响应那一个.
如果它的的响应优先级也相同, 那么NVIC会根据它们在中断向量表中的排序先后来决定先响应那一个.

在STM32中使用了4bit来表达抢占优先级和响应优先级, 有以下5种分组方式:

可见STM32一共提供了16级中断优先级.


本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

阅读nvic:系统中断管理。我的理解——管理系统内部的中断,负责打开和关闭中断。基础应用1,中断的初始化函数,包括设置中断向量表位置,和开启所需的中断两部分。所有程序中必须的。用法: void NVIC_Configur...

关键字: nvic STM32

cortex-m3支持256个中端,其中包含了16个内核中断,240个外部中断。stm32只有84个中断,包括16个内核中断和68个可屏蔽中断。stm32f103上只有60个中断,f107上才有68个中断。中断是st...

关键字: nvic STM32 中断管理

朋友们,如果你需要在STM32上移植RTOS,那么首先必须深入理解它的中断系统。什么是NVIC?即嵌套向量中断控制器(Nested Vectored Interrupt Controller)。STM32的中有一个强大而...

关键字: nvic STM32

对于NVIC的任务,可以概括为三个:1.配置中断向量表--如果不配置,则不能进入中断 SCB->VTOR2.配置系统中断分组--决定了第一和第二优先级各占用的位数 SCB->AIRCR3.配置对应中断优先级和...

关键字: nvic 中断控制 函数实现

前言:1.要想学习STM32中断,要先掌握STM32对优先级的定义;2.有51单片机开发经验会比较容易理解中断优先级;3.本篇博文基于STM32F103ZET6芯片和3.5.0标准库编写;4.本篇博文从寄存器入手,最终实...

关键字: nvic STM32 中断

用STM32做项目已经有段时间了,但是我忽然发现我对NVIC其实一点都不了解,所以今天补习了一下NVIC的知识以及我自己对NVIC中断优先级设置的了解,希望对大家有所帮助:对于NVIC中断优先级的设置一直都不是很清楚;具...

关键字: nvic STM32 中断优先级

例程: /* Configure one bit for preemption priority */ NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1); /* Enable...

关键字: nvic STM32

看了一天的stm32的中断配置,对NVIC有了基本的了解(要了解NVIC,可以看《cortex M3权威指南》)。总结为3步:1.设置中断分组寄存器 AIRCR 共0~4五组。地址:0xe000E_d00C2.设置对应中...

关键字: nvic STM32

什么是NVIC?即嵌套向量中断控制器(Nested Vectored Interrupt Controller)。它是属于Cortex内核的器件,是非常强大与方便的嵌套向量中断控制器,不可屏蔽中断 (NMI)和外部中断都...

关键字: nvic STM32 中断 中断管理控制器

一、NVIC是中断向量表的统称。因为stm32的中断源非常多,在使用时有些中断必须要具有较高的优先级,那么nvic就诞生了,它就是用来配置中断顺序的。二、打开misc.c文件,可以看到以下列表。 @arg NVIC_Pr...

关键字: nvic STM32 配置
关闭
关闭