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

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

3天内不再提示

Cortex-M3中断优先级的相关知识

CHANBAEK 来源:硬件工程师技术干货 作者:硬件工程师技术干 2023-03-23 11:45 次阅读

本文详细介绍Cortex-M3中断优先级相关知识。

1、什么是异常和中断

凡是打断程序顺序执行的事件都称为异常(exception),比如HardFault,外部中断等。所以中断也可以说是异常的一种。其实这也很好理解,因为程序执行不外乎正常和异常而已,所以打扰程序正常运行流程的事件都可以叫异常。

2、Cortex-M3异常类型

包括系统异常(异常编号1-15)和外部中断(异常编号16往上),系统异常在Cortex-M3内核中,由ARM设计,芯片厂商都会实现,外部中断最多可以有240个,由芯片生产厂家决定数量种类,比如UARTDMA等中断。Reset(-3)、NMI(-2)、HardFault(-1)这三个异常优先级都是负数且固定不变,优先级高于其他异常,除了这三个异常之外其他异常优先级都是可以编程的。

pYYBAGQbyxSAC-KkAAFd-Vso5GY743.png

3、什么是中断抢占

在执行低中断优先级中断函数时,高优先级中断到来,低优先级中断被打断,执行高优先级中断,高优先级中断执行完后回到低优先级中断继续执行。高优先级中断抢占了低优先级中断。如下图所示:

poYBAGQbyyCAS7uhAAAbe1dkc18334.png

4、什么是抢占优先级和子优先级

每个中断优先级都包含两个部分,一部分称作抢占优先级,另一部分称作子优先级。以下来详细说明以下两个优先级的含义。

1)抢占优先级不同

具有高抢占优先级的中断能够抢占低抢占优先级的中断,也就是上面提到的中断嵌套。

2)抢占优先级相同,子优先级不同

当两个中断的抢占优先级设置为相同级别时,这两个中断不会出现中断嵌套。如果其中一个中断正在执行时,另外一个中断到来,后来的中断将会等到前一个中断执行完才能执行。如果这两个中断都处在等待响应状态,执行条件到来时,首先响应子优先级高的中断。

3)抢占优先级相同,子优先级也相同

这种情况也不会出现中断嵌套,内核将会按照向量表中的排位选择,优先执行靠前的异常。比如Pend SV和Systick两个中断优先级都设置为相同,如果两个中断同时到来,优先执行PendSV,因为它的排序靠前,见上面向量表。

5、什么是优先级分组

在Cortex-M3内核中最多使用8Bit来表示中断优先级,在这8Bit中一部分用来表示抢占优先级,一部分用来表示子优先级,这两种优先级到底各占用几位,是由内核寄存器AIRCR(应用程序中断及复位控制寄存器)决定的,这个寄存的Bit8-Bit10代表了优先级分组,共3位,设置这三3位,可以改变优先级分组,如下几种组合:

000 高7位抢占优先级,低1位子优先级

001 高6位抢占优先级,低2位子优先级

010 高5位抢占优先级,低3位子优先级

011 高4位抢占优先级,低4位子优先级

100 高3位抢占优先级,低5位子优先级

101 高2位抢占优先级,低6位子优先级

110 高1位抢占优先级,低7位子优先级

111 高0位抢占优先级,低8位子优先级

另,Cortex-M3内核要求最多使用8Bit来表示中断优先级,但是很多芯片厂商为了简化设计都会进行裁剪,比如STM32只用4位表示优先级。

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

    关注

    134

    文章

    8653

    浏览量

    361825
  • 内核
    +关注

    关注

    3

    文章

    1309

    浏览量

    39848
  • 中断
    +关注

    关注

    5

    文章

    884

    浏览量

    41026
  • Cortex-M3
    +关注

    关注

    9

    文章

    268

    浏览量

    59165
  • 优先级
    +关注

    关注

    0

    文章

    21

    浏览量

    8693
收藏 人收藏

    评论

    相关推荐

    M0516中断优先级怎么设置?

    新唐M0516中断优先级的设置,有没有示例,没找到相关接口,谢谢!
    发表于 01-16 07:25

    STM32中断优先级相关使用概念

    STM32中断优先级相关使用概念
    发表于 03-21 17:19

    STM32中断优先级相关概念与使用笔记

    一、基本概念1.ARM cortex_m3内核支持256个中断(16个内核+240外部)和可编程256中断优先级的设置,与其
    发表于 03-09 15:04

    STM32中断优先级彻底讲解

    优先级,就需要有相应的寄存器位记录每个中断优先级;在Cortex-M3定义了8个比特位用于设置中断
    发表于 07-06 03:27

    STM32中断优先级的分配以及中断原则 精选资料分享

    STM32d的中断优先级由NVIC_IPRx寄存器来配置,IPR的宽度为8bit所以原则上每个中断可配置的优先级为0~255,数值越小优先级
    发表于 08-11 09:08

    Cortex-M3处理器中断与FreeRTOS中断优先级配置

    置顶/星标公众号,不错过每一条消息!很多朋友对中断的一些知识还是不了解,今天就写点关于Cortex-M3处理器中断相关,以及FreeRTOS
    发表于 08-13 06:16

    详解STM32中断优先级

    一:综述 STM32 目前支持的中断共为 84 个(16 个内核+68 个外部), 16 可编程中断优先级 的设置(仅使用中断
    发表于 08-13 07:08

    STM32(Cortex-M3)优先级概念

    一、中断优先级:STM32(Cortex-M3)优先级概念STM32(Cortex-M3)中
    发表于 08-16 07:21

    ARM Cortex-M3中断体系

    外部中断一、ARM Cortex-M3中断体系二、代码思路函数接口1.为引脚选择使用哪个中断2.配置外部中断
    发表于 08-16 07:38

    STM32中断优先级和开关总中断

    STM32中断优先级和开关总中断一,中断优先级:STM32(Cortex-M3)
    发表于 08-16 07:05

    STM32中断优先级和开关总中断

    STM32中断优先级和开关总中断一,中断优先级:STM32(Cortex-M3)
    发表于 08-23 07:06

    如何去实现在STM32/Cortex-M3的开关总中断

    STM32(Cortex-M3优先级有哪几种?如何去实现在STM32/Cortex-M3的开关总
    发表于 11-16 06:29

    探讨一下STM32中断优先级和开关总中断

    STM32中断优先级和开关总中断一,中断优先级:STM32(Cortex-M3)
    发表于 01-14 07:43

    FreeRTOS中断优先级和任务优先级架构的相关资料推荐

    FreeRTOS中断优先级和任务优先级架构:Cortex-M3版本:FreeRTOS V9.0.0前言:最开始,我并没有搞清楚什么是中断
    发表于 02-08 06:36

    2.FreeRTOS中断优先级和任务优先级

    FreeRTOS中断优先级和任务优先级架构:Cortex-M3版本:FreeRTOS V9.0.0前言:最开始,我并没有搞清楚什么是中断
    发表于 12-04 20:21 8次下载
    2.FreeRTOS<b class='flag-5'>中断</b><b class='flag-5'>优先级</b>和任务<b class='flag-5'>优先级</b>