news 2026/7/22 4:39:00

ARM ---day5 中断

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
ARM ---day5 中断

1. 什么是GIC?

GIC:通用中断控制器(Generic Interrupt Controller),是 ARM Cortex-A/R 系列常用的中断管理 IP,作用类似 Cortex-M 中的 NVIC。

它统一管理外设中断和处理器内部中断,负责中断使能、屏蔽、优先级仲裁、目标 CPU 选择和中断分发,最终向 CPU 内核产生 IRQ/FIQ 请求。

GIC 管理的中断主要包括外设来的共享中断 SPI,以及 CPU 核内部/私有的 SGI、PPI;外设中断来自 UART、GPIO、Timer 等模块,内部中断来自 CPU 私有定时器、软件中断、性能监控等。

路由分发(中断分发):

指 GIC 根据配置决定某个中断应该送到哪个 CPU 核处理。

在多核 ARM 中,GIC 可以把不同中断分配给不同 CPU 核。

2. 什么是协处理器?ARM Cortex A7内核配备了几个协处理器?

协处理器是辅助 ARM CPU 完成特定功能的硬件模块,用于扩展 CPU 功能。

ARM 处理器通过 MRC、MCR 等协处理器指令访问协处理器。

Cortex-A7 属于 ARMv7-A 架构,支持 CP0~CP15 共 16 个协处理器编号。

其中最常用的是 CP15 系统控制协处理器,用于管理 MMU、Cache、TLB、异常向量表等。

在 Cortex-A7 中,程序可以通过 CP15 设置 VBAR 寄存器,将异常向量表的基地址写入 VBAR,使处理器发生异常时从该地址开始查找对应的异常入口。

mrc:读取cp15寄存器的数据

mcr:向cp15寄存器中写入数据

3. 为什么要将异常向量表重映射?如何重映射异常向量表?

为什么要重映射异常向量表:

ARM 处理器发生异常时,会到固定地址取异常入口指令。

默认异常向量表通常位于 0x00000000,但该地址上电时可能映射到 ROM、Flash 或 BootROM,不方便修改,速度也可能较慢。

系统运行后通常希望把异常向量表放到 RAM 中,便于修改异常处理函数、提高响应速度,并让操作系统接管异常和中断,因此需要异常向量表重映射。

如何重映射:

对于 Cortex-A7 这类 ARMv7-A 内核,可以通过 CP15 的 VBAR 寄存器设置异常向量表基地址。

例如:

_set_vbar:

ldr r0, =0x87800000

mcr p15, 0, r0, c12, c0, 0

bx lr

对于 ARM9/S3C2440 这类处理器,通常通过存储器重映射、MMU 映射,或者设置高地址异常向量位,使异常向量表位于 0x00000000 或 0xFFFF0000。

4. GIC支持多少个中断,分为哪几类

GIC:1020个中断(imx6ull:0-159 支持160个中断)

SPI:共享外设中断,外设所产生的的中断(32-1019)

PPI:私有外设中断,核间通信,内核和内核之间的中断(16 - 31)

SGI:软中断,软件产生的中断(0 - 15)

5. IMX6ULL中支持多少个中断

imx6ull:0-159 支持160个中断

6. GIC控制器的版本

GIC v1 CortexA5
GIC v2 32位处理器(CortexA7)

GIC v3 - v4 64位处理器(CortexA53手机芯片)

GIC v5 重新架构,数百核处理器(算力要求高的芯片 服务器)

imx6ull 内核是CortexA7,用的是GIC v2 400

7. 简述 GIC CPU Interface 中 C_IAR 和 C_EOIR 寄存器的作用。

C_IAR:Interrupt Acknowledge Register,中断应答寄存器。

作用:CPU 进入 IRQ 中断后,读取 C_IAR,GIC 会返回当前要处理的中断号,例如 99。

C_EOIR:End Of Interrupt Register,中断结束寄存器。

作用:中断服务函数执行完后,把刚才的中断号 99 写回 C_EOIR,通知 GIC 这个中断已经处理完成。

GIC 中的 C_IAR 是中断应答寄存器。当外设中断产生后,GIC 根据使能状态和优先级选择一个中断送给 CPU。CPU 进入中断处理程序后,通过读取 C_IAR 获得当前正在响应的中断号,例如按键中断号 99。中断服务函数执行完后,需要将该中断号写入 C_EOIR 中断结束寄存器,通知 GIC 本次中断处理完成,使 GIC 可以清除该中断的活跃状态并继续响应其他中断。

C_IAR 是“读中断号,开始处理”;C_EOIR 是“写中断号,告诉 GIC 处理完了”。

8.按键中断流程

按键KEY0 ----GPIO1_18

外设:

  1. 配置引脚复用功能
  2. 配置引脚电气属性
  3. 配置输入方向
  4. 配置中断触发方式:下降沿
  5. 使能GPIO1_18引脚中断

GIC:

1.初始化GIC GIC_Init();

2.使能GPIO1_18引脚中断

GIC_EnableIRQ(GPIO1_Combined_16_31_IRQn);

3.设置优先级

内核:

  1. 使能irq中断
  2. 按键按下,切换工作模式->IRQ模式(自动)
  3. pc ->irq_handler(汇编 传参 中断号 R0)
  4. 执行irq中断服务函数,system_interrupt_handler/ system_irq_handler
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/22 4:37:34

分析语言的七个维度

为了让你这篇CSDN博客**既有深度又好读**,我帮你按照“**背景引入 → 核心模型 → 代码实战 → 前后端对比 → 总结收尾**”的逻辑进行了重构。你可以直接复制下面的内容到CSDN的Markdown编辑器,格式已经优化好,配上了醒目的标题和表格。---#…

作者头像 李华
网站建设 2026/7/22 4:36:44

深入解析cb_doge:区块链分布式系统架构与开发实战指南

最近在技术圈看到不少关于"cb_doge"的讨论,这个神秘的项目似乎引发了广泛关注。作为开发者,我们总是对各种可能改变技术格局的新工具充满好奇。本文将深入分析cb_doge的技术架构、应用场景以及它可能带来的行业变革,帮助大家理性看…

作者头像 李华
网站建设 2026/7/22 4:36:14

神经网络语言模型缩放定律解析与应用

1. 神经网络语言模型的缩放定律解析这篇论文探讨了神经网络语言模型在规模扩展时表现出的规律性现象。当我们在2018年首次观察到GPT-1的性能随着模型规模增大而提升时,很少有人能预料到这种关系会呈现出如此精确的数学规律。实际上,语言模型的性能&#…

作者头像 李华
网站建设 2026/7/22 4:34:02

ARM day5

1. 什么是 GIC?🔸 GIC 全称GIC(Generic Interrupt Controller,通用中断控制器),是 ARM 公司专门为 Cortex-A 系列 内核设计的一款集中式中断控制器。🔸 为什么需要 GIC?随着 SoC&…

作者头像 李华
网站建设 2026/7/22 4:33:23

C++17 std::clamp未定义问题:从编译器支持到跨版本兼容的完整解决方案

1. 项目概述:当std::clamp突然“消失”在C项目里,尤其是那些需要处理数值范围、做数据清洗或者UI组件值绑定的场景,std::clamp函数简直是救星。它用一行代码std::clamp(value, min, max)就能优雅地把一个值限制在指定的最小值和最大值之间&am…

作者头像 李华
网站建设 2026/7/22 4:33:14

C++脚本解释器框架实战:从词法分析到C++绑定

1. 项目概述:为什么我们需要一个C脚本解释器框架?在桌面应用、游戏引擎、工业仿真软件这些大型C项目的开发中,我们经常遇到一个经典矛盾:底层核心系统需要C的高性能与精细控制,而上层的业务逻辑、配置规则甚至用户自定…

作者头像 李华