中断控制器

简介

中断控制器负责统筹管理来自外设和内部模块的中断请求,将其路由到对应的 CPU,并协调优先级仲裁,确保实时系统能够可靠地响应事件。

芯片系列涵盖多种异构多核设计,各型号按需集成以下架构中的一种或多种处理器核心,各架构有自己的中断管理体系,CPU 使用与其架构匹配的中断控制器。

各 CPU 与其对应的中断控制器如下表所示。

RTL8721Dx:

处理器

中断控制器类型

KM4

嵌套向量中断控制器 (NVIC)

KM0

嵌套向量中断控制器 (NVIC)

中断序号列表

各 CPU 的中断源与中断序号分配如下。在编写中断服务程序时,需根据目标 CPU 查找对应的中断序号进行注册。

备注

单元格为空表示该 CPU 不存在此中断。

RTL8721Dx:

功能

KM0 序号

KM4 序号

WIFI_FISR_FESR_IRQ

0

0

WIFI_FTSR_MAILBOX

1

1

WL_DMA

2

2

WL_PROTOCOL

3

3

BT_SCB

4

4

SYS_ILLEGAL_WRITE

5

KM4_WAKE_IRQ

5

BT_WAKE_HOST

6

6

RXI300

7

7

IPC_KM0

8

IPC_KM4

8

IWDG

9

9

Timer0

10

10

Timer1

11

11

Timer2

12

12

Timer3

13

13

Timer4

14

14

Timer5

15

15

Timer6

16

16

Timer7

17

17

Timer8

18

18

Timer9

19

19

Timer10

20

20

Timer11

21

21

pmc_timer0

22

22

pmc_timer1

23

23

UART0

24

24

UART1

25

25

UART2_BT

26

26

UART_LOG

27

UART_LOG

27

UART_LOG

GPIOA

28

28

GPIOB

29

29

I2C0

30

30

I2C1

31

31

CTOUCH

32

32

GDMA0_Channel0

33

33

GDMA0_Channel1

34

34

GDMA0_Channel2

35

35

GDMA0_Channel3

36

36

GDMA0_Channel4

37

37

GDMA0_Channel5

38

38

GDMA0_Channel6

39

39

GDMA0_Channel7

40

40

PPE

41

41

SPI0

42

42

SPI1

43

43

SPORT0

44

44

SPORT1

45

45

RTC

46

46

ADC

47

47

ADC_COMP

48

48

BOR

49

49

PWR_DOWN

50

50

SPI_FLASH

51

51

Keyscan

52

52

RSIP

53

53

AES

54

54

SHA

55

55

PSRAMC

56

56

TRNG

57

57

AES_S

58

58

SHA_S

59

59

AON_TIM

60

60

AON_WAKEPIN

61

61

LEDC

62

62

IR

63

63

SDIO

64

64

KM0_WDG

65

KM4_NS_WDG

65

KM4_S_WDG

66

QSPI_INT

67

USB_INT

66

68

OCP_INT

69

嵌套向量中断控制器(NVIC)

嵌套向量中断控制器(Nested Vector Interrupt Controller,NVIC)是 ARM Cortex-M 系列处理器的中断控制器,与内核紧密集成,以实现低延迟中断处理。

NVIC 的功能特性:

  • 统一异常管理:处理器异常(如 HardFault、SysTick)与外设中断共享同一套 NVIC 管理机制,统一注册和响应。

  • 嵌套中断:支持基于优先级的中断嵌套处理,高优先级中断可抢占正在执行的低优先级中断服务程序。

  • 向量化中断:中断发生时,硬件直接跳转至向量表中对应的 ISR 入口,无需软件轮询判断中断源。

  • 硬件优先级屏蔽:通过 BASEPRI 寄存器(ARM Cortex-M 核内特殊寄存器,可通过 CMSIS 库访问)可屏蔽低于指定优先级的所有中断。

  • 向量表重定位:通过向量表偏移寄存器 VTOR (核内 SCB 寄存器)可将向量表重定位至自定义地址。

各个 ARM Cortex-M 系列 CPU 的 NVIC 特性如下:

RTL8721Dx:

KM4 的 NVIC 支持:

  • 80 个向量中断

  • 8 个可编程中断优先级。值可以是 0 ~ 7,值越小,优先级越高。

  • 安全 NVIC 和非安全 NVIC

KM0 的 NVIC 支持:

  • 80 个向量中断

  • 4 个可编程中断优先级。值可以是 0 ~ 3,值越小,优先级越高。

备注

有关中断和 NVIC 编程的更多信息,参考官方技术手册: Arm® Cortex®-M55 处理器技术参考手册

通用中断控制器(GIC)

通用中断控制器(Generic Interrupt Controller,GIC)是 ARM Cortex-A 系列处理器使用的中断控制器。GIC 负责从中断源收集和仲裁中断,并分发给对应的 CPU。

GIC 架构组件:

  • 分发器(Distributor):全局模块,负责管理所有中断源的优先级和使能状态,并将中断分发至目标 CPU 接口。

  • CPU 接口:每个 CPU 独立的接口,负责向 CPU 提交中断信号,并处理中断确认(Acknowledge)和结束(EOI)操作。

  • 外设中断输入:外设通过专用中断请求线(IRQ lines)将中断信号送入分发器,是 GIC 与片上外设之间的信号接口(非 GIC 内部模块)。

GIC 功能特性:

  • 中断屏蔽:可按优先级或逐个中断源控制中断使能与禁用。

  • 优先级排序:支持可配置的中断优先级,优先级值越小,优先级越高。

  • 中断分发:可将中断路由至一个或多个目标 CPU。

  • 中断状态跟踪:硬件维护每个中断的挂起(Pending)和激活(Active)状态。

  • 软件生成中断(SGI):支持通过写寄存器向目标 CPU 发送软件中断,常用于核间通信。

  • 安全扩展:支持 TrustZone 安全分区,将安全和非安全中断隔离管理。

  • 虚拟化扩展:支持 Hypervisor 场景下的虚拟中断注入。

  • 多核支持:可将中断分发至多核系统中的任意处理单元。

  • 中断抢占:支持高优先级中断抢占正在处理的低优先级中断。

以上为 GIC 的通用特性,以下是本芯片 CA32 CPU 的具体配置参数。GIC 将中断分为三类:软件生成中断(SGI),由软件写寄存器触发,用于核间通信;私有外设中断(PPI),每个 CPU 独占,如内核定时器;共享外设中断(SPI),由所有 CPU 共享,对应片上外设 IRQ。

CA32 的 GIC 支持:

  • 16 个软件生成中断(SGI):用于核间软件触发中断。

  • 16 个私有外设中断(PPI):每个 CPU 私有,如通用定时器中断。

  • 最多 96 个共享外设中断(SPI):由所有 CPU 共享的外设中断。

  • 32 个可编程中断优先级。

备注

CA32 的所有中断都必须经过 GIC 路由到 CPU。虽然 CA32 处理器保留了旧版 nFIQ/nIRQ 输入引脚,但本芯片中没有任何中断源连接至这些引脚。因此,即使 GIC 中断旁路生效(例如复位后),也不会有外部中断经由 nFIQ/nIRQ 绕过 GIC 直接触发 CA32。

平台级中断控制器(PLIC)

RISC-V 平台级中断控制器(Platform-Level Interrupt Controller,PLIC)是专为 RISC-V 系统设计的中断控制器。PLIC 将各类设备中断复用到 KR4 的外部中断线上,并提供硬件中断优先级支持。

备注

  • PLIC 优先级值越大优先级越高(与 NVIC/GIC 相反),SDK 已封装此差异。

  • SDK 的 ISR 框架已自动处理 PLIC 要求的显式完成 claim-complete 操作处理外部中断。

PLIC 可以生成三种类型的中断,它们的功能特性如下:

  • 外部中断

    • 输入到 PLIC 的中断源称为全局中断,也称为 PLIC 中断。

    • 每个中断源(例如 I/O 中断)都有自己的:

      • 优先级寄存器。优先级值越大,优先级越高。

      • 针对每个中断目标的使能寄存器。

      • 中断标识符(ID),从 1 开始(0 为保留值)。

    • 每个中断目标(例如 CPU)都有自己的:

      • 阈值寄存器。

      • 针对每个中断源的使能寄存器。

    • 当最大优先级严格大于相应的中断阈值时触发中断。

    • PLIC 采用"声明-完成(claim-complete)"握手机制处理中断:CPU 通过读取 claim 寄存器(MMIO 读操作)获取最高优先级中断 ID(声明),处理完毕后向 complete 寄存器写回该 ID(完成)。

    • PLIC 支持电平敏感和脉冲敏感两种中断信号类型,不同类型在 claim-complete 流程中的挂起行为有所不同:

      • 对于电平敏感中断:只要在完成信号发出前将中断源清除,中断处理程序仅运行一次;若完成信号发出后中断源仍处于有效电平,中断将再次挂起。

      • 对于脉冲敏感中断:无论在完成信号发出前 PLIC 检测到多少个脉冲,中断挂起仅触发一次。

  • 定时器中断

    • 当定时器计数值超过 MTIMECMP 寄存器设定值时触发。

  • 软件中断

    • 当向 MSIP 地址写入 0x1 时触发。

KR4 的 PLIC 支持:

  • 80 个中断源。所有中断都是电平敏感中断。

  • 7 个可编程中断优先级,带硬件优先级屏蔽。

备注

KR4 的 PLIC 挂起位行为与 RISC-V 标准规范存在以下差异:

  • 标准 PLIC:中断触发时,无论使能位状态如何,均设置挂起位;中断重新使能后,已挂起的中断将被处理。

  • KR4 修改:仅当对应中断的使能位(enable bit)已置位时,触发信号才会设置挂起位;使能位未置位时触发的信号不产生挂起,重新使能后也不会被处理。

备注

有关中断和 PLIC 编程的更多信息,请参考 RISC-V privileged architecture proposal

DSP 中断控制器(XEA2)

HiFi 5 DSP 使用 Xtensa 中断架构 2(XEA2)作为其中断控制器。XEA2 是由 Tensilica 为 Xtensa 处理器系列定义的标准中断架构。

备注

XEA2 的优先级模型优先级值越大优先级越高(与 NVIC/GIC 相反),且中断源的优先级在硬件中固定,无法通过软件修改(参考 中断序号列表 中的 DSP_INT_LEVEL 列)。

HiFi 5 DSP 中断控制器特性:

  • 32 个异步中断:由外部和内部源生成,覆盖从普通级别(Level-1)到高优先级乃至不可屏蔽(NMI)的各个中断优先级,以及定时器等内部中断源。

  • 多级优先级与 NMI:支持多个中断优先级(XEA2 标准最多六级,本芯片 DSP 上为四级)和一个可选的不可屏蔽中断(NMI)。各功能的中断优先级固定于硬件,无法修改。

  • iDMA 中断:集成的 DMA 引擎可配置中断,在特定描述符完成或发生错误时通知 DSP。

  • 定时器中断:两个内部定时器中断,基于特殊寄存器触发值与 32 位周期计数器的比较结果生成。

  • 中断向量:高优先级和不可屏蔽中断每个级别都有独立的中断向量。

  • 性能监视中断:性能监视器在性能计数器溢出时,向处理器发送一个电平敏感信号(来自调试模块)触发中断。

  • 支持多种中断类型:

    • 外部电平中断:输入到处理器的电平敏感中断信号。

    • 外部边沿中断:输入到处理器的边沿触发中断信号。

    • 内部中断:由处理器内部逻辑生成的中断(例如定时器和调试中断)。

    • 不可屏蔽中断(NMI):输入到处理器的外部边沿触发中断信号,具有隐式无限优先级。

    • 写错误中断:PIF 写响应发生错误时生成中断。