searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

GIC400硬件及使用

2024-03-13 02:52:34
36
0

中断类型:

SGI 软件触发中断:通常用于多核之间通讯,最多支持16个SGI中断。SGI通常在Linux内核中被用作IPI(inter-process interrupts),并会送达到指定的CPU上;

PPI私有外设中断:每个处理核心私有的中断。最多支持16个PPI中断,PPI中断通常会送至指定的CPU上,如CPU本地时钟;

SPI外设中断:公用的外设中断。最多支持480个中断。

 

GIC-400逻辑拆分,大致可以分成4部分:Distributor、CPU interface、virtual interface control、virtual CPU interface

Distributor:实现中断分发,对于PPI、SGI是各个core独有的中断,不参与目的core的仲裁;
SPI是所有core共享的,根据配置决定中断发往的core。最后选择最高优先级中断发送给cpu interface。
寄存器使用 GICD_ 作为前缀。

CPU interface:将GICD发送的中断信息,通过IRQ/FIQ管脚,传输给core。
寄存器使用 GICC_ 作为前缀。

 

Distributor的主要的作用是检测各个interrupt source的状态,控制各个interrupt source的行为,分发各个interrupt source产生的中断事件分发到指定的一个或者多个CPU interface上。虽然Distributor可以管理多个interrupt source,但是它总是把优先级最高的那个interrupt请求送往CPU interface。

Distributor对中断的控制包括:

Ø 中断使能开关,包含2级开关:全局开关、每个中断对应的开关

lGIC_DIST_CTRL全局中断的控制

一旦disable了全局的中断,任何interrupt source产生的interrupt event都不会被传递到CPU interface

lGIC_DIST_ENABLE_CLEAR(针对各个interrupt source进行控制)

disable某一个interrupt source会导致该interrupt event不会分发到CPU interface,但不影响其他interrupt source产生interrupt event的分发。

Ø设置中断的优先级

Ø设置中断的分组

Ø设置中断分发给哪个CPU

Ø设置中断的触发属性:边沿触发、电平触发(level-sensitive、edge-triggered)

Ø产生软中断

 

 

CPU interface block:决定是否将中断发送给CPU,主要功能如下:

Ø控制中断与CPU处理器之间的连线开关,如果关闭了,即使Distributor中使能了中断,中断也不会送达CPU,如果开启,则会将当前优先级最高的中断发送给CPU

Ø设置priority mask(优先级门限),低于priority mask的中断不被送给CPU

Ø设置优先级策略

Ø中断ACK响应,中断响应后,Distributor会将中断状态设置成Active(或者Active and pending)

中断处理完毕的通知,当中断处理完后,CPU通知CPU interface,表示当前中断处理完成

 

GIC v2支持ID0-ID1019,总共1020个中断。GIC-400最大支持ID0-ID512。

ID0-ID15用于SGI(Software-generated interrupt),可通过写寄存器产生软件中断

ID16-ID31用于PPI(Private Peripheral Interrupt),与SPI相对应,私有的意思是指每个CPU都会对应独立ID16-ID31

ID32-ID512 用于SPI(share Peripheral interrupt),这些中断用于CPU的外设,比如GPIO、USB等,共享的意思是各个CPU共享这些中断,即这些中断被所有CPU共享,可以分配给到指定的CPU来处理

 

GIC设计中,中断分成2个组(group0、group1):

Øgroup0里的中断是安全中断,中断可以配置成IRQ或FIQ;

Øgroup1里的中断是非安全中断,中断是IRQ中断。

SGI、PPI、SPI三种类型中断的触发路径:

ØSGI(ID0-ID15):是由CPU内部软件触发:

CPU core-->CPU interface-->Distributor-->CPU Interface-->CPU core。

ØPPI(ID16-ID31):是由外部器件触发:

Peripheral-->Distributor-->CPU interface-->CPU core。

ØSPI(ID32-ID512):也是外部器件触发:

Peripheral-->Distributor-->CPU interface-->CPU core。

 

 

GIC复位后,所有中断默认配置为group0;

当没有实现ARM安全扩展的处理器连接GIC时,系统可以使用GICD_IGROUPn寄存器提供的中断分组来控制IRQ和FIQ;

 

 

0条评论
0 / 1000
x****n
3文章数
0粉丝数
x****n
3 文章 | 0 粉丝