MCU中断嵌套总结--51,STM32,DSP,ARM


接触了很多MCU,包括51,STM32,DSP,ARM。每个MCU的中断都讲的很好,例程也很多,但是关于中断嵌套这块,都是讲的比较模糊(估计有风险,程序设计最好不好中断嵌套)。以下是自己总结的内容,属于自己的理解,比较浅显,也有错误。

中断优先级:没有高优先级可以打断低优先级中断的说法。
优先级只是同时发生多个中断时,中断控制器选择高优先级的中断让CPU执行。

一、51单片机

51单片机只有二级嵌套中断优先级。

1、默认中断优先级(逻辑优先级)为:

外部中断0 > 定时/计数器0 > 外部中断1 > 定时/计数器1 > 串行中断;
IP寄存器不做任何设置时,即IP=0x0; 不能发生嵌套中断

2、IP寄存器设置了某一位(物理优先级),比如:PS (IP.4):串行口中断优先

串口中断可以打断其他中断服务函数,实现嵌套(using 用户组不能相同),其他中断还是保持默认中断。
IP寄存器只能设置一位,即设了IP.4,其他IP.n不能再设

二、STM32

STM32中的NVIC详解 https://blog.csdn.net/liuqi3256797/article/details/89891621 总结的不错。

NVIC优先级分组0-4五种, AIRC寄存器高四位[7:4]设置抢占优先级和子优先级。

1、中断同时到来情况

1.N个抢占优先级不同的中断同时到来,那么高抢占优先级的中断优先被响应。
2.抢占优先级相同的 N个子优先级(或叫响应优先级)不同的中断同时到来,那么高子优先级的中断优先被响应。

2、中断嵌套情况(打断中断)

1.高抢占式优先级的中断可以打断低抢占式优先级的中断服务程序,实现中断嵌套。
2.抢占优先级相同的情况下,子优先级高的中断不能打断低的中断服务程序,即子优先级不支持中断嵌套。

另外:Reset、NMI、Hard Fault 优先级为负数,高于普通中断优先级,且优先级不可配置。

三、DSP

DSP在硬件上没直接支持中断嵌套,但软件可实现嵌套。

对于正在处理当中的中断,如果不做软件上的特殊处理,是不能被别的中断打断的,除了NMI中断。
(DSP进入中断服务程序后默认关闭所有中断(外设级/PIE级/CPU级/全局中断))

1、如果需要中断嵌套,必须重新打开所有中断,否则无法实现嵌套功能。

比如dsp28335 想外部中断嵌套打断定时器中断,那就需要在定时器中断服务程序中重新打开外部中断
PieCtrlRegs.PIEIER1.bit.INTx4 = 1; // 使能外设级中断
IER |= M_INT1; // 使能CPU级中断
EINT; // 使能全局中断
ERTM; //----- 使能 实时中断

2、还有一个问题需不需要自己保存中断现场

https://e2echina.ti.com/question_answer/dsp_arm/omap_l1x/f/54/t/127304
https://e2echina.ti.com/question_answer/microcontrollers/c2000/f/56/t/136669
第一个链接dsp6748的例子是加了自己保存中断现场的,第二个dsp28335没有加,此问题还需验证。
目前看到的是dsp28335跟dsp6748两款,另接触的28027,6713,omap138,AM5718类似。

四、ARM

韦东山老师已经写的很好,https://blog.csdn.net/thisway_diy/article/details/78056764

结论: IRQ模式只能被FIQ模式打断,FIQ模式下谁也打不断。

1.同一时间只能有一个中断可以被设成快速中断FIQ。快速中断FIQ可以打断IRQ中断服务程序。

2. IRQ中断不能打断其他中断。

3. Linux不用FIQ,只用到了IRQ

  • 2
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值