ARM GIC-400 寄存器

1.简介

GIC-400是用于控制中断的。在cubieboard2 上 的A20芯片采用了这款控制器。

cubieboard2 的GIC控制器 的地址是0x01C80000---0x01C87FFF ,长度等于GIC-400寄存器的长度。

具体的内容如下所示。

以0x01C80000为起始地址,下面给出的是偏移:


0x0000-0x0FFF


Reserved 未使用,无用


0x1000-0x1FFF


Distributor 配置器 有用


0x2000-0x3FFF


CPU interfaces CPU接口 有用


0x4000-0x4FFF


Virtual interface control block, for the processor that is performing the access

虚拟化相关,无用


0x5000-0x5FFF


Virtual interface control block, for the processor selected by address bits [11:9]

虚拟化相关,无用

 
0x5000-0x51FF

0x5200-0x53FF

...

0x5E00-0x5FFF


Alias for Processor 0

Alias for Processor 1

...

Alias for Processor 7


0x6000-0x7FFF


Virtual CPU interfaces

虚拟化相关,无用

常用的是图中第二块和第三块,0x1000~0x3fff这部分的配置。

2.Distributor 配置器

distributor这块寄存器的地址 = GIC控制器 的地址 + 0x1000 ,使用的时候别忘记了偏移。然后从这里开始,有如下的寄存器


偏移


名称


可读写


复位后


作用


0x000


GICD_CTLR


RW


0x00000000[c]


Distributor Control Register

写入1使能控制器,必备


0x004


GICD_TYPER


RO


Configuration-dependent[d]


Interrupt Controller Type Register

其中可以查看中断线的总数


0x008


GICD_IIDR


RO


0x0200143B


Distributor Implementer Identification Register, GICD_IIDR

存了一些版本信息,没用


0x080-0x0BC


GICD_IGROUPRn


RW


0x00000000


Interrupt Group Registers[e]

一个位图,控制中断属于A组还是B组


0x100


GICD_ISENABLERn


RW[f]


SGIs and PPIs:0x0000FFFF[g]


Interrupt Set-Enable Registers

一个位图,用于使能各个中断,写入1使能。有用


0x104-0x13C


SPIs: 0x00000000


0x180


GICD_ICENABLERn


RW[f]


0x0000FFFF[g]


Interrupt Clear-Enable Registers

和上一个寄存器类似,作用相反,写入1禁止。


0x184-0x1BC


0x00000000


0x200-0x23C


GICD_ISPENDRn


RW


0x00000000


Interrupt Set-Pending Registers

pend位图,写入1可以进入pend状态


0x280-0x2BC


GICD_ICPENDRn


RW


0x00000000


Interrupt Clear-Pending Registers

同上,写入1效果相反,阻止pend状态


0x300-0x33C


GICD_ISACTIVERn


RW


0x00000000


Interrupt Set-Active Registers

位图,写入1可以激活中断

0x380-0x3BC
GICD_ICACTIVERn


RW


0x00000000


Interrupt Clear-Active Registers

写入1反激活中断


0x400-0x5FC


GICD_IPRIORITYRn

RW
0x00000000


Interrupt Priority Registers

存着各个中断的优先级,每8位算一个


0x800-0x81C


GICD_ITARGETSRn


RO[h]


-


Interrupt Processor Targets Registers[i]

某个中断应该发往哪个处理器进行处理


0x820-0x9FC


RW


0x00000000


0xC00


GICD_ICFGRn


RO


SGIs: 0xAAAAAAAA


Interrupt Configuration Registers, GICD_ICFGRn

配置中断是低电平触发还是下降沿触发


0xC04


RO


PPIs: 0x55540000


0xC08-0xC7C


RW[j]


SPIs: 0x55555555

0xD00
GICD_PPISR


RO

0x00000000
Private Peripheral Interrupt Status Register, GICD_PPISR

一般没用

0xD04-0xD3C
GICD_SPISRn


RO

0x00000000
Shared Peripheral Interrupt Status Registers, GICD_SPISRn

没用

0xF00
GICD_SGIR


WO

-
Software Generated Interrupt Register

控制软中断

0xF10-0xF1C
GICD_CPENDSGIRn


RW


0x00000000


SGI Clear-Pending Registers

软中断的pend位


0xF20-0xF2C


GICD_SPENDSGIRn


RW


0x00000000


SGI Set-Pending Registers

同上,不过写入1时停止pend


0xFD0


GICD_PIDR4


RO


0x00000004


Peripheral ID 4 Register


0xFD4


GICD_PIDR5


RO


0x00000000


Peripheral ID 5 Register


0xFD8


GICD_PIDR6


RO


0x00000000


Peripheral ID 6 Register


0xFDC


GICD_PIDR7


RO


0x00000000


Peripheral ID 7 Register


0xFE0


GICD_PIDR0


RO


0x00000090


Peripheral ID 0 Register


0xFE4


GICD_PIDR1


RO


0x000000B4


Peripheral ID 1 Register


0xFE8


GICD_PIDR2


RO


0x0000002B


Peripheral ID 2 Register


0xFEC


GICD_PIDR3


RO


0x00000000


Peripheral ID 3 Register


0xFF0


GICD_CIDR0


RO


0x0000000D


Component ID 0 Register


0xFF4


GICD_CIDR1


RO

0x000000F0
Component ID 1 Register


0xFF8


GICD_CIDR2


RO


0x00000005


Component ID 2 Register


0xFFC


GICD_CIDR3


RO


0x000000B1


Component ID 3 Register

3.cpu接口

开始地址的偏移量为


Offset


Name


Type


Reset


Description[a]


0x0000


GICC_CTLR


RW


0x00000000


CPU Interface Control Register

使能位。写入1使能


0x0004


GICC_PMR


RW


0x00000000


Interrupt Priority Mask Register

限制中断最低优先级,高于此值无法中断,最好写大一点


0x0008


GICC_BPR


RW


0x00000002[b]


Binary Point Register

The minimum value of the Binary Point Register depends on which security-banked copy is considered:

0x2

Secure copy

0x3

Non-secure copy

优先级分组


0x000C


GICC_IAR


RO


0x000003FF


Interrupt Acknowledge Register

只读,中断id


0x0010


GICC_EOIR


WO

-
End of Interrupt Register

写入以告知cpu已经处理完中断


0x0014


GICC_RPR


RO


0x000000FF


Running Priority Register

当前中断优先级


0x0018


GICC_HPPIR


RO


0x000003FF


Highest Priority Pending Interrupt Register [c]

最高优先级中断号及其pend值


0x001C


GICC_ABPR


RW


0x00000003


Aliased Binary Point Register[d]

The minimum value of the Aliased Binary Point Register is 0x3.

别名寄存器


0x0020


GICC_AIAR


RO


0x000003FF


Aliased Interrupt Acknowledge Register[d]

别名寄存器


0x0024


GICC_AEOIR


WO


-


Aliased End of Interrupt Register[d]

别名寄存器


0x0028

GICC_AHPPIR
RO


0x000003FF


Aliased Highest Priority Pending Interrupt Register[c][d]

别名寄存器


0x00D0


GICC_APR0


RW


0x00000000


Active Priority Register

用于保存和恢复


0x00E0


GICC_NSAPR0


RW


0x00000000


Non-Secure Active Priority Register[d]

用于保存和恢复


0x00FC

GICC_IIDR
RO


0x0202143B


CPU Interface Identification Register, GICC_IIDR

存着版本信息


0x1000

GICC_DIR
WO

-
Deactivate Interrupt Register

时间: 2024-10-17 23:03:46

ARM GIC-400 寄存器的相关文章

ARM处理器的寄存器,ARM与Thumb状态,7中运行模式

** ARM处理器的寄存器,ARM与Thumb状态,7中运行模式 分类: 嵌入式 ARM处理器工作模式一共有 7 种 : USR  模式    正常用户模式,程序正常执行模式 FIQ模式(Fast Interrupt Request)     处理快速中断,支持高速数据传送或通道处理 IRQ模式     处理普通中断 SVC模式(Supervisor)     操作系统保护模式,处理软件中断swi  reset ABT  中止(Abort mode){数据.指令}    处理存储器故障.实现虚拟

linux kernel 中断子系统之(一)-- ARM GIC 硬件

一个系统中,中断是很重要的组成部分之一,有了中断,系统才可以不用一直轮询(polling)是否有事件发生,系统效率才得以提高,而且对中断的控制又通常分散在各个地方,不同的部分由不同功能的程序控制,做到了各司其职,配合无误,系统才能正常工作.一般系统中,中断控制分为三个地方:模块.中断控制器.处理器,模块通常有寄存器可以控制是否使能中断功能,中断触发条件等:中断控制器可以管理中断的优先级等,而处理所有中断的处理器则有寄存器设置是否响应中断. 1. 全景 作为 ARM 系统中通用中断控制器的是 GI

[转载]ARM协处理器CP15寄存器详解

用于系统存储管理的协处理器CP15  原地址:http://blog.csdn.net/gameit/article/details/13169405 MCR{cond}     coproc,opcode1,Rd,CRn,CRm,opcode2 MRC {cond}    coproc,opcode1,Rd,CRn,CRm,opcode2 coproc         指令操作的协处理器名.标准名为pn,n,为0~15 opcode1      协处理器的特定操作码. 对于CP15寄存器来说,

【汇编指令】ARM指令集之寄存器及32位概述

1) ARM处理器有37+3个32位寄存器:其中有32个通用寄存器,只有一个PC指针寄存器,一般习惯用R15来指向正在取指的指令,而不是正在执行的指令.(这里涉及到arm处理器的流水线操作流程,下面在介绍),七个状态寄存器:但是只有一个CPSR寄存器(用来表示当前程序状态寄存器),6个SPSR寄存器(用来保存备份当前程序状态的异常数据). 处理器在工作时有8种不同的工作模式,对应的每一种处理器模式都有一组相应的寄存器组: 这里USER/SYS工作模式共用一个寄存器组,但是USER模式没有特权,而

ARM cortex M3寄存器及指令集

1.cortex M3拥有通用寄存器R0-R15及一些特殊寄存器: R0‐R7 也被称为低组寄存器.所有指令都能访问它们.它们的字长全是 32 位,复位后的初始值是不可预料的. R8‐R12 也被称为高组寄存器.这是因为只有很少的 16 位 Thumb 指令能访问它们, 32位的指令则不受限制.它们也是 32 位字长,且复位后的初始值是不可预料的 . R13 是堆栈指针.在 CM3 处理器内核中共有两个堆栈指针,于是也就支持两个堆栈.当引用 R13(或写作 SP)时,你引用到的是当前正在使用的那

ARM处理器的寄存器

在ARM体系中通常有以下3种方式控制程序的执行流程: **在正常执行过程中,每执行一条ARM指令,程序计数器(PC)的值加4个字节:每执行一条Thumb指令,程序计数器寄存器(PC)加2个字节.整个过程是按顺序执行. **跳转指令,程序可以跳转到特定的地址标号处执行,或者跳转到特定的子程序处执行.其中,B指令用于执行跳转操作:BL指令在执行跳转操作同时,保存子程 序的返回地址:BX指令在执行跳转操作同时,根据目标地址为可以将程序切换到Thumb状态:BLX指令执行3个操作,跳转到目标地址处执行,

ARM协处理器CP15寄存器详解

ref:http://blog.csdn.net/gameit/article/details/13169405 背景: 在uboot中,start.s中涉及到了 CP15 的有关操作.查阅有关资料,进行学习. 用于系统存储管理的协处理器CP15,可以通过 下面两条汇编指令控制 MCR {cond} coproc,opcode1,Rd,CRn,CRm,opcode2 MRC {cond} coproc,opcode1,Rd,CRn,CRm,opcode2 *这2条指令仅适用于32位寄存器,因为6

ARM 指令之寄存器间接寻址的几种表达方式

我们以 LDR 指令为例来分别举例分析. LDR 指令的格式为: LDR{条件} 目的寄存器,<存储器地址> LDR 指令是字加载指令,用于从存储器中将一个 32 位的字数据送到目的寄存器中.该指令通常用于从存储器中读取 32 位的字数据到通用寄存器,然后对数据进行处理.当程序计数器 PC 作为目的寄存器时,指令从存储器中读取的字数据被当作目的地址,从而可以实现程序流程的跳转. 指令示例: LDR R3, [R4] ; 将存储器地址为 R4 的字数据读入寄存器 R3 LDR R3, [R1,

ARM寄存器

ARM寄存器 一.ARM工作状态下的寄存器组织 ARM微处理器共有37个32位寄存器,其中31个为通用寄存器,6个位状态寄存器.但是这些寄存器不能被同时访问,具体哪些寄存器是可以访问的,取决ARM处理器的工作状态及具体的运行模式.但在任何时候,通用寄存器R14~R0.程序计数器PC(即R15).一个状态寄存器都是可访问的. 通用寄存器通用寄存器包括R0~R15,可以分为3类:(1)未分组寄存器R0~R7(2)分组寄存器R8~R14(3)程序计数器PC(R15) 1.未分组寄存器R0~R7在所有运

[iOS逆向实战 之一]arm寄存器简介

个人原创,转帖请注明来源:cnblogs.com/jailbreaker [iOS逆向实战]这个系列的帖子,会涉及到arm汇编,以及调试工具的使用,加上实战解析一步步逆向,深入浅出. 这是第一篇帖子,简要说下arm的各个寄存器的功能. R0-R3:用于函数参数及返回值的传递 R4-R6, R8, R10-R11:没有特殊规定,就是普通的通用寄存器 R7:栈帧指针(Frame Pointer).指向前一个保存的栈帧(stack frame)和链接寄存器(link register, lr)在栈上的