ARM GIC-400 寄存器

1.简介

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

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

具体的内容如下所示。

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

偏移地址说明
0x0000-0x0FFFReserved 未使用,无用
0x1000-0x1FFFDistributor 配置器 有用
0x2000-0x3FFFCPU interfaces CPU接口 有用
0x4000-0x4FFFVirtual interface control block, for the processor that is performing the access虚拟化相关,无用
0x5000-0x5FFFVirtual interface control block, for the processor selected by address bits [11:9]虚拟化相关,无用
0x5000-0x51FF0x5200-0x53FF…0x5E00-0x5FFFAlias for Processor 0Alias for Processor 1…Alias for Processor 7
0x6000-0x7FFFVirtual CPU interfaces虚拟化相关,无用

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

2.Distributor 配置器

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

偏移名称可读写复位后作用
0x000GICD_CTLRRW0x00000000[c]Distributor Control Register写入1使能控制器,必备
0x004GICD_TYPERROConfiguration-dependent[d]Interrupt Controller Type Register其中可以查看中断线的总数
0x008GICD_IIDRRO0x0200143BDistributor Implementer Identification Register, GICD_IIDR存了一些版本信息,没用
0x080-0x0BCGICD_IGROUPRnRW0x00000000Interrupt Group Registers[e]一个位图,控制中断属于A组还是B组
0x100GICD_ISENABLERnRW[f]SGIs and PPIs:0x0000FFFF[g]Interrupt Set-Enable Registers一个位图,用于使能各个中断,写入1使能。有用
0x104-0x13CSPIs: 0x00000000
0x180GICD_ICENABLERnRW[f]0x0000FFFF[g]Interrupt Clear-Enable Registers和上一个寄存器类似,作用相反,写入1禁止。
0x184-0x1BC0x00000000
0x200-0x23CGICD_ISPENDRnRW0x00000000Interrupt Set-Pending Registerspend位图,写入1可以进入pend状态
0x280-0x2BCGICD_ICPENDRnRW0x00000000Interrupt Clear-Pending Registers同上,写入1效果相反,阻止pend状态
0x300-0x33CGICD_ISACTIVERnRW0x00000000Interrupt Set-Active Registers位图,写入1可以激活中断
0x380-0x3BCGICD_ICACTIVERnRW0x00000000Interrupt Clear-Active Registers写入1反激活中断
0x400-0x5FCGICD_IPRIORITYRnRW0x00000000Interrupt Priority Registers存着各个中断的优先级,每8位算一个
0x800-0x81CGICD_ITARGETSRnRO[h]-Interrupt Processor Targets Registers[i]某个中断应该发往哪个处理器进行处理
0x820-0x9FCRW0x00000000
0xC00GICD_ICFGRnROSGIs: 0xAAAAAAAAInterrupt Configuration Registers, GICD_ICFGRn配置中断是低电平触发还是下降沿触发
0xC04ROPPIs: 0x55540000
0xC08-0xC7CRW[j]SPIs: 0x55555555
0xD00GICD_PPISRRO0x00000000Private Peripheral Interrupt Status Register, GICD_PPISR一般没用
0xD04-0xD3CGICD_SPISRnRO0x00000000Shared Peripheral Interrupt Status Registers, GICD_SPISRn没用
0xF00GICD_SGIRWO-Software Generated Interrupt Register控制软中断
0xF10-0xF1CGICD_CPENDSGIRnRW0x00000000SGI Clear-Pending Registers软中断的pend位
0xF20-0xF2CGICD_SPENDSGIRnRW0x00000000SGI Set-Pending Registers同上,不过写入1时停止pend
0xFD0GICD_PIDR4RO0x00000004Peripheral ID 4 Register
0xFD4GICD_PIDR5RO0x00000000Peripheral ID 5 Register
0xFD8GICD_PIDR6RO0x00000000Peripheral ID 6 Register
0xFDCGICD_PIDR7RO0x00000000Peripheral ID 7 Register
0xFE0GICD_PIDR0RO0x00000090Peripheral ID 0 Register
0xFE4GICD_PIDR1RO0x000000B4Peripheral ID 1 Register
0xFE8GICD_PIDR2RO0x0000002BPeripheral ID 2 Register
0xFECGICD_PIDR3RO0x00000000Peripheral ID 3 Register
0xFF0GICD_CIDR0RO0x0000000DComponent ID 0 Register
0xFF4GICD_CIDR1RO0x000000F0Component ID 1 Register
0xFF8GICD_CIDR2RO0x00000005Component ID 2 Register
0xFFCGICD_CIDR3RO0x000000B1Component ID 3 Register

3.CPU接口

开始地址的偏移量为0x2000

OffsetNameTypeResetDescription[a]
0x0000GICC_CTLRRW0x00000000CPU Interface Control Register使能位。写入1使能
0x0004GICC_PMRRW0x00000000Interrupt Priority Mask Register限制中断最低优先级,高于此值无法中断,最好写大一点
0x0008GICC_BPRRW0x00000002[b]Binary Point RegisterThe minimum value of the Binary Point Register depends on which security-banked copy is considered:0x2 Secure copy0x3 Non-secure copy优先级分组
0x000CGICC_IARRO0x000003FFInterrupt Acknowledge Register只读,中断id
0x0010GICC_EOIRWO-End of Interrupt Register写入以告知cpu已经处理完中断
0x0014GICC_RPRRO0x000000FFRunning Priority Register当前中断优先级
0x0018GICC_HPPIRRO0x000003FFHighest Priority Pending Interrupt Register [c]最高优先级中断号及其pend值
0x001CGICC_ABPRRW0x00000003Aliased Binary Point Register[d]The minimum value of the Aliased Binary Point Register is 0x3.别名寄存器
0x0020GICC_AIARRO0x000003FFAliased Interrupt Acknowledge Register[d]别名寄存器
0x0024GICC_AEOIRWO-Aliased End of Interrupt Register[d]别名寄存器
0x0028GICC_AHPPIRRO0x000003FFAliased Highest Priority Pending Interrupt Register[c][d]别名寄存器
0x00D0GICC_APR0RW0x00000000Active Priority Register用于保存和恢复
0x00E0GICC_NSAPR0RW0x00000000Non-Secure Active Priority Register[d]用于保存和恢复
0x00FCGICC_IIDRRO0x0202143BCPU Interface Identification Register, GICC_IIDR存着版本信息
0x1000GICC_DIRWO-Deactivate Interrupt Register
comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计