ARM Linux 嵌入式中断全流程解析:从 GPIO 到 GIC 架构实战
本文基于 Cortex-A 系列处理器imx6ull/Cortex-A7/A53整理覆盖中断处理全流程、GIC 架构演进、CP15 协处理器操作、底层汇编指令适合嵌入式 Linux / 裸机开发入门与复习。一、中断处理的 6 个标准步骤ARM 体系中一个完整的中断流程如下中断源发出中断请求如 GPIO 按键、定时器、UART 等外设触发CPU 检查是否响应中断 是否被屏蔽检查 CPSR 中的 I/F 位比较中断优先级由 GIC通用中断控制器仲裁保护现场保存 CPSR、LR压栈寄存器执行中断服务函数ISR恢复现场出栈返回被中断的程序继续执行二、GIC 架构与版本演进GICGeneric Interrupt Controller是 ARM 官方定义的中断控制器标准。1️⃣ GIC 版本对比GIC 版本适用处理器典型场景GIC v1Cortex-A5早期 32 位嵌入式GIC v2Cortex-A732 位imx6ull、树莓派等GIC v3/v4Cortex-A5364 位手机 SoCGIC v5重架构支持数百核服务器 / 高性能计算imx6ull 实际支持 160 个中断号0–159三、GIC 中断类型详解GIC 将中断分为三类中断类型缩写中断号范围说明软件中断SGI0 – 15CPU 核间通信私有外设中断PPI16 – 31每个核独享共享外设中断SPI32 – 1019GPIO、UART、Timer 等✅我们常用的 GPIO 中断属于 SPI四、CP15 协处理器与 GIC 基地址ARM 中很多系统控制功能都通过CP15 协处理器完成。1️⃣ 常用指令mrc p15, 0, Rt, CRn, CRm, opc2 ; 读 CP15 寄存器 mcr p15, 0, Rt, CRn, CRm, opc2 ; 写 CP15 寄存器2️⃣ 读取 GIC 基地址CBARmrc p15, 4, r1, c15, c0, 0 ; 读取 CBAR得到 GIC 基地址到 r1五、中断关键寄存器GIC 接口中有两个非常关键的寄存器uint32_t ICC_IAR; /* Offset: 0x200C (R) 中断应答寄存器 */ uint32_t ICC_EOIR; /* Offset: 0x2010 (W) 中断结束寄存器 */ICC_IARCPU 读取后表示“我知道这个中断了”ICC_EOIRCPU 写入后表示“中断处理完毕”⚠️ 两者缺一不可否则中断会一直挂起。六、开关中断与控制指令1️⃣ cps 指令最常用cpsie i ; 使能 IRQ 中断 cpsid i ; 关闭 IRQ 中断标志含义IIRQ 中断FFIQ 快速中断2️⃣ SCTLR 控制示例mrc p15, 0, r0, c1, c0, 0 ; 读 SCTLR bic r0, r0, #(1 13) orr r0, r0, #(1 12) mcr p15, 0, r0, c1, c0, 0 ; 写回 SCTLR七、GPIO 中断实战示例Key0GPIO1_18以GPIO1_18 按键中断为例典型流程如下配置 GPIO 为中断模式设置触发方式下降沿 / 上升沿使能 GPIO 中断在 GIC 中使能对应 SPI 中断设置中断优先级ISR 中读取ICC_IAR清除中断标志写ICC_EOIR结束中断GPIO → GIC → CPU 内核​ 是标准的硬件中断链路。八、完整中断调用链总结外设中断(GPIO/UART/Timer) ↓ GIC(SPI/PPI/SGI) ↓ CPU(IRQ/FIQ) ↓ 保护现场 ↓ 执行 ISR ↓ 恢复现场 ↓ ICC_EOIR ↓ 返回原程序九、常见踩坑提醒 ⚠️❌ 只清 GPIO 中断标志不写ICC_EOIR→ 中断反复进入❌ 忘记cpsie i→ 中断永远进不来❌ 混淆 SPI / PPI / SGI 的中断号范围❌ 在多核平台未正确绑定中断亲和性GICv3十、总结一句话中断 硬件触发 GIC 仲裁 CPU 响应 现场保护 ISR 执行 中断结束

相关新闻

从“盖章“到“上链“:十部委电子单证新规,正在改写企业合同管理的游戏规则

从“盖章“到“上链“:十部委电子单证新规,正在改写企业合同管理的游戏规则

摘要:2026年十部委联合发布的《促进和规范电子单证应用规定》将电子合同带入“签得可信”的新阶段,明确要求电子单证具备可追溯、不可篡改和签发人识别三大核心能力。规定列出的九个评价因素为企业选型提供了清晰标准,并首次为跨境贸易数据出…

2026/10/14 16:15:52 阅读更多 →
终极指南:5分钟掌握GIMP-ML免费AI图像增强神器

终极指南:5分钟掌握GIMP-ML免费AI图像增强神器

终极指南:5分钟掌握GIMP-ML免费AI图像增强神器 【免费下载链接】GIMP-ML AI for GNU Image Manipulation Program 项目地址: https://gitcode.com/gh_mirrors/gi/GIMP-ML 还在为老照片修复发愁?想要一键提升图片质量却不懂复杂技术?GI…

2026/10/14 16:58:52 阅读更多 →
四叶草拼音输入法完整指南:打造纯净智能的中文输入体验 [特殊字符]️

四叶草拼音输入法完整指南:打造纯净智能的中文输入体验 [特殊字符]️

四叶草拼音输入法完整指南:打造纯净智能的中文输入体验 🍀️ 【免费下载链接】rime-cloverpinyin 🍀️四叶草拼音输入方案,做最好用的基于rime开源的简体拼音输入方案! 项目地址: https://gitcode.com/gh_mirrors/ri…

2026/10/14 1:09:45 阅读更多 →

最新新闻

ZeroTermux 内置命令手册精讲:zcat 命令——不真正解压也能查看 gzip 压缩包内容

ZeroTermux 内置命令手册精讲:zcat 命令——不真正解压也能查看 gzip 压缩包内容

移动开发开发工具 【免费下载链接】ZeroTermux 项目地址: https://gitcode.com/GitHub_Trending/ze/ZeroTermux 点击查看 免费下载 本篇围绕 ZeroTermux 内置 Linux 命令手册(app/src/main/assets/cmd/zcat.md)展开,系统讲解 zca…

2026/10/15 18:12:24 阅读更多 →
基于CAN总线的温度采集与控制系统设计:抗干扰与主动报警实践

基于CAN总线的温度采集与控制系统设计:抗干扰与主动报警实践

简介:基于CAN总线的温度采集与控制系统完整工程包,面向嵌入式、STM32及CAN总线通信学习者,解决环境温度实时采集与上位机监控的实践需求。该工程以STM32为控制核心,结合DS18B20温度传感器与CAN收发节点,并配套上位机串…

2026/10/15 18:12:24 阅读更多 →
DeepSpec 实战指南:投机解码草稿模型的数据准备、训练与评估全流程

DeepSpec 实战指南:投机解码草稿模型的数据准备、训练与评估全流程

人工智能大模型预训练模型优化模型评测 【免费下载链接】DeepSpec DeepSpec: a full-stack codebase for training and evaluating speculative decoding algorithms 项目地址: https://gitcode.com/gh_mirrors/de/DeepSpec 点击查看 免费下载 DeepSpec 是一个面向…

2026/10/15 18:12:24 阅读更多 →
PCRE 8.45 正则库实战:编译、API 调用与性能优化指南

PCRE 8.45 正则库实战:编译、API 调用与性能优化指南

简介:pcre-8.45.tar.gz 是 PCRE(Perl Compatible Regular Expressions)库 8.45 版的官方源代码压缩包,面向需要在 CentOS 等 Linux 服务器环境中自行编译部署正则表达式引擎的开发者与运维人员。PCRE 以 C 语言编写,支…

2026/10/15 18:12:24 阅读更多 →
南大通用GBase 8a数据库压缩算法新老版本对照

南大通用GBase 8a数据库压缩算法新老版本对照

南大通用GBase 8a数据库(gbase database)旧算法配置参数中,可以控制使用算法的种类,而具体到某一算法,但只能采用默认的压缩级别,缺乏灵活性,也限制了算法在不同场景下发挥出最大效能。同时现在…

2026/10/15 18:12:24 阅读更多 →
IPMItool源码解析:从接口抽象到BMC诊断命令扩展

IPMItool源码解析:从接口抽象到BMC诊断命令扩展

简介:IPMItool 源码包是一份面向服务器运维工程师、系统管理员及BMC嵌入式开发者的开源工具源码,用于通过IPMI协议对BMC进行远程监控、传感器数据读取与电源管理。资源共171个文件,压缩包仅752KB,以50个头文件和49个C源文件为核心…

2026/10/15 18:11:23 阅读更多 →

日新闻

Docker Compose 容器化部署 ChirpStack LoRaWAN 网络服务器实战

Docker Compose 容器化部署 ChirpStack LoRaWAN 网络服务器实战

1. 为什么选择容器化方式部署 LoRa 网络服务LoRa 物联网项目落地时,网络服务器是整个链路的核心枢纽。它负责接收网关上报的数据包、完成去重与解密、再把有效载荷分发给上层应用。早期大家习惯把网络服务器直接装在物理机上,依赖一堆系统库和特定版本的…

2026/10/15 0:00:46 阅读更多 →
共享LLM服务下的跨模型自动扩缩容:Kubernetes实战与避坑指南

共享LLM服务下的跨模型自动扩缩容:Kubernetes实战与避坑指南

1. 共享推理服务里,扩缩容到底难在哪做过大模型推理服务部署的人,大概都经历过这样的场景:一个团队共用一套推理集群,A 业务跑的是 7B 的小模型,B 业务跑的是 72B 的大模型,C 业务白天流量高、晚上几乎归零…

2026/10/15 0:00:46 阅读更多 →
Systemd 启动阶段根文件系统只读之谜:fstab 与 remount-fs 服务深度解析

Systemd 启动阶段根文件系统只读之谜:fstab 与 remount-fs 服务深度解析

1. 引子:一次内核恐慌引发的追查先从一个真实场景说起。某次我给一台老旧的嵌入式设备折腾系统裁减,为了把启动时间压进两秒以内,我手贱地把一串自认为“没用”的 systemd 服务给 disable 了,其中就包括systemd-remount-fs.servic…

2026/10/15 0:00:46 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/15 16:18:54 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/14 16:30:29 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/15 13:48:15 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/15 0:14:36 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 22:45:47 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/15 9:49:14 阅读更多 →