一、中断系统概述:中断的基本概念、中断的作用与意义、中断在SoC中的地位

1.1 什么是中断?——从一次“打断”说起

先问大家一个问题:你正在写代码,突然手机响了。你是接电话,还是继续写?

正常人都会接电话,处理完再回来继续写。中断,说白了就是这个道理。

在SoC里,CPU通常忙着跑主程序。这时候外设——比如UART收到了一字节数据,或者定时器溢出了——它需要CPU立刻处理。怎么办?

它不能干等着。它会发一个信号,告诉CPU:“嘿,先停一下手头的活,帮我处理个急事!”

这个信号,就是中断请求(IRQ)

CPU收到后,会保存当前的工作状态(也就是现场),跳到一个专门的地方去处理这个外设的请求。处理完了,再回来接着干刚才没干完的事。

整个过程,就像你接完电话继续写代码一样自然。

核心定义:中断是一种硬件机制,允许外设或内部事件异步地打断CPU当前执行流,强制CPU转去执行一个预先定义好的服务程序(ISR),处理完成后返回断点继续执行。

嗯,这里要注意:“异步”是关键词。CPU不知道外设什么时候会发请求,但必须随时准备好响应。这就是中断和轮询最大的区别。

1.2 中断的作用与意义——为什么不用轮询?

我刚入行那会儿,有个老工程师跟我说过一句话,我记到现在:

“没有中断的SoC,就像没有门铃的家——你得一直守在门口等客人。”

你想想看,如果没有中断,CPU想知道UART有没有收到数据,只能不停地去查状态寄存器。这叫轮询(Polling)

轮询有什么问题?

  • 浪费CPU资源:大部分时间查到的都是“没数据”,白白消耗功耗和带宽。
  • 响应延迟不可控:你查得越频繁,响应越快,但CPU越忙。你查得少,数据可能就丢了。
  • 实时性差:对于紧急事件(比如电源掉电警告),轮询根本来不及反应。

中断的意义,就在于它把CPU从“被动等待”变成了“主动响应”。

我个人习惯把中断比作“硬件级别的回调函数”。外设触发条件满足时,硬件自动调用你写好的处理函数。CPU平时该干嘛干嘛,效率极高。

具体来说,中断有三大核心作用:

  1. 提高CPU利用率:CPU不用空转等待外设,可以专心跑主任务。
  2. 保证实时响应:紧急事件能在微秒甚至纳秒级别得到处理。
  3. 支持多任务并发:多个外设可以“排队”请求CPU服务,系统看起来就像在同时处理多件事。

我的经验:我在做一款AIoT芯片时,遇到过功耗超标的问题。后来发现是某个外设驱动用了轮询,CPU占用率高达40%。改成中断后,占用率直接降到3%。你看,中断不仅是功能问题,还是功耗问题。

1.3 中断在SoC中的地位——它是系统的“神经中枢”

如果你拆开一块SoC的架构图,你会发现:CPU核、总线、外设、内存……这些模块之间怎么通信?

靠中断。

中断在SoC中的地位,我可以用一句话概括:

中断是SoC内部异步事件的“交通警察”。

为什么这么说?

一个典型的SoC里,可能有几十个甚至上百个中断源。GPU渲染完一帧要通知CPU,DMA传输完成要通知CPU,定时器到期要通知CPU,外部按键按下也要通知CPU……

如果没有一个统一的中断管理机制,CPU会被这些信号淹没,根本不知道先处理谁。

所以,现代SoC里都有一个专门的模块——中断控制器(Interrupt Controller)。它的职责就是:

  • 接收所有外设的中断请求
  • 根据优先级决定先处理哪个
  • 告诉CPU该去执行哪个ISR

我参与过一款车规级SoC的设计,里面用了GIC-500(ARM的通用中断控制器)。那个系统里,中断被分成了三类:

中断类型 典型来源 特点
SPI(共享外设中断) UART、I2C、SPI等外设 多个CPU核都可以处理,但同一时间只有一个核响应
PPI(私有外设中断) 每个CPU核的本地定时器 只发给特定的CPU核
SGI(软件生成中断) CPU核之间通信 一个核可以给另一个核发中断,用于核间通信

你看,中断已经不仅仅是“外设通知CPU”这么简单了。在多核SoC里,中断还是核间通信的重要手段。

避坑指南:我曾经在一个项目里,把两个外设的中断号配成了同一个。结果一上电,系统就死机。查了两天才发现是中断号冲突。所以,设计中断系统时,第一件事就是做好中断号分配表,一个都不能重复。

1.4 中断系统的设计挑战

讲到这里,你可能觉得中断挺简单的——不就是发个信号、处理一下嘛。

其实不然。在真实的SoC设计中,中断系统是最容易出bug的地方之一。为什么?

  • 时序问题:中断是异步的,可能发生在任何时刻。如果处理不好,会出现竞态条件。
  • 优先级反转:低优先级中断占着资源不放,高优先级中断反而被阻塞。
  • 中断嵌套:处理一个中断时又来了另一个,现场保护稍有不慎就崩了。
  • 延迟抖动:对于实时系统,中断响应时间必须可预测,不能忽快忽慢。

我见过一个案例:某款消费电子芯片,在播放视频时偶尔出现画面撕裂。最后定位到是显示控制器和音频编解码器的中断优先级没配好,导致显示刷新被音频中断频繁打断。

解决方案很简单——把显示中断的优先级提到最高。但找到这个原因,花了整整两周。

所以,中断系统的设计,从一开始就要认真对待。后面几章,我会带大家深入每一个细节。

本章小结:

  • 中断是硬件异步通知CPU处理事件的机制
  • 相比轮询,中断能大幅提升CPU利用率和实时性
  • 中断控制器是SoC中断系统的核心,负责仲裁和分发
  • 中断设计涉及优先级、嵌套、延迟等复杂问题,需要系统级思考

下一章,我们聊聊中断的硬件实现——从中断请求到CPU响应的完整路径。到时候我会拿一个实际项目的波形图给大家看,保证比纯理论有意思得多。