Event Task Matrix(ETM)是一种硬件事件路由机制,广泛用于新一代 ESP 芯片(如 ESP32-C6、ESP32-H2、ESP32-S3 部分功能扩展等)。它的核心作用是:
让一个外设产生的事件(Event)直接触发另一个外设执行任务(Task),无需 CPU 参与。[docs.espressif.com], [github.com]
为什么需要 ETM
传统方式下:
Timer 超时 ↓ 产生中断 ↓ CPU进入ISR ↓ 软件控制ADC启动这个过程中存在:
- 中断响应延迟
- CPU负载增加
- 实时性受系统负载影响
ETM方式:
Timer Alarm Event ↓ ETM ↓ ADC Start Task整个过程不经过 CPU,因此能够实现:
- 超低延迟
- 确定性的触发时序
- 降低CPU占用率
- 提高实时性能
这些正是 ETM 设计的目标。 [docs.espressif.com], [docs.espressif.com]
ETM基本概念
Event(事件)
外设产生的硬件事件。
例如:
- GPTimer超时
- GPIO边沿检测
- ADC转换完成
- DMA传输完成
GPIO Falling Edge Timer Alarm ADC DoneTask(任务)
外设能够被触发执行的动作。
例如:
- 启动ADC转换
- 切换GPIO电平
- 启动Timer
- 停止Timer
Start ADC Toggle GPIO Start Timer Stop TimerETM Channel(通道)
ETM通过Channel把Event和Task连接起来:
Event │ ▼ ETM Channel │ ▼ Task一个通道本质上是:
1 Event → 1 Task一条连接关系。 [github.com], [docs.espressif.com]
工作原理
例如:
场景1:定时采样ADC
不使用ETM
GPTimer Alarm ↓ Interrupt ↓ ISR ↓ ADC Start使用ETM
GPTimer Alarm Event ↓ ETM ↓ ADC Start Task这样:
- 采样周期更精准
- 不受RTOS调度影响
- CPU完全不用干预
[docs.espressif.com], [github.com]
常见应用
1. GPIO直接控制
按钮按下直接翻转LED
GPIO Falling Edge ↓ ETM ↓ GPIO ToggleCPU无需运行任何代码。 [docs.rs], [docs.rs]
2. Timer触发ADC
GPTimer Alarm ↓ ETM ↓ ADC Start适合:
- 音频采样
- 传感器采集
- 电机控制
3. ADC完成后启动DMA
ADC Done ↓ ETM ↓ DMA Start形成硬件流水线。
4. 电机控制
PWM Compare Event ↓ ETM ↓ GPIO Update实现亚微秒级响应。
ETM 与中断的区别
| 项目 | 中断方式 | ETM方式 |
|---|---|---|
| CPU参与 | 需要 | 不需要 |
| 响应时间 | μs级 | ns~硬件级 |
| 实时性 | 受系统影响 | 高确定性 |
| 功耗 | 较高 | 更低 |
| 软件复杂度 | 高 | 较低 |
ETM本质上是:
用硬件连线代替软件中断处理。[docs.espressif.com], [github.com]
ESP-IDF中的配置流程
典型步骤:
1. 创建ETM Channel
esp_etm_new_channel(...)2. 获取Event
例如:
gptimer_new_etm_event(...)获得:
GPTimer Alarm Event3. 获取Task
例如:
adc_new_etm_task(...)获得:
ADC Start Task4. 连接
esp_etm_channel_connect( channel, event, task );5. 使能
esp_etm_channel_enable(channel);此后:
Event ↓ ETM ↓ Task自动执行。 [docs.espressif.com], [github.com]
一个形象理解
把 ETM 看成 MCU 内部的“硬件自动化总线”:
IF Event Happens THEN Do Task类似于:
IF Timer Expired THEN Start ADC IF GPIO Falling Edge THEN Toggle LED IF ADC Done THEN Start DMA全部由硬件完成,不经过 CPU。
结合你当前正在看的ESP32-S31 Datasheet,如果 S31 延续 C6/H2 的 ETM 架构,那么它在低功耗传感器采集、Wi-Fi/BLE 数据触发和实时控制场景中会非常有价值。我也可以进一步结合ESP32-S31 的具体 ETM 资源(支持哪些 Event 和 Task)给你画出实际的硬件触发链路图。