0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

中断的基本概念及应用

832065824 来源:CSDN技术社区 2023-01-12 10:21 次阅读

1. 概述

中断是指MCU在运行过程中,出现某些意外情况需处理时,MCU能自动停止正在运行的程序并转入处理新情况的程序,处理完毕后又返回原被暂停的程序继续运行。中断提供了应用程序与现实世界中发生的事情之间的接口。例如,我们可以使用中断来捕获触发的按钮、看门狗喂狗操作或计算发生的时间等。

当中断发生时,处理器通常查看内存中的一个预先定义好的位置,称为中断向量。向量通常包含相关中断处理程序的地址,而包含应用程序中所有向量的内存块称为中断向量表。

2. 基本概念

2.1 中断的分类

中断可按优先级划分为单级中断与多级中断,也可按OS是否参与处理将中断分为一类与二类中断:

b5502da4-82ac-11ed-bfe3-dac502259ad0.png

2.1.1 单级与多级中断

单级:即所有的中断处于同一优先级,这也就意味着当一个中断正在执行时,其他中断必须排队等待直到当前中断处理完成。

多级:类似于Task中断也区分不同的优先级,低优先级的中断可以被高优先级的中断抢占。

2.1.2 一类与二类中断

一类中断:不与OS进行交互,是优先级最高的中断,需要用户正确的配置硬件、编写处理程序并从中断中返回,用不好的话出错概率高,一般应用较少。

二类中断:一般项目中使用的都是此类中断,中断发生时,RTA-OS执行内部代码,然后调用用户提供的ISR。中断执行从ISR的指定入口点开始,一直持续到入口函数返回。

b57a184e-82ac-11ed-bfe3-dac502259ad0.png

2.2 中断优先级

在中断的一般应用中,中断以多级中断应用为主,按中断优先级(IPL-Interrupt Priority Level)执行,RTA-OS对IPL进行了标准化,其中IPL 0表示用户级别,其中所有任务都执行,IPL为1或更多表示中断级别。

在单级平台上有两个IPL,0和1。IPL 0表示目标不被中断,任务按优先级顺序运行。IPL 1表示目标正在为中断提供服务。由于只有一个非零IPL,所有中断(类别1和类别2)都以相同的优先级运行。这意味着所有中断都是序列化的,如下图(a)。

在多级平台上,高优先级中断可以抢占低优先级中断,因此ISRs处理程序可以嵌套,但ISR不能被低优先级任务抢占,如下图(b)。

b5a0c660-82ac-11ed-bfe3-dac502259ad0.png

根据优先级顺序,一类中断优先级更高,其不能被二类中断抢占,所有的2类中断都比最低级的一类中断低。

也可进一步对中断的优先级按Task及OS级别继续划分为User Level和OS Level,此两种中断划分也是宏观级别的划分,具体如下:

2.2.1 User Level

所谓User level,即是用户可以控制的级别,即Task级别,用户级别是允许处理所有中断的最低中断优先级。所有任务都从其入口点开始在用户级别执行。

任务有时需要在用户级别以上运行,例如,它可能需要访问与ISR共享的数据。当数据被访问时,必须防止中断被调用。实现这一点的最简单方法是,可以在任务在访问数据时禁用中断。另一种方法是使用Resource机制,即当Task或2类中断已经获得资源后,其他任务或ISR无法获得该资源,防止任何其他任务或ISR同时进入同一关键部分,如修改同一处变量导致程序出错。

2.2.2 OS Level

由于二类中断是需要OS参与,这样2类ISR的最高优先级定义了OS级别。如果执行发生在OS级别或更高级别(一类中断),则不会发生其他类别2中断。RTA-OS使用OS Level来防止并发访问内部操作系统数据结构。

3. 中断的应用

3.1 中断常用API

对于RTA-OS,在StartOS()后默认所有中断都打开,实际使用中,一般常用API为使能或禁用中断,挂起、恢复中断,可以调用如下API来启用或禁用中断:

DisableAllInterrupts():禁用所有中断

EnableAllInterrupts():使能所有中断

SuspendAllInterrupts() :挂起所有中断

ResumeAllInterrupts():恢复所有中断

SuspendOSInterrupts() :挂起OS级别中断

ResumeOSInterrupts():恢复OS级别中断

以上API在实际使用中,需注意:

1) DisableAllInterrupts() and EnableAllInterrupts()在硬件层面启用或禁用中断,这两个API不能嵌套;

在DisableAllInterrupts()后必须再调用EnableAllInterrupts();

2) SuspendAllInterrupts() and ResumeAllInterrupts(),挂起及恢复所有中断,可以被嵌套;

3) SuspendOSInterrupts() and ResumeOSInterrupts(),可以嵌套使用;

4)Suspend与Resume需要成对出现,Resume不要比Suspend多;

5) 一类中断在关闭期间,不可以调用OS的API;

6) 如果2类ISR将中断级别提高到OS级别以上,并调用DisableAllInterrupts( ),则它可能不会进行任何其他RTA-OS API调用,但用于恢复中断优先级的EnableAllInterrupts( )调用除外。执行ISR时,不允许将中断优先级降低到初始级别以下。

3.2 一/二类中断的处理

3.2.1一类中断的处理

用户必须确保一类ISR输入功能的名称与用户在配置期间为ISR指定的名称相同。

对于一类ISR,在定义输入函数时,通常必须使用编译器特定的关键字,RTA-OS提供了一个名为CAT1_ISR的宏,该宏可扩展为编译器工具链的正确指令,用户应使用该指令将函数标记为一类ISR。

3.2.2 二类中断的处理

二类中断在RTA-OS控制下执行,但不得在2类ISR中放置“中断返回”命令,中断返回由RTA-OS处理。当二类中断需要执行时,由RTA-OS调用中断的入口函数,二类中断的入口函数如下:

#include  


ISR(isr_identifier){
/*  Handler  body.  */
}

3.3 中断解除

当硬件检测到中断时,它通常会设置一个挂起位,告诉中断控制器中断已经发生。然后,中断控制器将通过中断向量表跳转到处理程序,挂起位的处理取决于目标,但有两个基本方式:

1)中断处理后(即中断处理程序的分支发生时),挂起位自动清除。当处理程序退出时,如果在处理当前中断时中断变为挂起状态,它将自动重新触发。

2)挂起位必须由中断处理程序中的用户代码手动清除。中断处理程序的主体,无论是一类还是二类都需要包含清除挂起位的代码,并向硬件发送中断已被处理的信号

3.4 中断实际配置

RTA-OS使用的是静态配置,项目实际开发中,需要OS开发人员在OS模块开始配置前对各模块(Adc、Pwm、Gpt等)的中断需求进行分析,如一类/二类中断?中断优先级?回调函数名称?等,OS开发人员还需要对中断优先级进行评估,是否会影响系统中其他模块工作。

此外,RTA-OS使用指定的向量为中断生成向量表条目。与中断优先级一样,中断向量配置也是MCU特有(不同MCU,对应的向量表不同)的,因此在配置中断向量之前需要特别注意MCU选择。

3.5 更高效的中断处理方式

每个中断处理程序将在代码执行期间阻止所有优先级相同或较低的中断。在编写中断处理程序时,最好将处理程序尽可能短。长时间运行的处理程序会为低优先级中断的服务增加额外的延迟。

使用中如果需要在中断中处理较多的代码,可以采用:将代码写到Task中,再通过中断来激活Task,这样低优先级的任务可以打断该Task从而减少延迟,示例代码如下:

#include
ISR(EfficientHandler){
ActivateTask(Task1);
}


TASK(Task1){
/*Longhandlercode.*/
TerminateTask();
}

审核编辑:汤梓红

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 处理器
    +关注

    关注

    68

    文章

    18292

    浏览量

    222194
  • mcu
    mcu
    +关注

    关注

    146

    文章

    16021

    浏览量

    343674
  • 看门狗
    +关注

    关注

    10

    文章

    541

    浏览量

    70257
  • 中断
    +关注

    关注

    5

    文章

    884

    浏览量

    41028

原文标题:RTA OS系列介绍02-中断

文章出处:【微信号:汽车电子嵌入式,微信公众号:汽车电子嵌入式】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    放大电路中反馈的基本概念及判断方法

      在实用放大电路中,几乎都要引入这样或那样的反馈,以改善放大电路某些方面的性能。因此,掌握反馈的基本概念及判断方法是研究实用电路的基础。
    发表于 03-10 11:29 3451次阅读
    放大电路中反馈的<b class='flag-5'>基本概念及</b>判断方法

    中断概念及51单片机的中断系统

    中断概念及51单片机的中断系统13-1. 演示范例——声控小车13-2. 中断概念13-3. P89V51RD2单片
    发表于 03-29 10:27

    C语言基本概念及语法

    C语言基本概念和语法供初学者研讨
    发表于 08-18 10:32

    阻抗控制相关的基本概念

    阻抗控制部分包括两部分内容:基本概念及阻抗匹配。本篇主要介绍阻抗控制相关的一些基本概念
    发表于 02-25 08:11

    AGV的基本概念及基本结构组成

    AGV基础知识一、AGV的基本概念二、AGV的基本结构硬件组成软件组成1.硬件结构2.单机结构3.主要类型4.主要引导方式介绍5.驱动方式介绍6.AGV的移载方式三、AGV的控制系统1.AGV
    发表于 09-14 08:23

    USB基本概念及从机编程方法介绍

    慕课苏州大学.嵌入式开发及应用.第四章.较复杂通信模块.USB基本概念及从机编程方法0 目录4 较复杂通信模块4.4 USB基本概念及从机编程方法4.4.1 课堂重点4.4.2 测试与作业5 下一
    发表于 11-08 09:14

    单片机中断基本概念

    文章目录一.中断基本概念二.中断相关的寄存器三.中断的实际使用四.中断的优点:一.中断
    发表于 11-25 08:14

    STM32的中断系统基本概念

    STM32 中断系统概述笔记(一)中断概述中断相关的基本概念STM32的中断系统基本概念:NVI
    发表于 01-07 07:32

    中断基本概念总结

    基于STM32单片机模块练习——中断总结基本概念1.ARM cortex_m3 内核支持 256 个中断(16 个内核+240 外部)和可编程 256 级中断优先级的设置,与其相关的
    发表于 01-14 07:39

    天线的基本概念及制作

    天线的基本概念及制作  我将介绍一些常见而且容易自制的天线,这些天线能够用我们日常生活中容易得到的材料制作。我会逐一制作这些天
    发表于 01-04 09:48 1314次阅读

    基于RF射频知识基本概念及DTD无线产品介绍

    基于RF射频知识基本概念及DTD无线产品介绍
    发表于 10-25 08:38 8次下载
    基于RF射频知识<b class='flag-5'>基本概念及</b>DTD无线产品介绍

    单片机的中断系统如何使用?基本概念和应用详细讲解

    本文档的主要内容详细介绍的的是单片机的中断系统如何使用?基本概念和应用详细讲解内容包括了:一中断基本概念,二MCS-51单片机中断系统,三
    发表于 09-29 11:08 11次下载
    单片机的<b class='flag-5'>中断</b>系统如何使用?<b class='flag-5'>基本概念</b>和应用详细讲解

    单片机中断基本概念及中断系统有什么优点

    中断系统中,MCU正常情况下运行的程序称为主程序,把产生申请中断信号的单元和事件称为中断源,由中断源向MCU所发出的申请中断信号称为
    发表于 09-11 17:25 1次下载
    单片机<b class='flag-5'>中断</b>的<b class='flag-5'>基本概念及</b><b class='flag-5'>中断</b>系统有什么优点

    慕课嵌入式开发及应用(第四章.USB基本概念及从机编程方法)

    慕课苏州大学.嵌入式开发及应用.第四章.较复杂通信模块.USB基本概念及从机编程方法0 目录4 较复杂通信模块4.4 USB基本概念及从机编程方法4.4.1 课堂重点4.4.2 测试与作业5 下一
    发表于 11-03 13:21 16次下载
    慕课嵌入式开发及应用(第四章.USB<b class='flag-5'>基本概念及</b>从机编程方法)

    共生散射通信的基本概念及技术原理

    该文首先介绍共生散射通信的基本概念及技术原理, 然后从信息论基础、接收机设计、资源配置, 以及多用户接入4个方面综述该技术的研究现状。
    发表于 08-10 17:10 1063次阅读