FreeRTOS Cortex-M 中断管理

中断

大概了解就行

中断是微控制器一个常见的特性 产生中断之后 CPU 就会中断当前的事情去处理中断事件。
内核提供了嵌套的向量控制器。

去看相关的资料
在这里插入图片描述

在这里插入图片描述
去启动文件 staup_stm32f10x.hd.s 看

0-15个异常清单 (内部的)  -3 -2 -1 看起来就是最高级的 因为都是固定的 
数字越低 优先级越高
16-255 :外部中断清单 

外部中断的相关结构体参数

中断属于内核的东西就去相关h文件看 他的结构体定义 

在这里插入图片描述

虽说有这么多 但是我们就不可能用的完  
 IP[0]- IP[239] 的每个数组 就对应了一个中断 

我们再来看中断表的一个东西

在这里插入图片描述
WEAK 有何用处呢 @重定向

WEAK:启动文件定义了的  只不过 里面的内容是没有的 如果重定向 就不会调用里面的函数 
比如 printf 

优先级 分组

访问地址
在这里插入图片描述

 base 就是基地址

优先级分组

在这里插入图片描述

为了使抢占变得根据稳定,CM3把优先级 分成了高低两段 
HSB是左边的 LSB是右边的  左边是父优先级 右边是子优先级
[7:1] 意思是 17都是 父优先级(左边)
[0:0] 意思是 0 是子优先级(右边)
下面的也是如此思路

优先级的设置寄存器 AIRCR
在这里插入图片描述

0X0C是偏移量  基地址是 0XE00EE000  偏移+基地址= AIRCR 地址 
0XE000E000+0X0C  

优先级用法
在这里插入图片描述

四位的情况
在这里插入图片描述

我们不能直接拿到  1111 这串数字就直接算了  必须要位移 四位
因为 1111 开始就是 00001111  所以要位移四位  1111<<4

结合结构体和优先级分组表来看
在这里插入图片描述

一共有5组就对应了 优先级分组的3-7 
1 因为用四位来表示优先级 

怎么对应呢
1

 #define NVIC_PriorityGroup_0         ((uint32_t)0x700) /*!< 0 bits for pre-emption priority
                                                            4 bits for subpriority */
0bit :没有一位是父优先级       4bit:全部都是子优先级                                                   

1 对应的优先级组是
在这里插入图片描述

后面的依次减少就 可以得到答案了

中断优先级设定

在这里插入图片描述
简单说是

0-4 的优先级 不归FreeRTOS管理 5-15 才是FreeRTOS的管理范围

相关的 宏定义
在这里插入图片描述

数字越小 优先级越大 0-4 不归FreeRTOS管理
所以 5 是FreeRTOS最大的优先级 15最小

中断屏蔽器

@Cortex-M3笔记_基础

简单介绍

用于中断屏蔽的特殊寄存器
PRIMASK, FAULTMASK 和 BASEPRI这三个寄存器,可以参考上面链接,大致了解这三个中断屏蔽寄存器。
BASEPRI寄存器可以只屏蔽低于某一阈值的优先级中断,FreeRTOS的开关中断就是通过BASEPRI这个寄存器实现。
想屏蔽某一阈值之下的优先级,直接将优先级写进寄存器即可,写入0就停止屏蔽中断
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值