TL;DR本文围绕 ZYNQ 系列芯片的中断机制展开先梳理中断类型SGI、PPI、SPI 等再说明从中断触发到 CPU 响应的完整处理过程最后给出中断处理函数的编写要点与常见注意事项帮助读者快速建立 ZYNQ 中断开发的整体认知。一、ZYNQ 系列芯片中的中断类型中断来源分类介绍 GIC 中断控制器架构下 SGI软件生成中断、PPI私有外设中断、SPI共享外设中断三类中断的定义与典型使用场景。中断号与优先级说明各类中断的编号范围、优先级配置方式以及中断触发类型电平触发、边沿触发的选择原则。中断分配与路由讲解中断如何分配到 CPU0/CPU1以及 PL 端中断通过 SPI 接入 PS 的配置方法。二、中断处理过程中断触发与响应流程从外设产生中断信号、GIC 仲裁、CPU 响应异常向量到跳转中断服务程序的完整链路。中断使能与屏蔽说明 GIC 分发器与 CPU 接口的使能层级以及中断挂起、激活、结束EOI状态机的流转。中断嵌套与优先级抢占分析高优先级中断抢占低优先级中断的条件与配置方式。中断触发与响应流程详解下图展示了 ZYNQ 中一次外设中断从产生到结束的完整链路涵盖 GIC 分发器仲裁、CPU 接口转发、异常向量跳转、中断服务程序执行以及 EOI 结束等关键阶段。flowchart TD A[外设产生中断信号] -- B[GIC 分发器 Distributor 接收并仲裁] B -- C{优先级是否高于当前运行中断} C -- 否 -- D[保持 Pending 挂起状态] D -- B C -- 是 -- E[转发至目标 CPU 接口 CPU Interface] E -- F[CPU 接口置位 IRQ 信号] F -- G[CPU 响应 IRQ 异常] G -- H[跳转异常向量表 IRQ 入口] H -- I[保存现场并调用中断服务程序 ISR] I -- J[读取 IAR 获取中断号并处理外设] J -- K[清除外设中断标志] K -- L[写 EOI 寄存器结束中断] L -- M[恢复现场返回被中断代码]各阶段说明如下外设产生中断信号外设如 GPIO、定时器、PL 端 IP在满足触发条件时拉高中断线电平触发或边沿触发方式由外设配置决定信号随后进入 GIC 的 SPI 或 PPI 通道。GIC 分发器仲裁分发器为每个中断维护 Pending、Active、Priority 等状态收到中断后将其置为 Pending并与当前正在处理的中断优先级比较决定是否向 CPU 接口转发。CPU 接口转发分发器选中优先级最高的 Pending 中断后通过 CPU 接口将其标记为 Active并置位 IRQ 信号线通知目标 CPU 核。CPU 响应异常向量CPU 在当前指令边界检测到 IRQ保存关键寄存器现场跳转到异常向量表中的 IRQ 入口地址。跳转中断服务程序异常入口根据中断号查表调用对应的中断服务程序ISRISR 中通常先读取 IAR 寄存器确认中断号再执行具体外设处理逻辑。清除标志与 EOI 结束处理完成后需先清除外设侧的中断标志再向 GIC 写 EOI 寄存器使该中断从 Active 状态退出从而允许后续同级或低优先级中断再次被响应。三、中断处理函数中断服务函数结构给出基于 Xilinx 标准库的中断注册与处理函数框架包括中断连接、使能和异常处理入口。处理函数编写要点强调处理函数应尽量简短、避免阻塞操作明确中断清除与 EOI 的调用时机。常见问题排查列举中断不触发、重复触发、中断丢失等典型问题的排查思路。四、总结回顾 ZYNQ 中断类型、处理流程与处理函数三部分的核心要点总结中断开发中的关键配置项与调试建议。参考资料[占位] Xilinx UG585《Zynq-7000 SoC Technical Reference Manual》中断章节[占位] ARM GIC 架构规范文档[占位] Xilinx 官方 Standalone BSP 中断驱动 API 说明[占位] 相关博客与实战案例链接
阅读完成 · 觉得有帮助?