gic的寄存器 gicv3的LPI中断

描述

  (1)gicv2的寄存器

  gicv2寄存器,都是使用memory-mapped的方式去访问的

  • ◾GICD_: distributor的寄存器

  • ◾GICH_: 虚拟interface的控制寄存器

  • ◾GICV_:虚拟interface的控制寄存器

  • ◾GICC_: 虚拟cpu interface的寄存器

  1-Distributor register

  在这里插入图片描述

  0x100-0x17C — 》 GICD_ISENABLERn

  这个地址范围内一共可以表示32个32bit的寄存器(n=0x7c/4+1)

  所以n的值为0-31,共可以表示32*32=1024个中断

  提供了2种访问方式:

  • 一种是memory-mapped的访问

  • 一种是系统寄存器访问

  gicv3的LPI中断

  • ◾在gicv3中,引入了一种新的中断类型。message based interrupts,消息中断 外设,不在通过专用中断线,向gic发送中断,而是写gic的寄存器,来发送中断。这样的一个好处是,可以减少中断线的个数,为了支持消息中断,gicv3,增加了LPI,来支持消息中断。并且为他分配了特别多的中断号,从8192开始,移植到16777216

  • LPI的中断的配置,以及中断的状态,是保存在memory的表中,而不是保存在gic的寄存器中的。

  • ◾GICR_PROPBASER:(64bit)保存LPI中断配置表的基地址

  • ◾GICR_PENDBASER: (64bit)保存LPI中断状态表的基地址

  • 当外部发送LPI中断给redistributor,redistributor首先要查该表,也就是要访问memory来获取LPI中断的配置。为了加速这过程,redistributor中可以配置cache,用来缓存LPI中断的配置信息。

  • 因为有了cache,所以LPI中断的配置信息,就有了2份拷贝,一份在memory中,一份在redistributor的cache中。如果软件修改了memory中的LPI中断的配置信息,需要将redistributor中的cache信息给无效掉。

  • LPI实现的两种方法:

  • ◾使用ITS,将外设发送到eventID,转换成LPI 中断号

  • ◾forwarding方式,直接访问redistributor的寄存器GICR_SERLPIR,直接发送LPI中断

  gicv2的bypass功能

  GICv2支持中断旁路模式,也就是gic外部的FIQ,IRQ直接接到core的FIQ,IRQ上,相当于gic是不使能的。也就是CFGSDISABLE是有效的,将GIC给无效掉。

  gicv2支持bypass功能,这样gic就不起作用了,core的中断管脚,直接由soc的其他部门信号驱动。

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分