MSP432的中断优先级问题

[复制链接]

73

主题

469

帖子

1007

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1007
楼主
查看: 5996回复: 3 发表于 2019-12-25 11:18:27   只看该作者


前几天,遇到一位网友纠结于MSP432的中断优先级问题,给了一些解题思路,对方还是没解决,感觉问题不简单啊。
本着有困难自己上的原则,花了两三天时间,阅读了MSP432P401R的数据手册和用户手册,同时参考了SDK的两个中断代码,在launchpad上简单验证后,梳理了下几个知识点供参考。

关于msp432中断的理解更新如下:

1、每一个中断,对应的一个中断号(可查看数据手册p118);
数值小的优先级高, 称为硬件优先级;中断0的优先级最高;  

2、MSP432支持用户通过软件修改中断优先级.
每个中断的软件优先级可以用一个8Bit的数据来表示(即0~255),
一般,数字小的优先级高(其实讨论这个没太大意义),但是不绝对!
因为,MSP432系统在判断 软件优先级时只使用了高3位,低5位会强行清零.
也就是说,优先级可以归结为8个大类: 0x00,0x20,0x40,0x60,0x80,0xA0,0xC0,0xE0。可以称为 组优先级。  

3、MSP432支持中断嵌套;
必须设置成不同的组优先级。(可以理解为如果不设置不同的组优先级,则不支持中断嵌套)
例如,如果中断1的组优先级高于中断2的组优先级,那么中断1可以抢占中断2. 也就是,中断2正在处理中断时,会被中断1打断,实现中断嵌套。   
4、组优先级相同的中断,相互之间不能抢占.  
如果中断的组优先级相同,则PK的是默认的硬件优先级,这点很关键。  
系统复位后,软件优先级寄存器的默认值为0,可理解为所有的中断都处于同一个组优先级中(0x00组优先级). 此时,硬件优先级决定着中断的处理顺序.   


举例1:
系统复位后,不对优先级进行任何设置.系统中有三个中断:
中断A, 中断号5;
中断B, 中断号6;
中断C, 中断号7;   分析,因为,5<6<7, 所以, 硬件优先级, 中断A 优先于 中断B 优先于 中断C。

假设系统正在处理中断B,此时, 中断A 和 中断C发生了,系统会怎么处理呢?

因为中断ABC的组优先级相同, 不能抢占,系统继续处理当前的中断B, 而中断A和中断C也处于挂起状态,等候处理;
当中断B处理完成后,系统查询当前的中断状态. 发现A和C都处于挂起状态, 而A的优先级高于C, 所以,优先处理中断A.
处理完A之后,继续查询当前的系统中断状态,如果只剩C,也继续处理中断C。

举例2: 容易设置错误的解析.
例如,中断A和中断B, 中断A的硬件优先级高于中断B;
设置中断A的软件优先级为0x21,中断B的软件优先级为0x20.
不能简单的通过软件优先值的大小, 0x20<0x21, 得出错误的结论 中断B的优先级高于中断A.   
实际上,设置0x20和0x21 是一样的效果(组优先级相同,只看最高3个比特位), 都使用有效值0x20. 具体的优先级取决于硬件优先级.
所以,中断A的优先级还是要高于中断B。

41

主题

160

帖子

332

积分

二氧化硅

Rank: 2

积分
332
沙发
发表于 2020-1-6 11:08:18   只看该作者
支持 支持

150

主题

446

帖子

1968

积分

审核员

Rank: 9Rank: 9Rank: 9

积分
1968
板凳
发表于 2020-1-8 13:23:22   只看该作者
谢谢分享

0

主题

2

帖子

59

积分

一粒轻沙

Rank: 1

积分
59
4#
发表于 2020-7-21 14:20:46   只看该作者
谢谢分享
快速回复 返回顶部 返回列表