打印
[综合信息]

HC32F460的中断优先级理解分析

[复制链接]
1770|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
   在开发过程中,经常对中断优先级疑惑,中断分组,抢占优先级,响应优先级要如何理解?是哪些寄存器在起作用?代码要如何配置?
   本次就花些时间整理一下思路。

一、 中断分组原理的个人理解
CORTEX-M4的中断优先级分为抢占优先级响应优先级。

按照字面理解如下:
抢占优先级(preemptive priority):优先级高的可以抢占低级中断的CPU使用权。
响应优先级(Subpriority):优先级高的可以得到CPU的优先响应
响应优先级只有在同等抢占优先级下才有意义,也只有在中断同时发生时才有意义。
其他情况下的中断,谁先发生就响应谁。
CORTEX_M4使用一个寄存器表示中断优先级,此寄存器最高为8位。
但是芯片设计商会根据芯片规格选择有效的位数(保留高位)。例如ST只使用了4位。
保留下来的这些位需要表明抢占优先级和响应优先级。
如何区分两种优先级就需要中断优先级分组Priority Grouping),中断优先级分组就是表明如何分配保留下来的这些位。
优先级分组在寄存器SCB->AIRCR的BIT[8~10]中配置。
CORTEX-M4中,标准的配置如下
                              
以上分组确定之后,就可以根据分组情况确定抢占优先级与响应优先级的分配了。
二、 举例说明
以ST为例,ST的优先级寄存器保留了4位,因此其有效的分组只能有以下几种情况
在只有高四位有效的情况下,分组0~2与分组3表示的意义是一样的,都是只有抢占优先级,没有响应优先级。所以ST的分组只有3~7这几种可能。由于要将3~7写入寄存器SCB->AIRCR的BIT[8~10],所以最终ST的分组代码如下
三、 小华F460的中断配置
1、 确定F460中断有效位数
通过F460的参考手册,可以确定F460也是同样保留了4位中断优先级寄存器。
在代码中也有相关的配置
2、按照CORTEXM4权威手册,中断分组默认组别为0.
通过仿真器在线仿真,也可以确认此处分组确实为0。
因此F460默认的中断只有16个抢占优先级,没有响应优先级。
如果需要使用响应优先级,可以先配置中断分组,然后再配置中断的抢占优先级与响应优先级即可。

使用特权

评论回复
沙发
tpgf| | 2024-1-17 19:15 | 只看该作者
管理中断优先级别的寄存器是什么寄存器呢

使用特权

评论回复
板凳
wowu| | 2024-1-17 19:46 | 只看该作者
通过仿真器在线仿真 如何看到这个分组号呢

使用特权

评论回复
地板
xiaoqizi| | 2024-1-18 08:00 | 只看该作者
相同等级的中断优先级是如何进行响应的呢

使用特权

评论回复
5
木木guainv| | 2024-1-18 09:01 | 只看该作者
同组的中断的优先级别是不是就是一样高的啊

使用特权

评论回复
6
磨砂| | 2024-1-18 09:43 | 只看该作者
抢占优先级和响应优先级是不是不可以分开进行设置啊

使用特权

评论回复
7
晓伍| | 2024-1-18 20:08 | 只看该作者
一般情况下 我们很少会用到这么多的中断优先级

使用特权

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

本版积分规则

10

主题

89

帖子

2

粉丝