ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

Event Task Matrix(ETM)工作机制

Event Task Matrix(ETM)工作机制

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

CPU无需运行任何代码。 [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 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)给你画出实际的硬件触发链路图。

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进