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

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

3天内不再提示

关于ARM中断控制器的介绍

Linux阅码场 来源:一口Linux 作者:土豆居士 2022-07-08 09:34 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

GIC 硬件原理

GIC,Generic Interrupt Controller。是ARM公司提供的一个通用的中断控制器。主要作用为:接受硬件中断信号,并经过一定处理后,分发给对应的CPU进行处理。

当前GIC 有四个版本,GIC v1~v4, 本文主要介绍GIC v3控制器。

GIC v3中断类别

GICv3定义了以下中断类型:

SGI(Software Generated Interrupt):软件触发的中断。软件可以通过写 GICD_SGIR 寄存器来触发一个中断事件,一般用于核间通信,内核中的 IPI:inter-processor interrupts 就是基于 SGI。

PPI(Private Peripheral Interrupt):私有外设中断。这是每个核心私有的中断。PPI会送达到指定的CPU上,应用场景有CPU本地时钟

SPI(Shared Peripheral Interrupt):公用的外部设备中断,也定义为共享中断。中断产生后,可以分发到某一个CPU上。比如按键触发一个中断,手机触摸屏触发的中断。

LPI(Locality-specific Peripheral Interrupt):LPI 是 GICv3 中的新特性,它们在很多方面与其他类型的中断不同。LPI 始终是基于消息的中断,它们的配置保存在表中而不是寄存器。比如 PCIe 的 MSI/MSI-x 中断。

中断类型 硬件中断号
SGI 0-15
PPI 16-31
SPI 32-1019
reserved ......
LPI 8192-MAX

GIC v3 组成

eaaccc62-fe51-11ec-ba43-dac502259ad0.png

GICv3 控制器由以下三部分组成:

Distributor:SPI 中断的管理,将中断发送给 Redistributor

打开或关闭每个中断。Distributor对中断的控制分成两个级别。一个是全局中断的控制(GIC_DIST_CTRL)。一旦关闭了全局的中断,那么任何的中断源产生的中断事件都不会被传递到 CPU interface。另外一个级别是对针对各个中断源进行控制(GIC_DIST_ENABLE_CLEAR),关闭某一个中断源会导致该中断事件不会分发到 CPU interface,但不影响其他中断源产生中断事件的分发。

控制将当前优先级最高的中断事件分发到一个或者一组 CPU interface。当一个中断事件分发到多个 CPU interface 的时候,GIC 的内部逻辑应该保证只 assert 一个CPU。

优先级控制。

interrupt属性设定。设置每个外设中断的触发方式:电平触发、边缘触发;

interrupt group的设定。设置每个中断的 Group,其中 Group0 用于安全中断,支持 FIQ 和 IRQ,Group1 用于非安全中断,只支持 IRQ;

Redistributor:SGI,PPI,LPI 中断的管理,将中断发送给 CPU interface

启用和禁用 SGI 和 PPI。

设置 SGI 和 PPI 的优先级。

将每个 PPI 设置为电平触发或边缘触发。

将每个 SGI 和 PPI 分配给中断组。

控制 SGI 和 PPI 的状态。

内存中数据结构的基址控制,支持 LPI 的相关中断属性和挂起状态。

电源管理支持。

CPU interface:传输中断给 Core

打开或关闭 CPU interface 向连接的 CPU assert 中断事件。对于 ARM,CPU interface 和 CPU 之间的中断信号线是 nIRQCPU 和 nFIQCPU。如果关闭了中断,即便是 Distributor 分发了一个中断事件到 CPU interface,也不会 assert 指定的 nIRQ 或者 nFIQ 通知 Core。

中断的确认。Core 会向 CPU interface 应答中断(应答当前优先级最高的那个中断),中断一旦被应答,Distributor 就会把该中断的状态从 pending 修改成 active 或者 pending and active(这是和该中断源的信号有关,例如如果是电平中断并且保持了该 asserted 电平,那么就是 pending and active)。ack 了中断之后,CPU interface 就会 deassert nIRQCPU 和 nFIQCPU 信号线。

中断处理完毕的通知。当 interrupt handler 处理完了一个中断的时候,会向写 CPU interface 的寄存器通知 GIC CPU 已经处理完该中断。做这个动作一方面是通知 Distributor 将中断状态修改为 deactive,另外一方面,CPU interface 会 priority drop,从而允许其他的 pending 的中断向 CPU 提交。

为 CPU 设置中断优先级掩码。通过 priority mask,可以 mask 掉一些优先级比较低的中断,这些中断不会通知到 CPU。

设置 CPU 的中断抢占(preemption)策略。

在多个中断事件同时到来的时候,选择一个优先级最高的通知 CPU。

GICv3 控制器内部模块和各中断类型的关系如下图所示:

eac047e2-fe51-11ec-ba43-dac502259ad0.png

中断路由

GICv3 使用 hierarchy 来标识一个具体的 core, 如下图是一个四层的结构(aarch64):

eacdb508-fe51-11ec-ba43-dac502259ad0.png

... 的形式组成一个 PE 的路由。每一个 core 的 affnity 值可以通过 MPDIR_EL1 寄存器获取, 每一个 affinity 占用8bit。配置对应 core 的 MPIDR 值,可以将中断路由到该 core 上。

各个 affinity 的定义是根据 SOC 自己的定义,比如:

... ...

中断亲和性的设置的通用函数为 irq_set_affinity,后面会做详细介绍。

中断状态机

中断处理的状态机如下图:

eadd6674-fe51-11ec-ba43-dac502259ad0.png

Inactive:无中断状态,即没有 Pending 也没有 Active。

Pending:硬件或软件触发了中断,该中断事件已经通过硬件信号通知到 GIC,等待 GIC 分配的那个 CPU 进行处理,在电平触发模式下,产生中断的同时保持 Pending 状态。

Active:CPU 已经应答(acknowledge)了该中断请求,并且正在处理中。

Active and pending:当一个中断源处于 Active 状态的时候,同一中断源又触发了中断,进入 pending 状态。

中断处理流程

https://dragonki先暂时略过.blog.这里的详细net/article/de相关内容在/1058后面详细分

外设发起中断,发送给 Distributor

Distributor 将该中断,分发给合适的 Redistributor

Redistributor 将中断信息,发送给 CPU interface

CPU interface 产生合适的中断异常给处理器

处理器接收该异常,并且软件处理该中断

审核编辑:何安

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

    关注

    135

    文章

    9499

    浏览量

    388731
  • 控制器
    +关注

    关注

    114

    文章

    17645

    浏览量

    190261

原文标题:扒开 ARM 中断控制器的底裤

文章出处:【微信号:LinuxDev,微信公众号:Linux阅码场】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    CW32定时中断介绍

    ;GPIO_Init(CW_GPIOB,GPIO_InitStruct);}3.配置嵌套矢量中断控制器 void NVIC_Configuration(void){ __disable_irq
    发表于 12-01 07:08

    Cortex-M产品的特色

    的处理能力。 中断控制器:Cortex-M处理内置了灵活的中断控制器,能够支持多种中断优先级和高效的中断处理机制。 访问
    发表于 11-26 07:22

    易灵思Sapphire SoC中RISC-V平台级中断控制器深度解析

    随着 RISC -V处理在 FPGA 领域的广泛应用,易灵思 FPGA 的 Sapphire RISC-V 内核凭借软硬核的灵活支持,为开发者提供多样选择。本文深入探讨 Sapphire SoC 中 RISC - V 平台级中断控制器(PLIC),解析其架构与操作机制
    的头像 发表于 11-08 09:35 6827次阅读
    易灵思Sapphire SoC中RISC-V平台级<b class='flag-5'>中断控制器</b>深度解析

    PY32F030系列32位ARM Cortex-M0+微控制器介绍

    在嵌入式开发领域,一款性能适配、成本可控且功耗优异的 MCU,往往是项目成功的关键。今天要为大家隆重介绍的PY32F030 系列 32 位 ARM Cortex-M0 + 微控制器,正是这样一款能
    的头像 发表于 10-15 16:43 650次阅读

    瑞萨RA系列MCU的中断过程介绍

    中断来临的时候会最先经过IRQ寄存,IRQ寄存检测到中断的时候,会向中央处理嵌套向量中断控制器NVIC发送
    的头像 发表于 09-23 09:45 981次阅读
    瑞萨RA系列MCU的<b class='flag-5'>中断</b>过程<b class='flag-5'>介绍</b>

    Analog Devices / Maxim Integrated MAX32672 ARM Cortex-M4F微控制器特性/应用/框图

    Analog Devices MAX32672 ARM Cortex-M4F微控制器是一款超低功耗、高性价比、高度集成、高度可靠的32位微控制器。该器件支持具有复杂传感处理的设计,且
    的头像 发表于 06-27 11:12 520次阅读
    Analog Devices / Maxim Integrated MAX32672 <b class='flag-5'>ARM</b> Cortex-M4F微<b class='flag-5'>控制器</b>特性/应用/框图

    第六章 外部中断

    本章介绍W55MH32的IO口作为外部中断输入的使用。先阐述了NVIC(嵌套向量中断控制器) 的结构、寄存、优先级及相关函数,再说明EXTI(外部
    的头像 发表于 05-26 16:27 1004次阅读
    第六章 外部<b class='flag-5'>中断</b>

    车载整机控制器 工程机械主机控制器#硕博电子#国产控制器

    控制器
    长沙硕博电子科技股份有限公司
    发布于 :2025年05月26日 09:09:02

    AS32X601驱动系列教程 PLIC_中断应用详解

    平台中断控制器(Platform Level Interrupt Controller,PLIC)是国科安芯AS32系列MCU芯片的中断控制器,主要对中断源进行采样,优先级仲裁和分发。各外设
    的头像 发表于 05-23 17:10 525次阅读
    AS32X601驱动系列教程 PLIC_<b class='flag-5'>中断</b>应用详解

    工程机械控制器厂家 控制器国产替代 #国产控制器#控制器厂家#控制器品牌

    控制器
    长沙硕博电子科技股份有限公司
    发布于 :2025年04月29日 14:15:05

    一文认识ARM控制器及瑞萨RA系列MCU

    俗称单片机,如果有学过微机原理就会很熟悉这个概念了。而ARM控制器,顾名思义,就是基于ARM的微控制器,或者说搭载了ARM处理
    的头像 发表于 03-24 09:17 2289次阅读
    一文认识<b class='flag-5'>ARM</b>微<b class='flag-5'>控制器</b>及瑞萨RA系列MCU

    工程机械控制器如何选型?控制器选型指南 #控制器 #车载控制器 #整车控制器 #控制器选型

    控制器
    长沙硕博电子科技股份有限公司
    发布于 :2025年03月14日 10:54:24

    Y1620工程机械主机控制器 车载智能控制器 CAN总线 #工程机械控制器 #整车控制器 #车载控制器

    控制器
    长沙硕博电子科技股份有限公司
    发布于 :2025年02月10日 15:32:21

    温度控制器上下限设定,温度控制器上下限怎么调

    在现代工业自动化、家庭温控以及各类需要精确温度控制的场合中,温度控制器发挥着至关重要的作用。温度控制器的上下限设定是确保其正常工作、实现精准温控的关键步骤。本文将详细介绍温度
    的头像 发表于 01-29 15:30 1.3w次阅读

    串口中断是内部中断还是外部中断,串口中断是怎么触发的

    串口中断通常被视为外部中断。虽然串口控制器(如USART、UART等)可能集成在微控制器或处理的内部,但从
    的头像 发表于 01-29 15:03 2624次阅读