【嵌入式——FreeRTOS】中断

【嵌入式——FreeRTOS】中断

定义

让CPU打断正常运行的程序,转而去处理紧急的程序,就叫中断。

中断执行机制

  1. 中断请求:外设产生中断请求(GPIO外部中断,定时器中断);
  2. 响应中断:CPU停止执行当前程序,转而去执行中断处理程序(ISR);
  3. 退出中断:执行完毕,返回被打断的程序处,继续往下执行。

中断优先级

中断优先级,值越低,优先级越高。

ARM Cortex-M使用了8位宽的寄存器,来配置中断的优先等级(0~255)。

STM32只用了中断优先级配置寄存器的高4位,所以STM32提供了最大16级的中断优先级。

STM32优先级分为抢占优先级和子优先级。

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

分组设置

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

优先级分组抢占优先级子优先级优先级配置寄存器高4位
NVIC_PriorityGroup_00级抢占优先级0-15级子优先级0bit用于抢占优先级,4bit用于子优先级
NVIC_PriorityGroup_10-1级抢占优先级0-7级子优先级1bit用于抢占优先级,3bit用于子优先级
NVIC_PriorityGroup_20-3级抢占优先级0-3级子优先级2bit用于抢占优先级,2bit用于子优先级
NVIC_PriorityGroup_30-7级抢占优先级0-1级子优先级3bit用于抢占优先级,1bit用于子优先级
NVIC_PriorityGroup_40-15级抢占优先级0级子优先级4bit用于抢占优先级,0bit用于子优先级

通过调用函数来设置组4

HAL_NVIC_SetPriorityGrouping(NVIC_PriorityGroup_4)

特点

  1. 低于configMAX_SYSCALL_INTERRUPT_PRIORITY优先级的中断里才允许调用FreeRTOS的API函数。
  2. 建议将所有优先级位指定为抢占优先级,方便FreeRTOS管理。
  3. 中断优先级数值越小越优先(0-15),任务优先级数值越大越优先(0-31)。

中断相关寄存器

三个系统中断优先级配置寄存器,SHPR1,SHPR2,SHPR3:
SHPR1寄存器地址:0xE000ED18
SHPR2寄存器地址:0xE000ED1C
SHPR3寄存器地址:0xE000ED20

三个中断屏蔽寄存器,PRIMASK、FAULTMAKS、BASEPRI
PRIMASK:这是个只有1个位的寄存器,当它置1时,就关掉所有可屏蔽的异常,只剩下NMI和硬fault可以响应,它的缺省值是0,表示没有关中断。
FAULTMAKS:这是个只有1个位的寄存器,当它置1时,只有NM才能响应,所有其他的异常,包括中断和fault,通通闭嘴,缺省值是0,表示没有关异常。
BASEPRI:这个寄存器最多有9位(由表达优先级的位数决定),它定义了被屏蔽优先级的阈值,当它被设成某个值后,所有优先级号大于等于此值的中断都被关(优先级号越大,优先级越低),但若被设成0,则不关闭中断,0是缺省值。

FreeRTOS所使用的中断管理就是利用BASEPRI寄存器。
BASEPRI屏蔽优先级低于某一个阈值的中断,当设置为0时,则不关闭任何中断。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值