【FreeRTOS】学习笔记(七)

中断管理

让CPU打断正常运行的程序,转而去处理紧急的事件(程序),就叫中断
中断执行机制,可简单概括为三步:

  1. 中断请求:外设发出中断请求;
  2. 响应中断:CPU停止执行当前程序,转而去执行中断处理程序;
  3. 推出中断:执行完毕,返回被打断的程序处继续执行。

中断优先级分组设置

优先级分类

ARM Cortex-M使用了8位宽的寄存器来配置中断的优先级,这个寄存器就是中断优先级配置寄存器
但STM32只使用了中断优先级配置寄存器的高4位[7:4],所以STM32提供了最大16级的中断优先等级

STM32的中断优先级可以分为抢占优先级子优先级
抢占优先级:抢占优先级高的中断可以打断正在执行但抢占优先级低的中断
子优先级:当同时发生具有相同抢占优先级的两个中断时,子优先级数值小的优先执行

中断优先级数值越小越优先

分配方式

中断优先级一共有5中分配方式,对应这中断优先级分组的5个组

优先级分组抢占优先级子优先级优先级配置寄存器高4位
NVIC_PrioriGroup_00级抢占优先级0-15级子优先级0bit用于抢占优先级;4bit用于子优先级级
NVIC_PrioriGroup_10-1级抢占优先级0-7级子优先级1bit用于抢占优先级;3bit用于子优先级级
NVIC_PrioriGroup_20-3级抢占优先级0-3级子优先级2bit用于抢占优先级;2bit用于子优先级级
NVIC_PrioriGroup_30-7级抢占优先级0-1级子优先级3bit用于抢占优先级;1bit用于子优先级级
NVIC_PrioriGroup_40-15级抢占优先级0级子优先级4bit用于抢占优先级;0bit用于子优先级级

FreeRTOS主要使用NVIC_PrioriGroup_4管理中断优先级,即无子优先级。

FreeRTOS中断特点

  1. 低于configMAX_SYSCALL_INTERRUPT_PRIORITY优先级的中断里才允许调用FreeRTOS的API函数——上份笔记中提到的优先级(5-15)才允许调用挂起任务函数。
  2. 所有优先级位指定为抢占优先级位,方便FreeRTOS管理
  3. 中断优先级数值越小越优先,任务优先级数值越大越优先

中断相关寄存器

系统中断优先级配置寄存器

三个系统中断优先级配置寄存器,分别为SHPR1、SHPR2、SHPR3,大小均为32位
SHPR1寄存器地址:0xE000ED18
SHPR2寄存器地址:0xE000ED1C
SHPR3寄存器地址:0xE000ED20

地址名称描述
0xE000ED18PRI_4存储器管理fault的优先级
0xE000ED19PRI_5总线fault的优先级
0xE000ED1APRI_6用法fault的优先级
0xE000ED1B--
0xE000ED1C--
0xE000ED1D--
0xE000ED1E--
0xE000ED1FPRI_11SVC优先级
0xE000ED20PRI_12调试监视器的优先级
0xE000ED21--
0xE000ED22PRI_14PendSV的优先级
0xE000ED23PRI_15SysTick的优先级

PendSV和Systick一般配置为中断最低优先级,保证系统切换任务时不会阻塞系统其他中断的响应

中断屏蔽寄存器

三个中断屏蔽寄存器,分别位PRIMASK、FAULTMASK和MASEPRI

名字功能描述
PRIMASK这是个只有1个位的寄存器,当它置1时,就关掉所有可屏蔽的中断,只剩下NMI和硬fault可以响应。它的缺省值是0,表示没有关中断
FAULTMASK这是个只有1个位的寄存器,当它置1时,只剩下NMI可以响应。它的缺省值是0,表示没有关中断
BASEPRI这个寄存器最多有9位(由表达优先级的位数决定)。它定义了被屏蔽优先级的阈值。当它被设置成某个值后,所有优先级号大于等于此值的中断都被关

FreeRTOS所使用的中断管理就是利用的BASEPRI这个寄存器

比如:BASEPRI设置为0x50,表示中断优先级在5~15内的均被屏蔽,优先级高于5的中断则不会被FreeRTOS屏蔽

当BASEPRI设置为0x50

在中断服务函数中调度FreeRTOS的API函数需注意:

  1. 中断服务函数的优先级需在FreeRTOS所管理的范围内
  2. 在中断服务函数里边需调用FreeRTOS的API函数,必须使用带“FromISR”后缀的函数

FreeRTOS的中断管理就是利用BASEPRI寄存器实现的。

  • 36
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值