当前位置: 首页 > news >正文

[GICv3] 3. 物理中断处理(Physical Interrupt Handling)

中断生命周期

image

  1. 外设通过中断信号线生成中断,或者软件生成中断(SGI)。
  2. Distributor 和 ReDistributor 配合按照中断分组和中断优先级仲裁后将最高优先级的中断分发到 CPU interface。
  3. cpu interface 向中断发送到 PE
  4. PE 读取 IAR 寄存器,中断变为 active 状态,并将中断优先级提升至最高,被称为运行优先级。
  5. 中断处理完之后,PE 写 EOI 寄存器,中断优先级降低为 active 前的优先级。
  6. deactivate 中断,使中断在下一次 pending 时,能够再次被 PE take。

中断状态转换状态机

image

电平触发

image

  电平触发的状态机变化:A1->D->B2->E1

关键步骤

  pending to Active & pending

  当 PE 通过读取 CPU 接口中的 IAR(中断应答寄存器)之一来ack中断时,中断从pending转换为Active & pending。 此读取通常是在发生中断异常后执行的中断处理例程的一部分。 然而,软件也可以轮询 IAR。
此时,GIC deassert给PE的中断信号。

  Active & pending to active

  当外设取消置位中断信号时,中断从Active & pending转换为active状态。 通常发生在PE写外设的清除中断寄存器。

边沿触发

image

  状态机变化:A1->C->A2->E2

关键步骤

  Active to Active & Pending

  如果外设重新发出中断信号,则中断将从Active变为Active & Pending

  Active & Pending to Pending

  当 PE 写CPU interface中的 EOIR 时,中断从Active & Pending状态变为Pending状态。 这表明 PE 已完成对第一个中断实例的处理。此时GIC重新向PE发出中断信号。

中断类型

PPI

  PPI 是针对单个特定 PE 的中断,不同的 PE 可以使用相同的 INTID 来指示不同的事件。 PPI 可以是组 0 中断、安全组 1 中断或非安全组 1 中断。 它们可以支持边缘触发或电平触发。

SGI

  SGI 通常用于核间通信,并通过写入 GIC 中的 SGI 寄存器来生成。 SGI 可以是组 0 或组 1 中断,并且它们仅支持边沿触发。

SPI

  SPI 是外设中断,也就是什么DMA,UART,SPI中断之类的。分发器可以将其路由到可以处理中断的指定 PE,或者路由到系统中已配置为接受此类中断的一组 PE 之一的 PE。 SPI 可以是组 0 或组 1 中断,并且它们可以支持边沿触发或电平触发

中断分组

  GIC 支持三个中断组,每一个中断都需要指定属于某一个中断分组。

  1. GROUP 0
  2. Secure GROUP 1
  3. Non-Secure Group 1

image

  • Group 0中断在任何时候都触发FIQ
  • Secure group 1中断发生在PE处于secure状态时触发IRQ
  • Non-Secure group 1中断发生在PE处于non-secure状态时触发IRQ
  • Secure group 1中断发生在PE处于non-secure状态时触发FIQ
  • Non-Secure group 1中断发生在PE处于ecure状态时触发FIQ
  • Secure group 1中断发生在PE处于EL3时触发FIQ。

  总结下来就是

  当Group 1物理中断是最高优先级的待处理中断并且具有足够的优先级时,就会发出信号。如果下列条件之一为真,则作为FIQ,否则作为IRQ发出信号:

  • 是另一个安全状态的中断, 即非PE此时的安全状态的中断。
  • PE在EL3执行。

image

中断路由举例

  在一个大系统中,非安全侧运行着诸如Linux的操作系统,安全侧运行如optee的Trust OS为整个系统提供安全服务。CPU分时复用在安全操作系统和非安全操作系统之间切换。

  通过将中断分组和配置ARMv8相关寄存器,可以将本该属于安全侧的中断路由到Trust OS中进行处理,本该属于LInux中处理的非安全中断路由到LInux中处理,如图:

image

这里的SCR_EL3.FIQ和SCR_EL3.IRQ含义为:
image

image

  ‍

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 【 香橙派 AIpro评测】烧系统到运行并使用Jupyter Lab 界面体验 AI 应用样例(新手福音)
  • Excel中用VBA实现Outlook发送当前工作簿
  • Qt项目:基于Qt实现的网络聊天室---TCP服务器和token验证
  • 从数据仓库到数据湖(上):数据湖导论
  • 如何通过文件分发系统,实现能源电力企业文件的安全分发流转?
  • 展开说说:Android之View基础知识解析
  • 【Qt 基础】绘图
  • 如何判断服务器是否被攻击
  • 微信小程序如何实现登陆和注册功能?
  • ShardingSphere-JDBC —— 整合 mybatis-plus,调用批量方法执行更新操作扫所有分表问题
  • 【cocos creator】2.4.x实现简单3d功能,点击选中,旋转,材质修改,透明材质
  • c++课后作业
  • Oracle左连接过滤条件注意事项
  • 【Linux杂货铺】3.程序地址空间
  • UART编程
  • 【腾讯Bugly干货分享】从0到1打造直播 App
  • 08.Android之View事件问题
  • 2017-08-04 前端日报
  • E-HPC支持多队列管理和自动伸缩
  • MaxCompute访问TableStore(OTS) 数据
  • Vue.js-Day01
  • 从输入URL到页面加载发生了什么
  • 翻译 | 老司机带你秒懂内存管理 - 第一部(共三部)
  • 数组大概知多少
  • 一个完整Java Web项目背后的密码
  • 异常机制详解
  • 深度学习之轻量级神经网络在TWS蓝牙音频处理器上的部署
  • 阿里云重庆大学大数据训练营落地分享
  • # 移动硬盘误操作制作为启动盘数据恢复问题
  • #pragma 指令
  • $.ajax()方法详解
  • $refs 、$nextTic、动态组件、name的使用
  • ( 10 )MySQL中的外键
  • (03)光刻——半导体电路的绘制
  • (10)ATF MMU转换表
  • (16)UiBot:智能化软件机器人(以头歌抓取课程数据为例)
  • (3)nginx 配置(nginx.conf)
  • (Redis使用系列) Springboot 使用redis实现接口Api限流 十
  • (草履虫都可以看懂的)PyQt子窗口向主窗口传递参数,主窗口接收子窗口信号、参数。
  • (二)PySpark3:SparkSQL编程
  • (七)c52学习之旅-中断
  • (十五)使用Nexus创建Maven私服
  • (十一)图像的罗伯特梯度锐化
  • (算法)硬币问题
  • (图)IntelliTrace Tools 跟踪云端程序
  • (轉貼) 資訊相關科系畢業的學生,未來會是什麼樣子?(Misc)
  • .NET简谈设计模式之(单件模式)
  • .NET性能优化(文摘)
  • ::前边啥也没有
  • @Autowired注解的实现原理
  • @软考考生,这份软考高分攻略你须知道
  • [ vulhub漏洞复现篇 ] GhostScript 沙箱绕过(任意命令执行)漏洞CVE-2019-6116
  • []我的函数库
  • [ACM独立出版] 2024年虚拟现实、图像和信号处理国际学术会议(VRISP 2024,8月2日-4)
  • [C++]运行时,如何确保一个对象是只读的