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

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

3天内不再提示

ARM CORE支持中断嵌套吗?GIC中断控制器支持中断嵌套吗?

安芯教育科技 来源:Arm精选 2024-08-07 09:29 次阅读

以下文章来源于Arm精选 ,作者baron

说明:

在默认情况下,本文讲述的都是ARMV8-aarch64架构,gicv3, linux kernel 5.14

思考:你是否想过这样的一个场景:当一个中断正在处理事务时,又来了一个高优先级中断把它抢占了?也就是所谓着中断嵌套。很多人可能都会说“这种场景当然存在了”,但现实中真的存在吗?不要被网上的博客或书上的一些章节所误导,今天我们抛开事务看本质,从以下方面着手进行讨论:

ARM CORE支持中断嵌套吗

GIC中断控制器支持中断嵌套吗?

Linux Kernel操作系统有没有使用中断嵌套?

在介绍之前,我们先记下几个共识(也就是常识,本文不做重复介绍的):

FIQ和IRQ具有同样的优先级,FIQ只是一种中断类型,并非所谓着快速中断。

1、ARM CORE支持中断嵌套吗?

首先来看ARM CORE支持中断嵌套吗?答案 支持! 但是是有一个前提,在进入中断处理时,PSTATE的I、F、A等比特位是MASK的,软件中需要主动unmask后,那么就可以中断嵌套了。如下图所示,正是ARM Core支持中断嵌套的一个示例(或者叫模型):

wKgZomayzjCAbruAAALLD5rSKbg755.png

2、GIC中断控制器支持中断嵌套吗?

继续看GIC中断控制器支持中断嵌套吗?答案 支持中断抢占,支持中断嵌套!。

2.1、先介绍以下优先级和抢占的概念

每个 INTID(中断号) 都有一个优先级(用寄存器GICD_IPRIORITYn 或 GICR_IPRIORITYn 表示),它是一个 8 位无符号值。0x00 是可能的最高优先级,0xFF 是可能的最低优先级

每个 PE 在其 CPU interface中都有一个优先级掩码寄存器 (ICC_PMR_EL1)。该寄存器设置将中断转发到该 PE 所需的最低优先级。只有优先级高于寄存器值的中断才会发送给 PE

GICv3 架构具有 运行优先级的概念。当 PE 响应中断时,它的运行优先级变为该中断的优先级。当 PE 写入 EOI 寄存器之一时,运行优先级将返回其先前值。如果 PE 尚未处理中断,则运行优先级为空闲优先级 (0xFF)。只有优先级高于运行优先级的中断才能抢占当前中断

2.2、Without preemption :即关闭抢占,disable running priority

在Without preemption的情况下,高优先级的中断无法抢占正在active的中断,只能等active的中断执行完了、返回了,高优先级的中断才能发生"抢占"(这里还说抢占,合适吗?此种情况应属于抢占pendding中断)。如下图所示,便是一个示例:

高优先级的中断 无法抢占active的中断

等待active的中断执行完毕返回了,高优先级的中断才能发生抢占(也就是抢占pendding中断)

wKgZomayzjmADbzDAAGd-Q8LuU8039.png

虽然你关闭了抢占,但优先级仍然存在,仍然会发生作用

抢占正在pendding中断的示例, 这种情况下,一个高优先级的中断可以抢占一个低优先级的pendding中断,并非抢占正在执行的中断,抢占后高优先级的中断变成pendding。而我们大多数人所说的中断嵌套是指,一个中断正在执行时,被另外一个中断给抢占了。

当 CPU interface上的一个低优先级中断处于pendding状态时,更高优先级的中断也可能会变为pendding状态。Redistributor 可以为新的更高优先级中断发送 Set 命令。此 Set 命令将取代之前的 Set 命令,导致 CPU interface为较低优先级的中断发出 Release。下图显示了此类场景的示例。该示例假设 INTID Y 的优先级高于 INTID X。

wKgZomayzk-ASBQQAAGkwZRNNrw364.png

2.3、With preemption

接下来就看 抢占正在active中断的示例,描述的其实就是:一个中断正在执行,然后另一个更高优先级的中断打断了它, 这也就是正是我们所说的中断嵌套。

在考虑抢占时,运行优先级的概念很重要。当一个高优先级中断被发送给一个已经在处理一个低优先级中断的 PE 时,就会发生抢占。 抢占为软件带来了一些额外的复杂性,但它可以防止低优先级中断阻塞更高优先级中断的处理。

wKgaomayzlGAcBGBAAHuyycud7o572.png

2.4、那么对于一个gicv3的IP,优先级肯定是有的,它到底是Without preemption 还是With preemption呢?如何配置的呢?

请查略ICC_BPRn_EL1寄存器,该寄存器定义优先级值字段分成两部分的点,即组优先级字段和子优先级字段。组优先级字段确定组 1 中断抢占。 换句白话来解释就是,中断优先级被分成了两部分,如下图所示,ICC_BPRn_EL1寄存器的BIT[2:0]定义了下图中的N的值

wKgZomayzmWAL-DwAAC8dcnYUlU192.png

对于抢占,仅考虑Group优先级位。Subpriority优先级位被忽略. 然后举一个例子:

INTID A has priority 0x10

INTID B has priority 0x20

INTID C has priority 0x21

如上有三个中断,A可以抢占B,但B不可以抢占C,因为B和C的Group priority是一样的

wKgZomayzm6ABEArAAIWnxcHE7I271.png

3、 Linux Kernel操作系统有没有使用中断嵌套?

继续看Linux Kernel操作系统有没有使用中断嵌套?答案 没有使用!

首先查看ICC_BPRn_EL1寄存器的配置:

wKgZomayznaAXXzPAAFt5-w3KI0935.png

写入的是0,也就是意味着,N=0, 即下图的第一行,也就是说抢占是开启的。

wKgaomayzn-AEXrJAAFUHaS9ja4581.png

继续看,针对每一个 INTID(中断号) 的priority的配置,如下所示,在gic初始化阶段,给每一个 INTID(中断号) 都配置成了一样的优先级,值位0XA5。也就是所有中断的优先级都是一样的。

wKgaomayzoaAJTVmAADavH0WhP4232.png

事实上,在gicv3代码中,提供了一个接口,可以单独针对某一中断设置优先级。

查略该函数用途,仅仅是为NMI中断设置的(注:Linux Kernel中armv8体系目前还没有该中断,ARMV9新增了一类NMI中断),其值为0Xa5 & 0x7f = 0x25,该值小于0XA0,所有该优先级大于其它中断的优先级。

wKgZomayzo-AcmJRAAIUF0-r28k353.png

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

    关注

    134

    文章

    8953

    浏览量

    364791
  • 控制器
    +关注

    关注

    112

    文章

    15855

    浏览量

    175005
  • Linux
    +关注

    关注

    87

    文章

    11118

    浏览量

    207784
  • 中断嵌套
    +关注

    关注

    0

    文章

    7

    浏览量

    6820

原文标题:ARM体系中是否支持中断嵌套

文章出处:【微信号:Ithingedu,微信公众号:安芯教育科技】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    嵌套向量中断控制器NVIC

    8 嵌套向量中断控制器NVIC
    发表于 04-28 09:23

    ARM中断控制器

    系统)、hypervisor模式(虚拟化)。 中断控制器的CPU interface 每一个cpu核都对应一个GIC的cpu interface,cpu interface支持的可编程接口如下: 1
    发表于 08-29 08:39

    NVIC嵌套向量中断控制器

    文章目录前言一、NVIC 嵌套向量中断控制器二、EXIT 外部中断控制器三 、外部中断实验1)初始化用来产生中断的GPIO2)初始化EXTI
    发表于 08-16 08:32

    STM32的NVIC嵌套向量中断控制器与EXIT外部中断控制器介绍

    NVIC是什么?NVIC嵌套向量中断控制器有何功能?EXIT外部中断控制器是什么?有何功能?
    发表于 11-16 09:37

    NVIC嵌套向量中断控制器介绍

    一、NVIC 介绍NVIC 英文全称是 Nested Vectored Interrupt Controller,中文意思就是嵌套向量中断控制器,它属于 M3 内核的一个外设,控制着芯片的中断
    发表于 12-07 07:51

    简要介绍配置嵌套向量中断控制器

    配置嵌套向量中断控制器static void NVIC_Configuration(void)//OK{NVIC_InitTypeDef NVIC_InitStructure; /* 嵌套向量
    发表于 02-22 08:14

    ARM CoreLink GIC-500通用中断控制器技术参考手册

    GIC-500是一个构建时可配置的中断控制器,最多支持128个内核。GIC-500仅支持实现ARMv8架构的内核,以及具有标准
    发表于 08-02 14:02

    华芯微特MCU的嵌套向量中断控制器与外部中断/事件控制器的使用方法

    01. 嵌套向量中断控制器(NVIC) NVIC的全称是Nested vectoredinterrupt controller,即嵌套向量中断控制器。 Cortex-M0和Cortex
    的头像 发表于 06-04 12:08 3329次阅读
    华芯微特MCU的<b class='flag-5'>嵌套</b>向量<b class='flag-5'>中断控制器</b>与外部<b class='flag-5'>中断</b>/事件<b class='flag-5'>控制器</b>的使用方法

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

    MCU中断嵌套总结--51,STM32,DSP,ARM一、51单片机1、默认中断优先级(逻辑优先级)为:2、IP寄存设置了某一位(物理优先
    发表于 11-05 20:35 7次下载
    MCU<b class='flag-5'>中断</b><b class='flag-5'>嵌套</b>总结--51,STM32,DSP,<b class='flag-5'>ARM</b>

    中断控制器的驱动解析(上)

    这里主要分析 linux kernel 中 GIC v3 中断控制器的代码(drivers/irqchip/irq-gic-v3.c)。设备树先来看下一个中断控制器的设备树信息:
    发表于 12-04 16:36 10次下载
    <b class='flag-5'>中断控制器</b>的驱动解析(上)

    扒开 ARM 中断控制器的底裤

    GIC 硬件原理GIC,Generic Interrupt Controller。是ARM公司提供的一个通用的中断控制器。主要作用为:接受硬件中断
    发表于 12-04 17:36 6次下载
    扒开 <b class='flag-5'>ARM</b> <b class='flag-5'>中断控制器</b>的底裤

    细说STM32的中断控制器(NVIC)那些事

    ​1、什么是NVIC?来自《CM3技术参考手册》的官方资料回答:即嵌套向量中断控制器(Nested Vectored Interrupt Controller)。说白了NVIC的功能就是中断优先级
    发表于 01-14 15:54 6次下载
    细说STM32的<b class='flag-5'>中断控制器</b>(NVIC)那些事

    ARM通用中断控制器规范手册

    本规范描述了ARM通用中断控制器GIC)体系结构。在本文档中,对GICGIC的引用是指实现此GIC
    发表于 06-02 11:03 1次下载

    关于ARM中断控制器的介绍

    GIC 硬件原理 GIC,Generic Interrupt Controller。是ARM公司提供的一个通用的中断控制器。主要作用为:接受硬件中断
    的头像 发表于 07-08 09:34 2155次阅读

    LPC800前生今世 第三章-嵌套式向量中断控制器

    嵌套式向量中断控制器 NVIC: Nested Vectored Interrupt Controller 中断是所有的 M CU 都必须具备的功能,由于非常重要的地位, ARM 公司
    的头像 发表于 09-21 11:55 742次阅读
    LPC800前生今世 第三章-<b class='flag-5'>嵌套</b>式向量<b class='flag-5'>中断控制器</b>