问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

MCU中断资源使用指南:如何合理、高效地利用中断功能?

创作时间:
作者:
@小白创作中心

MCU中断资源使用指南:如何合理、高效地利用中断功能?

引用
1
来源
1.
https://mcu.eetrend.com/content/2024/100580373.html

MCU的中断功能是芯片里非常重要的一个功能模块,也是对产品功能和性能优劣有着至关重要的一项功能。本文将深入探讨如何合理、高效地使用MCU的中断资源,包括中断资源的种类、优先级设置、使用场景和注意事项等。

MCU中断资源概述

MCU的中断资源因内核不同而有所差异。以常见的51单片机和ARM Cortex-M系列单片机为例:

  • 51单片机:共有5~6个中断源,包括外部中断(2个)、定时器中断(3个)、串口中断(1个)。它们的初始优先级从高到低依次为:外部中断0 > 定时器0 > 外部中断1 > 定时器1 > 串口中断 > 定时器2。

要使用51单片机的中断,需要设置两个寄存器:中断允许寄存器IE和中断优先级寄存器IP。中断允许寄存器支持对每个中断进行位操作和总允许控制,而中断优先级寄存器则可以改变中断源的优先级,分为高和低两个优先级。

  • ARM Cortex-M系列单片机:中断资源更加丰富,内嵌了中断控制器NVIC和扩展中断EXTI事件控制器。

中断使用问答

问题1:为什么要用中断?中断能解决什么问题?

中断功能最重要的价值在于实现“任务切换”,通过中断方式从某个任务切换到另一个任务,从而实现CPU资源的最大化。在运行操作系统的MCU中,中断承担着更加重要的角色,如进程调度、内存管理等功能都需要用到中断功能。

问题2:如何高效利用中断资源?

  1. 合理设计中断资源的外部线路,尤其是存在多种外部中断输入时。例如,将触发频率较低的按键信号安排在外部中断1,将频率较高的信号放在中断0。
  2. 合理设置中断优先级,让实时性要求高的中断任务获得更高的优先级。
  3. 精确计算中断服务程序的执行时长,评估其对被中断任务的影响。在执行实时性很高的子程序时可以考虑屏蔽中断响应,执行完之后再开放中断。

问题3:使用中断有哪些注意事项?

  1. 中断函数被调用的时间不固定,因此需要自己保护现场。
  2. 中断函数被调用的地点不固定,当前的任务无法给中断函数传参。
  3. 中断函数的返回地点不固定,因此中断函数不能有返回值。

在一个嵌入式ARM裸机环境下,编写中断处理函数时一般要遵循以下基本流程:

  1. 保存中断现场:状态寄存器、返回地址入栈、中断ISR中要用到的寄存器入栈。
  2. 清中断:关中断,保护现场。有些硬件会自动清除,重开中断前记得要清除。
  3. 执行用户编写的中断处理函数。
  4. 恢复现场:将栈中保存的数据弹到CPU的各个寄存器中,恢复被中断的现场,从栈中弹出返回地址到PC寄存器,CPU从被打断的程序处继续执行。

问题4:如何使用才能让它稳定可靠?

对于可靠性要求更高的产品,需要对中断服务有非常精准的把控,高度的确定性是稳定可靠的前提条件。在使用中断嵌套时要非常小心,避免在特殊情况下高优先级的中断始终占用芯片资源。如果不能准确判断中断的频率和占用资源的情况,就要想办法避免中断嵌套的发生。最简单的方法是在进入某个中断服务子程序后暂时关闭所有中断,在完成这个服务程序后再打开中断允许,让中断服务按照先到先执行的方式运行。

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号