Перейти к содержанию

Регистры SENS ESP32

Регистры SENS ESP32: управление АЦП1 и АЦП2 из домена RTC — запуск, каналы, ослабление, разрядность и результат, — сенсорные входы с порогами и результатами измерений, ЦАП на GPIO25 и GPIO26 с генератором синуса и таймеры сопроцессора ULP.

Блок SENS по адресу 0x3FF4 8800 управляет аналоговыми узлами домена RTC. АЦП1 (восемь каналов, GPIO32…39) и АЦП2 (десять каналов, GPIO0, 2, 4, 12…15, 25…27) запускаются отсюда, когда ими управляет программа или сопроцессор ULP, а не контроллер DIG SAR для DMA. АЦП2 занят Wi-Fi, пока работает радио.

Разовое измерение АЦП1: выбрать управление из RTC (SAR1_DIG_FORCE = 0, MEAS1_START_FORCE = 1, SAR1_EN_PAD_FORCE = 1), записать маску канала в SAR1_EN_PAD и дать перепад 0 → 1 в MEAS1_START_SAR, дождаться MEAS1_DONE_SAR и прочитать MEAS1_DATA_SAR. Ослабление каждого канала — два бита в SENS_SAR_ATTEN1_REG, разрядность 9…12 бит — SAR1_BIT_WIDTH.

Регистры SAR_TOUCH_* задают пороги и показывают результаты десяти сенсорных входов, SAR_DAC_CTRL1 и SAR_DAC_CTRL2 — ЦАП и встроенный генератор синуса.

ЭкземплярБазовый адрес
SENS0x3FF4 8800

Пример на C

АЦП1, канал 6 (GPIO34): разовое измерение из RTC (soc/sens_reg.h). Макросы доступа REG_WRITE, REG_READ, REG_SET_BIT, REG_CLR_BIT, REG_GET_BIT, REG_SET_FIELD и REG_GET_FIELD объявлены в soc/soc.h ESP-IDF; поле задаётся именем макроса без суффикса, маска и сдвиг берутся из его вариантов _V и _S.

#include "soc/sens_reg.h"

REG_CLR_BIT(SENS_SAR_READ_CTRL_REG, SENS_SAR1_DIG_FORCE);       // управление из RTC
REG_SET_FIELD(SENS_SAR_START_FORCE_REG, SENS_SAR1_BIT_WIDTH, 3);  // 12 бит
REG_SET_BIT(SENS_SAR_MEAS_START1_REG, SENS_MEAS1_START_FORCE);
REG_SET_BIT(SENS_SAR_MEAS_START1_REG, SENS_SAR1_EN_PAD_FORCE);
REG_SET_FIELD(SENS_SAR_MEAS_START1_REG, SENS_SAR1_EN_PAD, 1 << 6);
REG_CLR_BIT(SENS_SAR_MEAS_START1_REG, SENS_MEAS1_START_SAR);
REG_SET_BIT(SENS_SAR_MEAS_START1_REG, SENS_MEAS1_START_SAR);
while (!REG_GET_BIT(SENS_SAR_MEAS_START1_REG, SENS_MEAS1_DONE_SAR)) {}
uint32_t raw = REG_GET_FIELD(SENS_SAR_MEAS_START1_REG, SENS_MEAS1_DATA_SAR);

Регистры блока

Регистр (ESP-IDF)СмещениеНазначениеПосле сброса
SENS_SAR_READ_CTRL_REG0x0000АЦП1: делитель такта, выборка, управление0x0003 0902
SENS_ULP_CP_SLEEP_CYC0_REG0x0018Период пробуждения сопроцессора ULP0x0000 00C8
SENS_SAR_START_FORCE_REG0x002CРазрядность АЦП, запуск ULP0x0000 000F
SENS_SAR_ATTENn_REG0x0030 + n · 0x0004Ослабление каналов АЦП n0xFFFF FFFF
SENS_SAR_MEAS_STARTn_REG0x0014 + n · 0x0040АЦП n: запуск, каналы, готовность и результат0x0000 0000
SENS_SAR_TOUCH_CTRL1_REG0x0058Сенсорные входы: задержки и режим выхода0x0204 1000
SENS_SAR_TOUCH_THRES1_REG0x005CПороги сенсорных входов 0 и 10x0000 0000
SENS_SAR_TOUCH_THRES2_REG0x0060Пороги сенсорных входов 2 и 30x0000 0000
SENS_SAR_TOUCH_THRES3_REG0x0064Пороги сенсорных входов 4 и 50x0000 0000
SENS_SAR_TOUCH_THRES4_REG0x0068Пороги сенсорных входов 6 и 70x0000 0000
SENS_SAR_TOUCH_THRES5_REG0x006CПороги сенсорных входов 8 и 90x0000 0000
SENS_SAR_TOUCH_OUT1_REG0x0070Результаты сенсорных входов 0 и 10x0000 0000
SENS_SAR_TOUCH_OUT2_REG0x0074Результаты сенсорных входов 2 и 30x0000 0000
SENS_SAR_TOUCH_OUT3_REG0x0078Результаты сенсорных входов 4 и 50x0000 0000
SENS_SAR_TOUCH_OUT4_REG0x007CРезультаты сенсорных входов 6 и 70x0000 0000
SENS_SAR_TOUCH_OUT5_REG0x0080Результаты сенсорных входов 8 и 90x0000 0000
SENS_SAR_TOUCH_CTRL2_REG0x0084Сенсорные входы: запуск и период измерений0x0040 0800
SENS_SAR_TOUCH_ENABLE_REG0x008CСенсорные входы: какие измеряются и будят0x3FFF FFFF
SENS_SAR_READ_CTRL2_REG0x0090АЦП2: делитель такта, выборка, управление0x0003 0902
SENS_SAR_DAC_CTRL1_REG0x0098ЦАП: такт и генератор синуса0x0000 0000
SENS_SAR_DAC_CTRL2_REG0x009CЦАП: уровни, масштаб и фаза каналов0x0300 0000
SENS_SAR_MEAS_CTRL2_REG0x00A0Управление ЦАП АЦП10x0000 0003

Доступ — обозначения TRM: R/W — чтение и запись, RO — только чтение, WO — только запись, WT — запись 1 запускает действие, SS и SC — бит ставится и сбрасывается аппаратно, WTC — сбрасывается записью 1.

SENS_SAR_READ_CTRL_REG — аЦП1: делитель такта, выборка, управление

Смещение 0x0000, адрес 0x3FF4 8800, после сброса 0x0003 0902. TRM: регистр 31.1.

31302928272625242322212019181716
—SAR1_DATA_INVSAR1_DIG_FORCE—SAR1_SAMPLE_BIT
1514131211109876543210
SAR1_SAMPLE_CYCLESAR1_CLK_DIV
ПолеБитыДоступСбросНазначение
SAR1_DATA_INV28R/W0Инвертировать результат АЦП1
SAR1_DIG_FORCE27R/W01 — АЦП1 управляет контроллер DIG SAR, 0 — домен RTC
SAR1_SAMPLE_BIT17:16R/W0x3Разрядность для контроллера DIG
SAR1_SAMPLE_CYCLE15:8R/W0x09Длительность выборки АЦП1
SAR1_CLK_DIV7:0R/W0x02Делитель такта АЦП1

SENS_ULP_CP_SLEEP_CYC0_REG — период пробуждения сопроцессора ULP

Смещение 0x0018, адрес 0x3FF4 8818, после сброса 0x0000 00C8. TRM: регистр 31.2.

ПолеБитыДоступСброс
SLEEP_CYCLES_S031:0R/W0x0000 00C8

SENS_SAR_START_FORCE_REG — разрядность АЦП, запуск ULP

Смещение 0x002C, адрес 0x3FF4 882C, после сброса 0x0000 000F. TRM: регистр 31.3.

31302928272625242322212019181716
—SAR1_STOPSAR2_STOPPC_INIT
1514131211109876543210
PC_INIT—ULP_CP_START_TOPULP_CP_FORCE_START_TOPSAR2_PWDET_CCTSAR2_EN_TESTSAR2_BIT_WIDTHSAR1_BIT_WIDTH
ПолеБитыДоступСбросНазначение
SAR1_STOP23R/W0
SAR2_STOP22R/W0
PC_INIT21:11R/W0x000Начальный адрес программы ULP
ULP_CP_START_TOP9R/W0Запустить сопроцессор ULP
ULP_CP_FORCE_START_TOP8R/W0Запускать ULP программно, а не по таймеру
SAR2_PWDET_CCT7:5R/W0x0
SAR2_EN_TEST4R/W0
SAR2_BIT_WIDTH3:2R/W0x3Разрядность АЦП2: 0 — 9 бит, 1 — 10, 2 — 11, 3 — 12 бит
SAR1_BIT_WIDTH1:0R/W0x3Разрядность АЦП1: 0 — 9 бит, 1 — 10, 2 — 11, 3 — 12 бит

SENS_SAR_ATTENn_REG — ослабление каналов АЦП n

2 копии, n = 1, 2: смещение 0x0030 + n · 0x0004, после сброса 0xFFFF FFFF. TRM: регистр 31.4.

ПолеБитыДоступСбросНазначение
SARn_ATTEN31:0R/W0xFFFF FFFFПо 2 бита на канал: 0 — 0 дБ, 1 — 2,5 дБ, 2 — 6 дБ, 3 — 11 дБ

SENS_SAR_MEAS_STARTn_REG — аЦП n: запуск, каналы, готовность и результат

2 копии, n = 1, 2: смещение 0x0014 + n · 0x0040, после сброса 0x0000 0000. TRM: регистр 31.6.

Регистры двух АЦП устроены одинаково: SENS_SAR_MEAS_START1_REG по смещению 0x54 управляет АЦП1, SENS_SAR_MEAS_START2_REG по смещению 0x94 — АЦП2.

31302928272625242322212019181716
SARn_EN_PAD_FORCESARn_EN_PADMEASn_START_FORCEMEASn_START_SARMEASn_DONE_SAR
1514131211109876543210
MEASn_DATA_SAR
ПолеБитыДоступСбросНазначение
SARn_EN_PAD_FORCE31R/W01 — каналы задаёт SARn_EN_PAD, 0 — сопроцессор ULP
SARn_EN_PAD30:19R/W0x000Маска канала: бит n — канал n
MEASn_START_FORCE18R/W01 — запуск битом MEASn_START_SAR, 0 — сопроцессором ULP
MEASn_START_SAR17R/W0Перепад 0 → 1 запускает измерение
MEASn_DONE_SAR16RO0Измерение закончено
MEASn_DATA_SAR15:0RO0x0000Результат последнего измерения

SENS_SAR_TOUCH_CTRL1_REG — сенсорные входы: задержки и режим выхода

Смещение 0x0058, адрес 0x3FF4 8858, после сброса 0x0204 1000. TRM: регистр 31.7.

31302928272625242322212019181716
—TOUCH_OUT_1ENTOUCH_OUT_SELTOUCH_XPD_WAIT
1514131211109876543210
TOUCH_MEAS_DELAY
ПолеБитыДоступСбросНазначение
TOUCH_OUT_1EN25R/W1
TOUCH_OUT_SEL24R/W0
TOUCH_XPD_WAIT23:16R/W0x04Ожидание включения сенсора
TOUCH_MEAS_DELAY15:0R/W0x1000Длительность одного измерения в тактах 8 МГц

SENS_SAR_TOUCH_THRES1_REG — пороги сенсорных входов 0 и 1

Смещение 0x005C, адрес 0x3FF4 885C, после сброса 0x0000 0000. TRM: регистр 31.8.

31302928272625242322212019181716
TOUCH_OUT_TH0
1514131211109876543210
TOUCH_OUT_TH1
ПолеБитыДоступСбросНазначение
TOUCH_OUT_TH031:16R/W0x0000Порог сенсорного входа 0
TOUCH_OUT_TH115:0R/W0x0000Порог сенсорного входа 1

SENS_SAR_TOUCH_THRES2_REG — пороги сенсорных входов 2 и 3

Смещение 0x0060, адрес 0x3FF4 8860, после сброса 0x0000 0000. TRM: регистр 31.9.

31302928272625242322212019181716
TOUCH_OUT_TH2
1514131211109876543210
TOUCH_OUT_TH3
ПолеБитыДоступСбросНазначение
TOUCH_OUT_TH231:16R/W0x0000Порог сенсорного входа 2
TOUCH_OUT_TH315:0R/W0x0000Порог сенсорного входа 3

SENS_SAR_TOUCH_THRES3_REG — пороги сенсорных входов 4 и 5

Смещение 0x0064, адрес 0x3FF4 8864, после сброса 0x0000 0000. TRM: регистр 31.10.

31302928272625242322212019181716
TOUCH_OUT_TH4
1514131211109876543210
TOUCH_OUT_TH5
ПолеБитыДоступСбросНазначение
TOUCH_OUT_TH431:16R/W0x0000Порог сенсорного входа 4
TOUCH_OUT_TH515:0R/W0x0000Порог сенсорного входа 5

SENS_SAR_TOUCH_THRES4_REG — пороги сенсорных входов 6 и 7

Смещение 0x0068, адрес 0x3FF4 8868, после сброса 0x0000 0000. TRM: регистр 31.11.

31302928272625242322212019181716
TOUCH_OUT_TH6
1514131211109876543210
TOUCH_OUT_TH7
ПолеБитыДоступСбросНазначение
TOUCH_OUT_TH631:16R/W0x0000Порог сенсорного входа 6
TOUCH_OUT_TH715:0R/W0x0000Порог сенсорного входа 7

SENS_SAR_TOUCH_THRES5_REG — пороги сенсорных входов 8 и 9

Смещение 0x006C, адрес 0x3FF4 886C, после сброса 0x0000 0000. TRM: регистр 31.12.

31302928272625242322212019181716
TOUCH_OUT_TH8
1514131211109876543210
TOUCH_OUT_TH9
ПолеБитыДоступСбросНазначение
TOUCH_OUT_TH831:16R/W0x0000Порог сенсорного входа 8
TOUCH_OUT_TH915:0R/W0x0000Порог сенсорного входа 9

SENS_SAR_TOUCH_OUT1_REG — результаты сенсорных входов 0 и 1

Смещение 0x0070, адрес 0x3FF4 8870, после сброса 0x0000 0000. TRM: регистр 31.13.

31302928272625242322212019181716
TOUCH_MEAS_OUT0
1514131211109876543210
TOUCH_MEAS_OUT1
ПолеБитыДоступСбросНазначение
TOUCH_MEAS_OUT031:16RO0x0000Результат измерения сенсорного входа 0
TOUCH_MEAS_OUT115:0RO0x0000Результат измерения сенсорного входа 1

SENS_SAR_TOUCH_OUT2_REG — результаты сенсорных входов 2 и 3

Смещение 0x0074, адрес 0x3FF4 8874, после сброса 0x0000 0000. TRM: регистр 31.14.

31302928272625242322212019181716
TOUCH_MEAS_OUT2
1514131211109876543210
TOUCH_MEAS_OUT3
ПолеБитыДоступСбросНазначение
TOUCH_MEAS_OUT231:16RO0x0000Результат измерения сенсорного входа 2
TOUCH_MEAS_OUT315:0RO0x0000Результат измерения сенсорного входа 3

SENS_SAR_TOUCH_OUT3_REG — результаты сенсорных входов 4 и 5

Смещение 0x0078, адрес 0x3FF4 8878, после сброса 0x0000 0000. TRM: регистр 31.15.

31302928272625242322212019181716
TOUCH_MEAS_OUT4
1514131211109876543210
TOUCH_MEAS_OUT5
ПолеБитыДоступСбросНазначение
TOUCH_MEAS_OUT431:16RO0x0000Результат измерения сенсорного входа 4
TOUCH_MEAS_OUT515:0RO0x0000Результат измерения сенсорного входа 5

SENS_SAR_TOUCH_OUT4_REG — результаты сенсорных входов 6 и 7

Смещение 0x007C, адрес 0x3FF4 887C, после сброса 0x0000 0000. TRM: регистр 31.16.

31302928272625242322212019181716
TOUCH_MEAS_OUT6
1514131211109876543210
TOUCH_MEAS_OUT7
ПолеБитыДоступСбросНазначение
TOUCH_MEAS_OUT631:16RO0x0000Результат измерения сенсорного входа 6
TOUCH_MEAS_OUT715:0RO0x0000Результат измерения сенсорного входа 7

SENS_SAR_TOUCH_OUT5_REG — результаты сенсорных входов 8 и 9

Смещение 0x0080, адрес 0x3FF4 8880, после сброса 0x0000 0000. TRM: регистр 31.17.

31302928272625242322212019181716
TOUCH_MEAS_OUT8
1514131211109876543210
TOUCH_MEAS_OUT9
ПолеБитыДоступСбросНазначение
TOUCH_MEAS_OUT831:16RO0x0000Результат измерения сенсорного входа 8
TOUCH_MEAS_OUT915:0RO0x0000Результат измерения сенсорного входа 9

SENS_SAR_TOUCH_CTRL2_REG — сенсорные входы: запуск и период измерений

Смещение 0x0084, адрес 0x3FF4 8884, после сброса 0x0040 0800. TRM: регистр 31.18.

31302928272625242322212019181716
—TOUCH_MEAS_EN_CLRTOUCH_SLEEP_CYCLES
1514131211109876543210
TOUCH_SLEEP_CYCLESTOUCH_START_FORCETOUCH_START_ENTOUCH_START_FSM_ENTOUCH_MEAS_DONETOUCH_MEAS_EN
ПолеБитыДоступСбросНазначение
TOUCH_MEAS_EN_CLR30WO0
TOUCH_SLEEP_CYCLES29:14R/W0x0100Период измерений во сне в тактах медленного генератора
TOUCH_START_FORCE13R/W0
TOUCH_START_EN12R/W0Запустить измерение программно
TOUCH_START_FSM_EN11R/W1Запускать измерения автоматом по таймеру
TOUCH_MEAS_DONE10RO0Измерение сенсорных входов закончено
TOUCH_MEAS_EN9:0RO0x000Флаги входов, у которых результат ниже порога

SENS_SAR_TOUCH_ENABLE_REG — сенсорные входы: какие измеряются и будят

Смещение 0x008C, адрес 0x3FF4 888C, после сброса 0x3FFF FFFF. TRM: регистр 31.19.

31302928272625242322212019181716
—TOUCH_PAD_OUTEN1TOUCH_PAD_OUTEN2
1514131211109876543210
TOUCH_PAD_OUTEN2TOUCH_PAD_WORKEN
ПолеБитыДоступСбросНазначение
TOUCH_PAD_OUTEN129:20R/W0x3FFМаска входов набора 1 для прерывания и пробуждения
TOUCH_PAD_OUTEN219:10R/W0x3FFМаска входов набора 2 для прерывания и пробуждения
TOUCH_PAD_WORKEN9:0R/W0x3FFМаска сенсорных входов, которые измеряются

SENS_SAR_READ_CTRL2_REG — аЦП2: делитель такта, выборка, управление

Смещение 0x0090, адрес 0x3FF4 8890, после сброса 0x0003 0902. TRM: регистр 31.20.

31302928272625242322212019181716
—SAR2_DATA_INVSAR2_DIG_FORCE—SAR2_SAMPLE_BIT
1514131211109876543210
SAR2_SAMPLE_CYCLESAR2_CLK_DIV
ПолеБитыДоступСбросНазначение
SAR2_DATA_INV29R/W0
SAR2_DIG_FORCE28R/W01 — АЦП2 управляет контроллер DIG SAR, 0 — домен RTC
SAR2_SAMPLE_BIT17:16R/W0x3
SAR2_SAMPLE_CYCLE15:8R/W0x09Длительность выборки АЦП2
SAR2_CLK_DIV7:0R/W0x02Делитель такта АЦП2

SENS_SAR_DAC_CTRL1_REG — цАП: такт и генератор синуса

Смещение 0x0098, адрес 0x3FF4 8898, после сброса 0x0000 0000. TRM: регистр 31.22.

31302928272625242322212019181716
—DAC_CLK_INVDAC_CLK_FORCE_HIGHDAC_CLK_FORCE_LOWDAC_DIG_FORCE—SW_TONE_EN
1514131211109876543210
SW_FSTEP
ПолеБитыДоступСбросНазначение
DAC_CLK_INV25R/W0
DAC_CLK_FORCE_HIGH24R/W0
DAC_CLK_FORCE_LOW23R/W0
DAC_DIG_FORCE22R/W0
SW_TONE_EN16R/W0Включить генератор синуса
SW_FSTEP15:0R/W0x0000Шаг частоты генератора синуса

SENS_SAR_DAC_CTRL2_REG — цАП: уровни, масштаб и фаза каналов

Смещение 0x009C, адрес 0x3FF4 889C, после сброса 0x0300 0000. TRM: регистр 31.23.

31302928272625242322212019181716
—DAC_CW_EN2DAC_CW_EN1DAC_INV2DAC_INV1DAC_SCALE2DAC_SCALE1
1514131211109876543210
DAC_DC2DAC_DC1
ПолеБитыДоступСбросНазначение
DAC_CW_EN225R/W1Канал 2 выводит синус генератора
DAC_CW_EN124R/W1Канал 1 выводит синус генератора
DAC_INV223:22R/W0x0
DAC_INV121:20R/W0x0
DAC_SCALE219:18R/W0x0
DAC_SCALE117:16R/W0x0
DAC_DC215:8R/W0x00Постоянная составляющая канала 2 ЦАП (GPIO26)
DAC_DC17:0R/W0x00Постоянная составляющая канала 1 ЦАП (GPIO25)

SENS_SAR_MEAS_CTRL2_REG — управление ЦАП АЦП1

Смещение 0x00A0, адрес 0x3FF4 88A0, после сброса 0x0000 0003. TRM: регистр 31.24.

ПолеБитыДоступСброс
SAR1_DAC_XPD_FSM3:0R/W0x3

Частые вопросы

Как прочитать АЦП1 ESP32 через регистры SENS?

В SENS_SAR_READ_CTRL_REG сбросить SAR1_DIG_FORCE, в SENS_SAR_MEAS_START1_REG установить MEAS1_START_FORCE и SAR1_EN_PAD_FORCE, записать 1 << канал в SAR1_EN_PAD, сбросить и установить MEAS1_START_SAR, дождаться MEAS1_DONE_SAR и прочитать MEAS1_DATA_SAR. Перед этим должно быть включено питание АЦП (SAR_MEAS_WAIT2_REG, поле FORCE_XPD_SAR) — его ESP-IDF включает сам.

Как задать ослабление канала АЦП ESP32?

В регистре SENS_SAR_ATTEN1_REG для АЦП1 и SENS_SAR_ATTEN2_REG для АЦП2 каждому каналу отведено два бита: канал n — биты 2n+1:2n. Значения 0…3 соответствуют 0, 2,5, 6 и 11 дБ; рекомендуемые ESP-IDF диапазоны входа — 100…950, 100…1250, 150…1750 и 150…2450 мВ.

Источники

  1. Espressif. ESP32 Technical Reference Manual, версия 5.8 — глава 31: таблица Register Summary и рисунки регистров — смещения, поля, тип доступа и значения после сброса
  2. Espressif. SVD svd/esp32.svd, версия 16 (espressif/svd, коммит be20aa1) — базовые адреса периферии, список регистров и полей; лицензия Apache-2.0
  3. Espressif. ESP-IDF v6.1: заголовки components/soc/esp32/register/soc/*_reg.h (коммит fff9895) — имена макросов регистров и полей, сверка положения полей и значений по умолчанию; лицензия Apache-2.0 OR MIT

Нашли ошибку в регистрах?

Другие регистры ESP32

Статьи, инструменты и термины