ARMv8-A Generic Interrupt Controller(GIC)
本节描述下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)
- 中断号是0-15之间
- 用于core之间相互通信,由软件触发的中断,也可以称为IPI中断
- PPI(Private Perpheral Interrupt)
- 中断号在16-31之间
- 此类中断是每个core私有的,只用于当前core处理一些业务时使用,比如每个core上有一个tick中断,用于进程调度使用
- SPI(Shared Perpheral Interrupt)
- 中断号在32-1020之间
- 此类中断是由外设触发的中断信号产线,比如touch的触摸屏中断等
- LPI(Local-sperical Perpherial Interrupt)
- 此中断不只支持GIC-v1,GIC-v2.
- 只基于消息类型的中断
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)相关推荐
- ARM架构Generic Interrupt Controller(GIC)详解之术语介绍
在上一篇博文ARM通用中断控制器GIC(generic Interrupt Controller)简介中,笔者对GIC做了一个整体的简介,接下来笔者将对GIC中的一些细节问题进行研究学习,首先要介绍的 ...
- ARM架构Generic Interrupt Controller(GIC)之Distributor和CPU interface功能介绍
GIC由Distributor和CPU interface两部分组成,如果支持虚拟化扩展,还有virtual CPU interface.本文主要介绍Distributor和CPU interface ...
- ARM通用中断控制器GIC(generic Interrupt Controller)简介
参考文档: Documentation – Arm Developer ARM Generic Interrupt Controller Architecture Specification 目录 ...
- RK3399平台开发系列讲解(中断篇)中断控制器(Generic Interrupt Controller)
- Vivado中的IP核——Interrupt Controller详解
资料ID:PG099 文档查找软件:DocNav,在安装vivado时可以选择一并安装 Vivado的中断控制器处理中断时有两种模式,分别为快速中断模式和正常中断模式.本文只介绍正常中断模式.由于赛灵 ...
- 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, ...
- WIC(wake-up interrupt controller)介绍
cortex-m处理器处于sleep mode或deep sleep mode时,处理器需要外部中断信号来唤醒,才能继续执行指令,在deep sleep mode下,处理器可能没有时钟,甚至已经被断电 ...
- Armv8架构虚拟化
转自:https://calinyara.github.io/technology/2019/11/03/armv8-virtualization.html 1 综述 本文描述了Armv8-A AAr ...
- 万字剖析 Armv8 架构虚拟化
综述 本文描述了Armv8-A AArch64的虚拟化支持.包括stage 2页表转换,虚拟异常,以及陷阱.本文介绍了一些基础的硬件辅助虚拟化理论以及一些Hypervisor如何利用这些虚拟化特性的例 ...
- Armv8架构虚拟化介绍
大家好,我是Peter, 今天分享个不错的虚拟化文章,先来看个虚拟化的demo. [转自https://calinyara.github.io/technology/2019/11/03/armv8- ...
最新文章
- Python之字符串格式化(format)
- 谁说只有VGG才能做风格迁移,ResNet也可以
- Mysql表分区的选择与实践小结
- docker与mmdetection
- 肯德基圣代中间空心_建造冰淇淋圣代解释CSS位置
- Oracle 多表查询 --笛卡尔集--左连接--右连接--1999 语法--满外连接
- 【LeetCode笔记】剑指 Offer 61-. 扑克牌中的顺子 (Java、哈希表)
- SpringMVC控制类的Controller方法返回值
- 苹果又被拒了:Guideline 4.3 - Design
- ADMM之1范数理解
- 对计算机专业学科的认识1000字,计算机专业1000字实习报告
- Order by 语句 的使用
- 三款适合HDMI信号分配的分配器芯片
- 欧洲机器人实验室盘点
- VVC系列(三)xCompressCTU、xCompressCU和xCheckModeSplit解析
- mybaits源码分析(八) StatementHandler的详解
- 强化学习导论_Example 6.5: Windy Grid-world
- Python函数(完整版)
- 贾俊平《统计学》第七章知识点总结及课后习题答案
- 计算方法实验:方程求根二分法、不动点迭代法、牛顿法
热门文章
- 显示器不能全屏及开机慢解决方案
- 两道动态规划的作业题
- h3c使用acl控制ftp访问_H3C交换机典型访问控制列表(ACL)配置实例
- Kafka副本同步机制理解
- PropertyChangeSupport 监听器模式的应用
- 20.23 20.4 20.5告警系统邮件引擎(上中下);20.26 运行告警系统
- .Net Micro Framework移植基础(包编译通过)
- PHP问题 —— failed to open stream: HTTP request faile
- 将Ext JS 5应用程序导入Web项目以及实现本地化
- 翻译Programming WCF Services第二版