GIC 是支持多核的,每个核有自己独有的中断。 ③、SGI(Software-generated Interrupt),软中断,由软件触发引起的中断,通过向寄存器 GICD_SGIR 写入数据来触发,系统会使用 SGI 中断来完成多核之间的通信。 中断源有很多,为了区分这些不同的中断源肯定要给他们分配一个唯一 ID,这些 ID 就是中断 ID。GIC-v2中每一...
* GICD_IGRPMODR 和 GICD_IGROUPR用于控制中断分组,当然如果是前面32个中断则用redistributor对应的寄存器GICR_IGROUPR0 和 GICR_IGRPMODR0 * GICR_ISENABLER0 和 GICD_ISENABLER 用于开中断 * GICR_ICENABLER0 和 GICD_ICENABLERn 用于关中断 * ICC_ASGI1R_EL1 和 ICC_SGI1R_EL1, 都是用于软中断group1,...
SGInum: 软中断中断号 A3,A2,A1: 对应Aff3.Aff2.Aff1 TargetList: 对应SGI寄存器中的TargetList Range Selecto: 对应SGI寄存器中的RS域 比如,往ICC_SGI0R_EL1寄存器写0xffffef_ffffffff,那么cpu interface会发送如下波形: A3V GICv3中,使用属性层次对CPU进行编号,属性层次最多有4层,最高层为Aff3,...
一、gicv2架构 GICv2,支持最大8个core。其框图如下图所示: 在gicv2中,gic由两个大模块组成: distributor:实现中断分发,对于PPI,SGI是各个core独有的中断,不参与目的core的仲裁,SPI,是所有core共享的,根据配置决定中断发往的core。最后选择最高优先级中断发送给cpu interface。寄存器使用 GICD_ 作为前缀。一个gic...
一个核上触发的中断,并不影响其他核上同样中断号,并且每个核的SGI设置都是独立的。可以通过System register或者GICD_SGIR触发中断,共16个独立的SGIs,ID0-ID15。 PPIs - 用于和CPU和紧耦合的外设,因此PPI仅发送到相关的CPU核。一个核上触发的 智能推荐...
通过写 GICD_SGIR 寄存器,来产生软中断。软中断,可以指定产生中断,发往执行的core,也可以发送多个core。 对于软中断,这个是软件产生的中断。比如软件,想给执行自己的core,发送一个中断,就可以通过软中断来产生。或者软件,想起其他的core,发送一个中断,也可以通过软中断来产生。
③、SGI(Software-generated Interrupt),软中断,由软件触发引起的中断,通过向寄存器 GICD_SGIR 写入数据来触发,系统会使用 SGI 中断来完成多核之间的通信。 中断源有很多,为了区分这些不同的中断源肯定要给他们分配一个唯一 ID,这些 ID 就是中断 ID。GIC-v2中每一个 CPU 最多支持 1020 个中断 ID,中断 ID 号...
通过写 GICD_SGIR 寄存器,来产生软中断。软中断,可以指定产生中断,发往执行的core,也可以发送多个core。 对于软中断,这个是软件产生的中断。比如软件,想给执行自己的core,发送一个中断,就可以通过软中断来产生。或者软件,想起其他的core,发送一个中断,也可以通过软中断来产生。
static void gicv2_send_sgi(uint32_t sgi, enum sgi_mode mode, cpumask_t *mask) { unsigned int cpu; unsigned int value = 0; switch (mode) { // 发送一个 SGI 给所有 CPU case SGI_TO_OTHERS: writel_gicd(GICD_SGI_TARGET_OTHERS | sgi, GICD_SGIR); ...
• SGI:(Software Generated Interrupt,软件中断),用于给其它的core发送中断信号; • LPI:(Locality-specific Peripheral Interrupt,特定局部外设中断),是一种基于消息的边沿中断。 ARM又为每种中断分配了中断号,用以区分,其中1020-1023是特殊的中断号。