全称为 Core Local Interruptor(核心本地中断控制器),是 RISC-V 特权架构规范(Privileged Architecture Specification)中明确定义的内建于每个核心 / 硬件线程(hart)的中断控制器,专门处理「核心本地、非共享」的中断类型,区别于处理外设共享中断的 PLIC(Platform-Level Interrupt Controller,平台级中断控制器)。
1、为什么需要 CLINT?
RISC-V 核心在运行时,需要处理两类截然不同的中断需求:
一类是全局共享中断(如 UART 收发、GPIO 电平变化、SPI 通信完成等),这类中断来自外部外设,需多个核心共享处理;
另一类是核心本地中断(如定时任务、核心间通信),这类中断仅属于单个核心,要求极低的响应延迟,无需总线仲裁。
CLINT 的设计初衷正是为了解决第二类需求 ------ 通过将中断控制器 "内嵌" 到每个 hart 中,避免总线传输带来的延迟,确保核心对本地关键事件(如定时器到期、核心间唤醒)的快速响应,这也是其 "Core Local"(核心本地)命名的由来。
CLINT 模块产生 CSR 寄存器的定时器中断、软件中断和计时器。

CLINT的系统架构示意图
2、CLINT 功能说明
CLINT 由软件中断触发器、定时器中断触发器、计数器组成。 软件中断触发器由一个寄存器构成,直连 CPU 的机器级软件中断。 计数器负责提供 CPU 的 TIME 与 TIMEH,并参与定时器中断的触发。 定时器中断触发器用于定时器中断 的触发,当计数器值大于配置的值时会触发定时器中断,定时器中断是嵌入式系统中最常用的中断类型,几乎所有 RTOS(如 FreeRTOS、RT-Thread)的任务调度都依赖定时器中断提供的 "时钟节拍"。
2.1 CLINT初始化

2.2 软件中断:
写 0 则清除中断挂起状态

2.3定时器中断:
中断处理函数中,更新比较阈值(实现周期性触发),并执行调度逻辑(如 RTOS 的任务切换)。

2.3读取CLINT计数器:

2.4延时函数通过计数器功能计算延时时间
CLINT 的 64 位全局计数器time/timeh提供了高精度的时间基准,可直接用于实现微秒级 / 毫秒级精准延时,无需依赖外部定时器。
延时函数实现原理:
进入延时函数时,读取当前计数器值told;
计算需要的总时钟节拍数(ticks = 延时时间(us) × 时钟频率(MHz));
循环读取当前计数器值tnow,计算累计节拍数tcnt;
当tcnt >= ticks时,延时结束。

3、CLINT 的常见应用场景
① RTOS 时钟节拍生成
FreeRTOS 等 RTOS 的任务调度依赖固定周期的时钟节拍,通常将 CLINT 定时器中断配置为 1ms 触发一次,在中断处理函数中调用vTaskIncrementTick(),实现任务就绪状态更新和调度器切换。
② 多核系统启动
在 RISC-V 多核芯片中,主核心启动后,通过向从核心的SOFTICR寄存器写 1,触发从核心的软件中断,从核心在中断处理函数中完成栈初始化、应用加载,实现多核心协同工作。
③ 精准数据采样
在工业控制、传感器采集等场景中,需按固定时间间隔(如 100us)采集数据,通过 CLINT 定时器中断触发采样函数,确保采样周期的稳定性和精准度。