Cortex-M及STM32中断笔记

6.Cortex-M系列中断

(1)Coretx-M内核都具有NVCI(嵌套向量中断控制器)

①中断向量表在STM单片机的启动.s文件中,可以查找到具体的中断源与中断服务函数

(2)抢占优先级和响应优先级(子优先级)

1)STM32两个中断同时到达会首先判断抢占优先级,抢占优先级高的先执行,如果抢占优先级相同,就会对比子优先级,子优先级高的先执行。
②抢占优先级:打断其他中断的属性,因为抢占所以会出现中断嵌套(A中断的服务函数在执行过程中被B中断的服务函数打断,执行完B后,A再继续执行)。
③响应优先级:当两个中断的抢占优先级相同时,如果两个中断同时到达,则先处理响应优先级高的中断。
④如果内核正在执行C的中断服务函数,则它可以被A打断,因为A和抢占优先级更高,B和C的抢占优先级相同,所以B不能打断C的执行。但是如果B和C同时到达,那么B的响应优先级比C高,所以B会首先执行,但是内核可以打断比B高的中断。

(3)NVIC 中断向量控制器的优先级分组

1)Cortex-M有三个固定优先级和256个可编程优先级,最多有128个抢占优先级
2)STM32精简为16级优先级,16个优先级为4位二进制,但是抢占优先级和响应优先级均为该寄存器分配,所以有5组分配方式
a.第零组:所有4位来配置响应优先级,16种向量都具有不同响应优先级
b.第一组:最高1位配置抢占优先级,第三位配置响应优先级,表示有2种级别的抢占优先级,有8种响应优先级,所以有8个中断抢占优先级为0,响应优先级为0-7;有8个中断抢占优先级为1,响应为0-7
c.第二组:2位配置抢占优先级,2位配置响应优先级,所以有4中抢占优先级,4中响应优先级
d.第三组:高3位配置抢占优先级,低1位配置响应优先级。所以有8种抢占优先级,2种响应优先级
e.第四组:4位均配置抢占优先级,没有响应优先级
3)有三个系统异常,优先级是负数,高于所有异常。不可编程
a.复位、NMI、硬件fault

7.FreeRTOS的中断屏蔽与开启

(1)FreeRTOS在STM32中中断关闭调用 BASEPRI寄存器。

①只屏蔽优先级低于某一个阈值的中断

1)MOV R0, #0X60
2)MSR BASEPRI, R0
3)上述程序可以屏蔽优先级低于0X60的中断请求,;具体RTOS实现中,将0x60左移4位,所以屏蔽了优先级不高于0的中断,即外设所有中断。

②开启中断

1)FreeRTOS中开启中断是通过对BASEPRI寄存器写0进行的
2)MOV R0, #R0
3)MSR BASEPRI, R0

8.FreeRTOS的中断宏定义配置

(1)ConfigPRIO_BITS

设置MCU使用几位优先级,STM32使用的是4位

(2)ConfigLIBRARY_LOWEST_INTERRUPT_PRIORITY

设置最低优先级,STM32使用了4位优先级,所以最低优先级就是15(优先级数字越小,优先级越高),所以对于STM32来说该宏定义设置就为15

(3)ConfigKERNEL_INTERRUPT_PRIORITY

这个宏定义用来设置内核中断的优先级,主要是PendSV和SysTick

(4)ConfigLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY,

这个宏定义用来这是FreeRTOS系统可管理的最大优先级,比如设置为5,优先级小于5的设备不归FreeRTOS管理

(5)ConfigMAX_SYSCALL_INTERRUPT_PRIORITY

高于这个优先级的中断FreeRTOS是不能禁止的,中断服务函数也不能调用FreeRTOS的API函数。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值