打印
[STM32F1]

关于stm32 中断优先级的问题

[复制链接]
3833|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
正是因为每个中断源都需要被指定这两种优先级,就需要有相应的寄存器位记录每个中断的优先级;在Cortex-M3中定义了8个比特位用于设置中断源的优先级,这8个比特位可以有8种分配方式,如下:
1.     所有8位用于指定响应优先级
2.     最高1位用于指定抢占式优先级,最低7位用于指定响应优先级
3.     最高2位用于指定抢占式优先级,最低6位用于指定响应优先级
4.     最高3位用于指定抢占式优先级,最低5位用于指定响应优先级
5.     最高4位用于指定抢占式优先级,最低4位用于指定响应优先级
6.     最高5位用于指定抢占式优先级,最低3位用于指定响应优先级
7.     最高6位用于指定抢占式优先级,最低2位用于指定响应优先级
8.     最高7位用于指定抢占式优先级,最低1位用于指定响应优先级

以上便是优先级分组的概念,但是Cortex-M3允许具有较少中断源时使用较少的寄存器位指定中断源的优先级,因此STM32把指定中断优先级的寄存器位减少到4位,这4个寄存器位的分组方式如下:
第0组:所有4位用于指定响应优先级
第1组:最高1位用于指定抢占式优先级,最低3位用于指定响应优先级
第2组:最高2位用于指定抢占式优先级,最低2位用于指定响应优先
第3组:最高3位用于指定抢占式优先级,最低1位用于指定响应优先级
第4组:所有4位用于指定抢占式优先级

这里便对于于**最前提到的固件库里相关的函数了——NVIC_PriorityGroupConfig(u32   NVIC_PriorityGroup),函数的参数共有5种:
这个函数的参数(NVIC_PriorityGroup值)有下列5种:
NVIC_PriorityGroup_0 => 选择第0组
NVIC_PriorityGroup_1 => 选择第1组
NVIC_PriorityGroup_2 => 选择第2组
NVIC_PriorityGroup_3 => 选择第3组
NVIC_PriorityGroup_4 => 选择第4组
NVIC_PriorityGroup
先占优先级
从优先级
描述
NVIC_PriorityGroup_0
0
0-15
先占优先级0位从优先级4位
NVIC_PriorityGroup_1
0-1
0-7
先占优先级1位从优先级3位
NVIC_PriorityGroup_2
0-3
0-3
先占优先级2位从优先级2位
NVIC_PriorityGroup_3
0-7
0-1
先占优先级3位从优先级1位
NVIC_PriorityGroup_4
0-15
0
先占优先级4位从优先级0位
这里有几个小小的问题想请大家帮忙解答一下。
1)分组里面,中断2组。0-3里面的数值是代表中断的优先级别,越小越大?
3)中断分组里面,每一个组的总数都是不相等的?
2)比如我有两个中断A和B需要进行设置。选择的分组是0,那么是不是A和B可以同样设置成,抢占为0,响应优先级为0。这样,A和B两个中断,抢占优先级一样,响应的也一样,那就根据中断的序号大小来执行?
     
   设置中断组为3,A和B的抢占优先级分别为0和3,响应是0和1,那么A可以打断B正在执行的中断?那么就不用判断响应了?
4)

   一直不明白这两个表格有什么关系,有大家知道一下。










QQ图片20140324214957.jpg (46.82 KB )

QQ图片20140324214957.jpg

QQ图片20140324215012.jpg (28.72 KB )

QQ图片20140324215012.jpg
沙发
airwill| | 2014-3-27 23:27 | 只看该作者
1) 越小越高!
3) 不明白什么意思?
2)同时触发中断的时候才出现这个情况
     
4)   设置中断组为3,A和B的抢占优先级分别为0和3,响应是0和1,那么A可以打断B正在执行的中断?  正确
那么就不用判断响应了?  不明白什么意思?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

8

主题

32

帖子

0

粉丝