正是因为每个中断源都需要被指定这两种优先级,就需要有相应的寄存器位记录每个中断的优先级;在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组 这里有几个小小的问题想请大家帮忙解答一下。
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)
一直不明白这两个表格有什么关系,有大家知道一下。
|