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 Done
Task(任务)
外设能够被触发执行的动作。
例如:
-
启动ADC转换
-
切换GPIO电平
-
启动Timer
-
停止Timer
Start ADC
Toggle GPIO
Start Timer
Stop Timer
ETM 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 Toggle
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 Event
3. 获取Task
例如:
adc_new_etm_task(...)
获得:
ADC Start Task
4. 连接
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) 给你画出实际的硬件触发链路图。