本节描述下ARM架构下的中断控制器,The Generic Interrupt Controller(GIC)

ARM架构下GIC支持好几个版本,GIC-v1, GIC-v2, GIC-v3, GIC-v4

本系列文章重点聚焦在GIC-V3版本,而GIC-V3版本的典型代表就是GIC-500

关于GIC-500的特性

  • GIC-500可以最大支持128Cores
  • GIC-500目前只支持ARMv8架构
  • GIC支持四种中断类型
  • 支持CPU-Interface, Distributor

GIC-500和CPU之间的框图

  • 中断的产生是通过physical interrupt signals(外设中断信号)或者Message-based Interrupts 或者SGIS。其实这就是GIC支持的几种中断类型
  • GIC是通过AXI4-Stream专用接口连接到CPU上的

GIC-500的内部布局

可以看到GIC内部有两个重要的模块

  • Distributor(仲裁器):
  • CPU Interface : CPU-Interface更倾向于CPU侧,每一个CPU都存在一个Interface。

再看一张更详细的图

此图中涉及了好几个概念,Distributor, CPU Interface, Redistributor, SGI, PPI, SPI, LPL

可以先看下面的中断状态和Distributor和CPU-interface的概念

  • SPI会先从Distributor路由到Target Redsitributor,然后再路由到CPU-interface模块
  • PPI直接会路由到local的Redsitributor
  • SGI中断类型是由软件触发的,则会从core路由到CPU-interface和Redsitributor模块,然后会到Dsitributor模块,决定路由到一个或者多个cpu上

中断类型

GIC-v3中定义了四种中断类型

  • SGI(Software Generated Interrupt)

    1. 中断号是0-15之间
    2. 用于core之间相互通信,由软件触发的中断,也可以称为IPI中断
  • PPI(Private Perpheral Interrupt)
    1. 中断号在16-31之间
    2. 此类中断是每个core私有的,只用于当前core处理一些业务时使用,比如每个core上有一个tick中断,用于进程调度使用
  • SPI(Shared Perpheral Interrupt)
    1. 中断号在32-1020之间
    2. 此类中断是由外设触发的中断信号产线,比如touch的触摸屏中断等
  • LPI(Local-sperical Perpherial Interrupt)
    1. 此中断不只支持GIC-v1,GIC-v2.
    2. 只基于消息类型的中断

Distributor仲裁器

仲裁器的主要作用是对中断优先级排序,以及将SPI和PPI中断分发到Redistributor和CPU-Interface模块,仲裁器对应的寄存器为GICD_CTLR

  • 使能或者关闭此中断(使能状态)
  • 对中断进行设置优先级(优先级)
  • 设置此中断的触发方式,是边沿触发还是电平触发(触发方式)
  • 控制中断的状态(中断状态)
  • 使能或者关闭Securiy(中断安全状态)
  • 设置中断的Affinity(中断的亲合性)
  • 中断的路由情况,是由那个cpu去处理此中断(中断路由信息)

以上就是Distributor的作用

CPU interface

每一个CPU对应到一个CPU Inrerface模块,当触发中断后,会由Distributor模块来设置中断的状态,以及路由到那个cpu

  • 控制中断的状态,是否已经处理完毕(状态控制)
  • 标识一个中断,获取中断的中断号(获取中断号)
  • 设置中断的优先级,如果多个中断同时到CPU-interface模块,需要区分优先级(优先级)
  • 决定是都要mask此中断等(MASK)

中断的状态

  • InActive  中断当前没有触发
  • Pending  中断已经触发了,正在等待相应的core处理中断,代表此中断已经路由到CPU interface模块了
  • Active  代表此中断已经在处理中
  • Active and Pending 代表相同的中断在处理中,又触发了一个相同的中断

中断状态的改变

  • Inactive -> Pending

    • 此中断由外设触发了
  • Pending -> Active
    • 此中断已经由CPU在处理了
  • Active -> Inactive
    • 此中断已经处理完毕了

中断处理流程

  • 外设或者软件触发一个中断,中断的状态设置为Pending
  • 此中断会走到Dirtibutor模块,进行优先级,状态,亲合性,以及路由到那个core
  • CPUinterface会将此中断路由到相应的core
  • 此时CPU会访问Interrupt Acknowledge Register(ICC_IAR0)寄存器,会获取对应的INTID,然后会将中断的状态由pending修改为Active
  • 当CPU处理完此中断后,软件上会写此EOI(End of Interrupt)标识此中断处理完毕
  • 将中断的状态由active修改为inactive

ARMv8-A Generic Interrupt Controller(GIC)相关推荐

  1. ARM架构Generic Interrupt Controller(GIC)详解之术语介绍

    在上一篇博文ARM通用中断控制器GIC(generic Interrupt Controller)简介中,笔者对GIC做了一个整体的简介,接下来笔者将对GIC中的一些细节问题进行研究学习,首先要介绍的 ...

  2. ARM架构Generic Interrupt Controller(GIC)之Distributor和CPU interface功能介绍

    GIC由Distributor和CPU interface两部分组成,如果支持虚拟化扩展,还有virtual CPU interface.本文主要介绍Distributor和CPU interface ...

  3. ARM通用中断控制器GIC(generic Interrupt Controller)简介

    参考文档: Documentation – Arm Developer  ARM Generic Interrupt Controller Architecture Specification 目录 ...

  4. RK3399平台开发系列讲解(中断篇)中断控制器(Generic Interrupt Controller)

  5. Vivado中的IP核——Interrupt Controller详解

    资料ID:PG099 文档查找软件:DocNav,在安装vivado时可以选择一并安装 Vivado的中断控制器处理中断时有两种模式,分别为快速中断模式和正常中断模式.本文只介绍正常中断模式.由于赛灵 ...

  6. 10-Platform Interrupt Controller API

    引流关键词: 中断.同步异常.异步异常.irq.fiq.BL1,BL2,BL3,BL31,BL32,BL33,AP_BL1,AP_BL2,AP_BL3,AP_BL31,AP_BL32,AP_BL33, ...

  7. WIC(wake-up interrupt controller)介绍

    cortex-m处理器处于sleep mode或deep sleep mode时,处理器需要外部中断信号来唤醒,才能继续执行指令,在deep sleep mode下,处理器可能没有时钟,甚至已经被断电 ...

  8. Armv8架构虚拟化

    转自:https://calinyara.github.io/technology/2019/11/03/armv8-virtualization.html 1 综述 本文描述了Armv8-A AAr ...

  9. 万字剖析 Armv8 架构虚拟化

    综述 本文描述了Armv8-A AArch64的虚拟化支持.包括stage 2页表转换,虚拟异常,以及陷阱.本文介绍了一些基础的硬件辅助虚拟化理论以及一些Hypervisor如何利用这些虚拟化特性的例 ...

  10. Armv8架构虚拟化介绍

    大家好,我是Peter, 今天分享个不错的虚拟化文章,先来看个虚拟化的demo. [转自https://calinyara.github.io/technology/2019/11/03/armv8- ...

最新文章

  1. Python之字符串格式化(format)
  2. 谁说只有VGG才能做风格迁移,ResNet也可以
  3. Mysql表分区的选择与实践小结
  4. docker与mmdetection
  5. 肯德基圣代中间空心_建造冰淇淋圣代解释CSS位置
  6. Oracle 多表查询 --笛卡尔集--左连接--右连接--1999 语法--满外连接
  7. 【LeetCode笔记】剑指 Offer 61-. 扑克牌中的顺子 (Java、哈希表)
  8. SpringMVC控制类的Controller方法返回值
  9. 苹果又被拒了:Guideline 4.3 - Design
  10. ADMM之1范数理解
  11. 对计算机专业学科的认识1000字,计算机专业1000字实习报告
  12. Order by 语句 的使用
  13. 三款适合HDMI信号分配的分配器芯片
  14. 欧洲机器人实验室盘点
  15. VVC系列(三)xCompressCTU、xCompressCU和xCheckModeSplit解析
  16. mybaits源码分析(八) StatementHandler的详解
  17. 强化学习导论_Example 6.5: Windy Grid-world
  18. Python函数(完整版)
  19. 贾俊平《统计学》第七章知识点总结及课后习题答案
  20. 计算方法实验:方程求根二分法、不动点迭代法、牛顿法

热门文章

  1. 显示器不能全屏及开机慢解决方案
  2. 两道动态规划的作业题
  3. h3c使用acl控制ftp访问_H3C交换机典型访问控制列表(ACL)配置实例
  4. Kafka副本同步机制理解
  5. PropertyChangeSupport 监听器模式的应用
  6. 20.23 20.4 20.5告警系统邮件引擎(上中下);20.26 运行告警系统
  7. .Net Micro Framework移植基础(包编译通过)
  8. PHP问题 —— failed to open stream: HTTP request faile
  9. 将Ext JS 5应用程序导入Web项目以及实现本地化
  10. 翻译Programming WCF Services第二版