GICV2(gic400)GIC400,支持最大8个core,在gicv2中,gic由两个大模块组成:distributor和cpuinterfacedistributor:实现中断分发,对于PPI,SGI是各个core独有的中断,不参与目的core的仲裁,SPI,是所有core共享的,根据配置决定中断发往的core。最后选择最高优先级中断发送给cpuinterface。寄存器使用GICD_作为前缀。一个GIC中,只有一个GICD_*。当一个中断事件分发到多个CPUinterface(最多8个)的时候,GIC的内部逻辑应该保证只assert一个CPU。Distributor:用来收集所有的中断
ARMGIC通用中断控制器之前在学习ARMv4的时候,学习了中断控制器NVIC。之后,到ARMv7、ARMv8,我开始学习GIC了。GIC全称的是GenericInterruptController(通用中断控制器)。GIC目前已经到GICv4架构了,但下面还是主要讨论GICv2和GICv3。1.GICv2GICv2主要是由Distributor和CPU接口构成的。CPU接口最多有8个。GICv2所有的寄存器都是通过MMIO(memorymappingI/O)的形式访问的。备注:MMIO在ARMv8-A中由两个内存类型:Normal和Device。Devicememorytype(设备内存类型
在gicv3中,引入了一种新的中断类型。messagebasedinterrupts,消息中断。一、消息中断外设,不在通过专用中断线,向gic发送中断,而是写gic的寄存器,来发送中断。这样的一个好处是,可以减少中断线的个数。为了支持消息中断,gicv3,增加了LPI,来支持消息中断。并且为他分配了特别多的中断号,从8192开始,移植到16777216。LPI,locality-specificperipheralinterrupts。spec中,用了一章,来介绍这个LPI。二、LPI介绍LPI是一种基于消息的边沿中断。也就是,中断信息,不在通过中断线,进行传递,而是通过memory。gic内
参考文档:Documentation–ArmDeveloper ARMGenericInterruptControllerArchitectureSpecification目录 一,GIC的作用 二,GIC的组成二,中断状态Interruptstates三,中断类型1,软件中断SoftwareGeneratedInterrupt(SGI)2,外设中断(Peripheralinterrupt)PrivatePeripheralInterrupt(PPI)SharedPeripheralInterrupt(SPI)Edge-triggeredLevel-sensitive四,中断配置Configu