文章目录
- GICD_CLRSPIN_NSR
- 寄存器功能
- INTID 位 [12:0]
- 中断触发类型的影响
- 小结
GICD_CLRSPIN_NSR
在 ARMv9 架构下,GIC(Generic Interrupt Controller)是负责中断管理的关键组件,它支持复杂的中断处理需求,包括多处理器环境下的中断分发和中断优先级管理。GICD_CLRSPIn_NSr
是 GIC 中的一个重要寄存器,专门用于管理非安全状态下的 SPI(Shared Peripheral Interrupts)中断的挂起状态。
以下是关于此寄存器的详细介绍:
图 1-1
上图 1-1 中,红色方块为 Redistributor, 紫色方块为 CPU Interface。
寄存器功能
- 名称:
GICD_CLRSPI_NSR
(Clear Non-Secure SPI Pending Register) - 作用:清除非安全状态下有效 SPI 的挂起状态。如果访问的安全状态和相应 SPI 的
GICD_NSACR<n>
值允许,写入此寄存器会将挂起的 SPI 状态改变为非激活状态。 - 状态变化:
- 将挂起的 SPI 状态改为非激活。
- 如果 SPI 同时处于激活状态和挂起状态,则改为仅激活状态。
- 条件:当
GICD_TYPER.MBIS
等于 0 时,此寄存器是保留的。当GICD_CTLR.DS
等于 1 时,此寄存器为所有 SPIs 提供功能。
INTID 位 [12:0]
- 含义:指定 SPI 的 INTID(中断标识符)。
中断触发类型的影响
根据目标 SPI 配置为边缘触发还是电平敏感,GICD_CLRSPIn_NSr
寄存器的功能会有所不同:
-
边缘触发中断:
- 写入
GICD_SETSPI_NSR
或GICD_SETSPI_SR
会为目标中断添加挂起状态。 - 中断会在激活时停止挂起,或者通过写入
GICD_CLRSPI_NSR
、GICD_CLRSPI_SR
或GICD_ICPENDR<n>
来移除挂起状态。
- 写入
-
电平敏感中断:
- 写入
GICD_SETSPI_NSR
或GICD_SETSPI_SR
同样会为目标中断添加挂起状态。 - 中断会保持挂起状态,直到通过写入
GICD_CLRSPI_NSR
或GICD_CLRSPI_SR
来去除断言。 - 如果在添加挂起状态和去除断言之间中断被激活,则中断会处于激活和挂起的状态。
- 写入
小结
GICD_CLRSPIn_NSr
寄存器在 GIC 的中断管理中扮演着关键角色,特别是在处理非安全 SPI 中断时。通过正确地使用此寄存器,系统能够有效地管理和控制中断的挂起状态,无论是边缘触发还是电平敏感中断。这为 ARMv9 架构下的系统提供了灵活而强大的中断处理能力。