单片机
返回首页

中断NVIC优先级的理解

2024-08-12 来源:cnblogs

使用NVIC时,是为了多个中断分个优先次序

1.进行中断分组

分组函数:void NVIC_PriorityGroupConfig(uint32_t NVIC_PriorityGroup);

假设,要使中断分组为2

NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);

 

2.设置中断的优先级别(抢占优先级和子优先级)

中断初始化函数:void NVIC_Init(NVIC_InitTypeDef* NVIC_InitStruct)

假设,要设置串口1的中断,同时设置抢占优先级为1,子优先级为2


NVIC_InitTypeDef NVIC_InitStructure;

NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;//串口 1 中断

NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=1 ;// 抢占优先级为 1

NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2;// 子优先级位 2

NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQ 通道使能

NVIC_Init(&NVIC_InitStructure);  //根据上面指定的参数初始化 NVIC 寄存器


对于STM32 NVIC中断优先级管理

由于我的芯片是STM32F103,里面只有60个可屏蔽中断,也就是说只用了ISER[0]和ISER[1](CM3内核ISER共有8个,即ISER[8])

同时,对于中断分组


例如组设置为 3,那么此时所有的 60 个中断,每个中断的中断优先寄存器的高四位中的最高 3 位是抢占优先级,低 1 位是响应优先级。每个中断,你可以设置抢占优先级为 0~7,响应优先级为 1 或 0。抢占优先级的级别高于响应优先级。而数值越小所代表的优先级就越高。

个人理解:由数据的第10~8位确定第几组,后由第7~4位确定抢占优先级和响应优先级,数值越小,优先级越高。

 

这时需要注意两点:

1、如果两个中断的抢占优先级和响应优先级都是一样的话,则看哪个中断先发生就先执行;

2、高优先级的抢占优先级是可以打断正在进行的低抢占优先级

中断的。而抢占优先级相同的中断,高优先级的响应优先级不可以打断低响应优先级的中断;

假定设置中断优先级组为 2,然后设置中断 3(RTC 中断)的抢占优先级为 2,响应优先级为 1。中断 6(外部中断 0)的抢占优先级为 3,响应优先级为 0。中断 7(外部中断 1)的抢占优先级为 2,响应优先级为 0。那么这 3 个中断的优先级顺序为:中断 7>中断 3>中断 6。


进入单片机查看更多内容>>
相关视频
  • 【TI MSPM0 应用实战】智能小车+工业角度编码器+血氧仪+烟雾探测器!硬核参考设计详解!

  • 2022 Digi-Key KOL 系列: 你见过1GHz主频的单片机吗?Teensy 4.1开发板介绍

  • TI 新一代 C2000™ 微控制器:全方位助力伺服及马达驱动应用

  • MSP430电容触摸技术 - 防水Demo演示

  • 直播回放: Microchip Timberwolf™ 音频处理器在线研讨会

  • 基于灵动MM32W0系列MCU的指夹血氧仪控制及OTA升级应用方案分享

精选电路图
  • 1瓦线性调频增强器

  • 1瓦四级调频发射机

  • 500W MOS场效应管电源逆变器,12V转110V/220V

  • 红外开关

  • LM317过压保护

  • 0-30V/20A 大功率稳压电源(采用LM338)

    相关电子头条文章