GIC使用注意事项

一:GIC的原理:



GIC最大支持8个cpu interface,对于0-31号中断每个CPU interface都是私有的。SPI中断(32-1019)会经过distributor转发给各cpu interface,ditributor和cpu interface都是基于内存地址映射的方式访问。distributor的地址是各CPU共享的,cpu interface的地址是每个CPU core自己私有地址。

1-N模型在多处理器架构中,表示对于某个中断如果有1个cpu interface处理了这中断后,它会清除其他的target cpu interface的该中断的挂起位,该模型保证第一个获取中断的cpu来处理这个中断,但是对于多个CPU同时检查到各自的中断时,需要一定互斥机制,请参考《IHI0048A_gic_architecture_spec_v1_0.pdf》3.3.2节。

二:GIC初始化注意事项:

1)关闭gic distributor的中断使能,操作distributor控制寄存器的使能位。(一个寄存器)

2)清除distributor的所有中断使能源,同时把distributor的所有可能挂起中断源清除。(一组寄存器)

3)配置distributor的target寄存器,把某些中断分发给指定的cpu,32位寄存器对应4个中断源。(比较重要)




     每个中断源有8bit,每个bit代表一个cpu interface,最大为cpu 7(从cpu 0开始),设定值为0x3333,表示4个中断分别发送到cpu0和cpu1。


4)配置中断优先级寄存器,32位的一组寄存器,基地址为distributor的偏移0x400地址处,32位可以配置4个中断,每个中断8bit表示优先级,最小是16个优先级,最大为256个优先级。



    特别注意这个优先级必须cpu interface的优先级掩码值要小,因为优先级的值越小优先级就越高,系统所有的寄存器都为0,都是最高优先级的,可根据需要重新配置各中断的优先级值。

5)配置distributor的priority mask寄存器,这个寄存器决定GIC有多少个中断优先级。




总共有256级,128级,64级,32级,16级这5中优先级可以配置,比如16级中断优先级时,低4位为0,高4位从0x0~0xf共16个值,正好16个级别。


记住只有distributor的某个中断的优先级配置值(上面第4条中的中断优先级寄存器)低于priority mask的值时,distributor才会分发这个中断到对应的的cpu interface去。

6)最后记得使能GIC的distributor的控制寄存器使能位以及cpu interface的使能位。

7)值得一提的是GIC的配置寄存器手册收看是可以读写的,实际上很奇怪的有的IC厂家实现时是只读的。配置寄存器主要是用来配置各中断源的触发方式,比如是电平触发还是边沿触发,这个最好根据系统实际调试,这个寄存器原则上也很重要。



Bit[2F]保留,BIT[2F+1] = 1 是边沿触发方式;BIT[2F+1]=0是电平触发方式。

三:中断响应

1)注册各中断的处理函数,注册时需要使能这个中断。

2)各外设模块中断配置正确并使能后,比如timer外设,计时到达时产生中断,系统硬件自动切换到irq模式,并保存lr和cpsr寄存器到中断模式下的寄存器,然后跳转中断向量表的入口地址(偏移0x18),保存现场,切换模式SVC模式,读取GIC的cpu interface的中断确认寄存器获取当前中断号,根据中断号调用注册的中断处理函数,处理函数结束后,必须向cpu interface的中断结束寄存器(EOI)写入对应的中断号表示这个中断处理结束。

四:软件中断(SGI)




典型应用配置值如:

cpu0 写distributor的reg_sgi = (0x2<<16) | interrupt_id;

表示cpu0向cpu1发送软件中断,中断号0-15。

五:总结distributor和cpu interface职能

引用英文:





很明显列举出了两者的功能。


  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
gic stream协议是一种基于AXI-stream协议的通信协议,用于在gic的IRI组件(interrupt routing infrastructure)和cpu interface之间传输信息。IRI组件包括distributor、redistributor和ITS。在gicv3中,IRI组件与cpu interface之间使用AXI-stream协议传输信息,通过包的组合实现gic的中断操作与中断管理。此外,gicv3还引入了一种新的中断类型,称为消息中断。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [ARM_GIC3/4](https://blog.csdn.net/wangwangmoon_light/article/details/122006746)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [undefined](undefined)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [【转】ARM GIC中断系列(四):gicv3架构-gic stream协议](https://blog.csdn.net/weixin_45264425/article/details/128364816)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值