LINUX-GIC使用

原文见正点原子Linux开发

1 GIC 控制器总览
STM32(Cortex-M) 的中断控制器叫做 NVIC I.MX6U(Cortex-A) 的中断控制器叫做 GIC
关于 GIC 的详细内容请参考开发板光盘中的文档 ARM Generic Interrupt Controller(ARM GIC
控制器 )V2.0.pdf
GIC ARM 公司给 Cortex-A/R 内核提供的一个中断控制器,类似 Cortex-M 内核中的
NVIC 。目前 GIC 4 个版本 :V1~V4 V1 是最老的版本,已经被废弃了。 V2~V4 目前正在大
量的使用。 GIC V2 是给 ARMv7-A 架构使用的,比如 Cortex-A7 Cortex-A9 Cortex-A15 等,
V3 V4 是给 ARMv8-A/R 架构使用的,也就是 64 位芯片使用的。 I.MX6U Cortex-A 内核
的,因此我们主要讲解 GIC V2 GIC V2 最多支持 8 个核。 ARM 会根据 GIC 版本的不同研发
出不同的 IP 核,那些半导体厂商直接购买对应的 IP 核即可,比如 ARM 针对 GIC V2 就开发出
GIC400 这个中断控制器 IP 核。当 GIC 接收到外部中断信号以后就会报给 ARM 内核,但是
ARM 内核只提供了四个信号给 GIC 来汇报中断情况: VFIQ VIRQ FIQ IRQ ,他们之间的
关系如图 17.1.3.1 所示:
GIC控制器
ARM内核
17.1.3.1 中断示意图
在图 17.1.3.1 中, GIC 接收众多的外部中断,然后对其进行处理,最终就只通过四个信号
报给 ARM 内核,这四个信号的含义如下:
VFIQ : 虚拟快速 FIQ
VIRQ : 虚拟外部 IRQ
FIQ : 快速中断 IRQ
IRQ : 外部中断 IRQ
VFIQ VIRQ 是针对虚拟化的,我们不讨论虚拟化,剩下的就是 FIQ IRQ 了,我们前
面都讲了很多次了。本教程我们只使用 IRQ ,所以相当于 GIC 最终向 ARM 内核就上报一个 IRQ
信号。那么 GIC 是如何完成这个工作的呢? GICV2 的逻辑图如图 17.1.3.2 所示:
17.1.3.2 中左侧部分就是中断源,中间部分就是 GIC 控制器,最右侧就是中断控制器向
处理器内核发送中断信息。我们重点要看的肯定是中间的 GIC 部分, GIC 将众多的中断源分为
分为三类:
①、 SPI(Shared Peripheral Interrupt), 共享中断,顾名思义,所有 Core 共享的中断,这个是最
常见的,那些外部中断都属于 SPI 中断 ( 注意!不是 SPI 总线那个中断 ) 。比如按键中断、串口
中断等等,这些中断所有的 Core 都可以处理,不限定特定 Core
②、 PPI(Private Peripheral Interrupt) ,私有中断,我们说了 GIC 是支持多核的,每个核肯定
有自己独有的中断。这些独有的中断肯定是要指定的核心处理,因此这些中断就叫做私有中断。
③、 SGI(Software-generated Interrupt) ,软件中断,由软件触发引起的中断,通过向寄存器
GICD_SGIR 写入数据来触发,系统会使用 SGI 中断来完成多核之间的通信。

  • 6
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

广药门徒

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值