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

Регистры APB_SARADC ESP32-S3

Регистры APB_SARADC ESP32-S3: цифровой контроллер DIG ADC1 — непрерывное сканирование каналов SAR ADC1 по таблице шаблонов, таймер запуска, делители такта, два фильтра, два монитора порогов, передача результатов в память через GDMA и арбитр SAR ADC2.

SAR ADC ESP32-S3 обслуживают четыре контроллера (раздел 39.3 TRM): цифровой DIG ADC1 с блоком регистров APB_SARADC по адресу 0x6004 0000, два RTC-контроллера в блоке SENS и внутренний PWDET для радиочасти. Цифровой контроллер ADC2 у ESP32-S3 работает неправильно, и TRM его описание удалил (см. ESP32-S3 Series SoC Errata) — поэтому поля SAR2 в этом блоке зарезервированы.

DIG ADC1 сканирует каналы по таблице шаблонов из 16 записей в регистрах SAR1_PATT_TAB1…4, по четыре 6-битные записи на регистр: биты 5:2 записи — номер канала, биты 1:0 — ослабление (0 — 0 дБ, 1 — 2,5 дБ, 2 — 6 дБ, 3 — 12 дБ). Число используемых записей — SAR1_PATT_LEN + 1. Запуск — от таймера (TIMER_EN, TIMER_TARGET), результаты через GDMA идут в память при установленном APB_ADC_TRANS.

Такт контроллера выбирает поле CLK_SEL регистра APB_SARADC_APB_ADC_CLKM_CONF_REG: 0 — выключен, 1 — PLL_D2_CLK с делителем, 2 — APB_CLK. Такт самого АЦП DIGADC_SARCLK получается делением на SAR_CLK_DIV; выше 5 МГц точность падает, на одно преобразование уходит 25 тактов.

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

Пример на C

Одна запись таблицы: канал 2, ослабление 12 дБ (soc/apb_saradc_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/apb_saradc_reg.h"

uint32_t entry = (2 << 2) | 3;                                    // канал 2, 12 дБ
REG_WRITE(APB_SARADC_SAR1_PATT_TAB1_REG, entry << 18);           // запись 0 — биты 23:18
REG_SET_FIELD(APB_SARADC_CTRL_REG, APB_SARADC_SAR1_PATT_LEN, 0);  // одна запись (0 + 1)
REG_SET_BIT(APB_SARADC_CTRL_REG, APB_SARADC_SAR1_PATT_P_CLEAR);   // указатель на начало
REG_CLR_BIT(APB_SARADC_CTRL_REG, APB_SARADC_SAR1_PATT_P_CLEAR);

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

Регистр (ESP-IDF)СмещениеНазначениеПосле сброса
APB_SARADC_CTRL_REG0x0000Запуск, длина таблицы, делитель такта АЦП, питание0x4007 8240
APB_SARADC_CTRL2_REG0x0004Таймер запуска, инверсия данных, ограничение числа преобразований0x0000 A1FE
APB_SARADC_FILTER_CTRL1_REG0x0008Коэффициенты фильтров 0 и 10x0000 0000
APB_SARADC_SAR1_PATT_TABn_REG0x0014 + n · 0x0004Таблица шаблонов SAR ADC1, записи 4(n − 1)…4(n − 1) + 30x0000 0000
APB_SARADC_APB_ADC_ARB_CTRL_REG0x0038Арбитр SAR ADC2: приоритеты RTC и PWDET0x0000 0900
APB_SARADC_FILTER_CTRL0_REG0x003CКаналы фильтров и сброс0x006B 4000
APB_SARADC_APB_SARADCn_DATA_STATUS_REG0x0008 + n · 0x0038Последний результат SAR ADCn0x0000 0000
APB_SARADC_THRESn_CTRL_REG0x0044 + n · 0x0004Монитор порогов n: канал и пороги0x0003 FFED
APB_SARADC_THRES_CTRL_REG0x0058Включение мониторов порогов0x0000 0000
APB_SARADC_INT_ENA_REG0x005CРазрешение прерываний0x0000 0000
APB_SARADC_INT_RAW_REG0x0060Необработанные флаги прерываний0x0000 0000
APB_SARADC_INT_ST_REG0x0064Флаги прерываний после маски разрешения0x0000 0000
APB_SARADC_INT_CLR_REG0x0068Сброс флагов прерываний записью 10x0000 0000
APB_SARADC_DMA_CONF_REG0x006CПередача через GDMA, сброс автомата0x0000 00FF
APB_SARADC_APB_ADC_CLKM_CONF_REG0x0070Источник и делитель такта контроллера0x0000 0004
APB_SARADC_APB_CTRL_DATE_REG0x03FCВерсия блока: дата ревизии аппаратуры0x0210 1180

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

APB_SARADC_CTRL_REG — запуск, длина таблицы, делитель такта АЦП, питание

Смещение 0x0000, адрес 0x6004 0000, после сброса 0x4007 8240. TRM: регистр 39.56.

31302928272625242322212019181716
WAIT_ARB_CYCLE—XPD_SAR_FORCE—SAR1_PATT_P_CLEAR—SAR1_PATT_LEN
1514131211109876543210
SAR1_PATT_LENSAR_CLK_DIVSAR_CLK_GATED—STARTSTART_FORCE
ПолеБитыДоступСбросНазначение
WAIT_ARB_CYCLE31:30R/W0x1Такты ожидания стабилизации арбитра после SAR_DONE
XPD_SAR_FORCE28:27R/W0x0Принудительное питание АЦП; TRM значения не расписывает, ESP-IDF (adc_ll.h) пишет 3 для программного включения, 2 — для программного выключения и 0 — для управления автоматом
SAR1_PATT_P_CLEAR23R/W01 — сбросить указатель таблицы шаблонов DIG ADC1
SAR1_PATT_LEN18:15R/W0xFЧисло записей таблицы минус 1
SAR_CLK_DIV14:7R/W0x04Делитель такта DIGADC_SARCLK
SAR_CLK_GATED6R/W11 — отключать такт АЦП в простое
START1R/W0Программный запуск при START_FORCE = 1
START_FORCE0R/W00 — запуск автоматом, 1 — программой

APB_SARADC_CTRL2_REG — таймер запуска, инверсия данных, ограничение числа преобразований

Смещение 0x0004, адрес 0x6004 0004, после сброса 0x0000 A1FE. TRM: регистр 39.57.

31302928272625242322212019181716
—TIMER_ENTIMER_TARGET
1514131211109876543210
TIMER_TARGET—SAR2_INVSAR1_INVMAX_MEAS_NUMMEAS_NUM_LIMIT
ПолеБитыДоступСбросНазначение
TIMER_EN24R/W01 — запуск преобразований по таймеру
TIMER_TARGET23:12R/W0x00AПериод таймера: запуск, когда счёт доходит до удвоенного значения
SAR2_INV10R/W01 — инвертировать данные для DIG ADC2
SAR1_INV9R/W01 — инвертировать данные для DIG ADC1
MAX_MEAS_NUM8:1R/W0xFFНаибольшее число преобразований
MEAS_NUM_LIMIT0R/W01 — ограничить число преобразований

APB_SARADC_FILTER_CTRL1_REG — коэффициенты фильтров 0 и 1

Смещение 0x0008, адрес 0x6004 0008, после сброса 0x0000 0000. TRM: регистр 39.58.

31302928272625242322212019181716
FILTER_FACTOR0FILTER_FACTOR1—
1514131211109876543210
—
ПолеБитыДоступСбросНазначение
FILTER_FACTOR031:29R/W0x0Коэффициент фильтра 0
FILTER_FACTOR128:26R/W0x0Коэффициент фильтра 1

APB_SARADC_SAR1_PATT_TABn_REG — таблица шаблонов SAR ADC1, записи 4(n − 1)…4(n − 1) + 3

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

TRM v1.8 противоречит сам себе: на рисунках SAR1_PATT_TAB1 и TAB2 запись 0 занимает биты 23:18, на рисунках TAB3 и TAB4 и в примере раздела 39.3.7.5 — биты 5:0. ESP-IDF v6.1 (adc_ll_digi_set_pattern_table) кладёт запись k в биты (23 − 6k):(18 − 6k) во всех четырёх регистрах; страница следует ESP-IDF.

ПолеБитыДоступСбросНазначение
SAR1_PATT_TABn23:0R/W0x000000Четыре 6-битные записи: запись 0 регистра — биты 23:18, запись 3 — биты 5:0; в записи биты 5:2 — канал, биты 1:0 — ослабление

APB_SARADC_APB_ADC_ARB_CTRL_REG — арбитр SAR ADC2: приоритеты RTC и PWDET

Смещение 0x0038, адрес 0x6004 0038, после сброса 0x0000 0900. TRM: регистр 39.63 (APB_SARADC_APB_ADC_ARB_CTRL_REG).

1514131211109876543210
—ADC_ARB_FIX_PRIORITYADC_ARB_WIFI_PRIORITYADC_ARB_RTC_PRIORITY—ADC_ARB_GRANT_FORCEADC_ARB_WIFI_FORCEADC_ARB_RTC_FORCE—
ПолеБитыДоступСбросНазначение
ADC_ARB_FIX_PRIORITY12R/W01 — фиксированные приоритеты арбитра
ADC_ARB_WIFI_PRIORITY11:10R/W0x2Приоритет контроллера PWDET
ADC_ARB_RTC_PRIORITY9:8R/W0x1Приоритет RTC-контроллера ADC2
ADC_ARB_GRANT_FORCE5R/W01 — принудительное решение арбитра
ADC_ARB_WIFI_FORCE4R/W01 — отдать SAR ADC2 контроллеру PWDET
ADC_ARB_RTC_FORCE3R/W01 — отдать SAR ADC2 RTC-контроллеру

APB_SARADC_FILTER_CTRL0_REG — каналы фильтров и сброс

Смещение 0x003C, адрес 0x6004 003C, после сброса 0x006B 4000. TRM: регистр 39.64.

31302928272625242322212019181716
FILTER_RESET—FILTER_CHANNEL0FILTER_CHANNEL1
1514131211109876543210
FILTER_CHANNEL1—
ПолеБитыДоступСбросНазначение
FILTER_RESET31R/W01 — сброс фильтров
FILTER_CHANNEL023:19R/W0x0DКанал фильтра 0
FILTER_CHANNEL118:14R/W0x0DКанал фильтра 1

APB_SARADC_APB_SARADCn_DATA_STATUS_REG — последний результат SAR ADCn

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

ПолеБитыДоступСбросНазначение
ADCn_DATA16:0RO0x00000Необработанный результат SAR ADCn; ESP-IDF берёт младшие 12 бит

APB_SARADC_THRESn_CTRL_REG — монитор порогов n: канал и пороги

2 копии, n = 0, 1: смещение 0x0044 + n · 0x0004, после сброса 0x0003 FFED. TRM: регистр 39.65.

31302928272625242322212019181716
—THRESn_LOWTHRESn_HIGH
1514131211109876543210
THRESn_HIGHTHRESn_CHANNEL
ПолеБитыДоступСбросНазначение
THRESn_LOW30:18R/W0x0000Нижний порог монитора n
THRESn_HIGH17:5R/W0x1FFFВерхний порог монитора n
THRESn_CHANNEL4:0R/W0x0DКанал монитора n

APB_SARADC_THRES_CTRL_REG — включение мониторов порогов

Смещение 0x0058, адрес 0x6004 0058, после сброса 0x0000 0000. TRM: регистр 39.67.

31302928272625242322212019181716
THRES0_ENTHRES1_EN—THRES_ALL_EN—
1514131211109876543210
—
ПолеБитыДоступСбросНазначение
THRES0_EN31R/W01 — монитор 0 включён
THRES1_EN30R/W01 — монитор 1 включён
THRES_ALL_EN27R/W01 — проверять пороги для всех настроенных каналов

APB_SARADC_INT_ENA_REG — разрешение прерываний

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

31302928272625242322212019181716
ADC1_DONE_INT_ENA—THRES0_HIGH_INT_ENATHRES1_HIGH_INT_ENATHRES0_LOW_INT_ENATHRES1_LOW_INT_ENA—
1514131211109876543210
—
ПолеБитыДоступСбросНазначение
ADC1_DONE_INT_ENA31R/W0DIG ADC1 закончил преобразование
THRES0_HIGH_INT_ENA29R/W0Результат канала монитора 0 выше верхнего порога
THRES1_HIGH_INT_ENA28R/W0Результат канала монитора 1 выше верхнего порога
THRES0_LOW_INT_ENA27R/W0Результат канала монитора 0 ниже нижнего порога
THRES1_LOW_INT_ENA26R/W0Результат канала монитора 1 ниже нижнего порога

APB_SARADC_INT_RAW_REG — необработанные флаги прерываний

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

31302928272625242322212019181716
ADC1_DONE_INT_RAW—THRES0_HIGH_INT_RAWTHRES1_HIGH_INT_RAWTHRES0_LOW_INT_RAWTHRES1_LOW_INT_RAW—
1514131211109876543210
—
ПолеБитыДоступСбросНазначение
ADC1_DONE_INT_RAW31RO0DIG ADC1 закончил преобразование
THRES0_HIGH_INT_RAW29RO0Результат канала монитора 0 выше верхнего порога
THRES1_HIGH_INT_RAW28RO0Результат канала монитора 1 выше верхнего порога
THRES0_LOW_INT_RAW27RO0Результат канала монитора 0 ниже нижнего порога
THRES1_LOW_INT_RAW26RO0Результат канала монитора 1 ниже нижнего порога

APB_SARADC_INT_ST_REG — флаги прерываний после маски разрешения

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

31302928272625242322212019181716
ADC1_DONE_INT_ST—THRES0_HIGH_INT_STTHRES1_HIGH_INT_STTHRES0_LOW_INT_STTHRES1_LOW_INT_ST—
1514131211109876543210
—
ПолеБитыДоступСбросНазначение
ADC1_DONE_INT_ST31RO0DIG ADC1 закончил преобразование
THRES0_HIGH_INT_ST29RO0Результат канала монитора 0 выше верхнего порога
THRES1_HIGH_INT_ST28RO0Результат канала монитора 1 выше верхнего порога
THRES0_LOW_INT_ST27RO0Результат канала монитора 0 ниже нижнего порога
THRES1_LOW_INT_ST26RO0Результат канала монитора 1 ниже нижнего порога

APB_SARADC_INT_CLR_REG — сброс флагов прерываний записью 1

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

31302928272625242322212019181716
ADC1_DONE_INT_CLR—THRES0_HIGH_INT_CLRTHRES1_HIGH_INT_CLRTHRES0_LOW_INT_CLRTHRES1_LOW_INT_CLR—
1514131211109876543210
—
ПолеБитыДоступСбросНазначение
ADC1_DONE_INT_CLR31WO0DIG ADC1 закончил преобразование
THRES0_HIGH_INT_CLR29WO0Результат канала монитора 0 выше верхнего порога
THRES1_HIGH_INT_CLR28WO0Результат канала монитора 1 выше верхнего порога
THRES0_LOW_INT_CLR27WO0Результат канала монитора 0 ниже нижнего порога
THRES1_LOW_INT_CLR26WO0Результат канала монитора 1 ниже нижнего порога

APB_SARADC_DMA_CONF_REG — передача через GDMA, сброс автомата

Смещение 0x006C, адрес 0x6004 006C, после сброса 0x0000 00FF. TRM: регистр 39.68.

31302928272625242322212019181716
APB_ADC_TRANSAPB_ADC_RESET_FSM—
1514131211109876543210
APB_ADC_EOF_NUM
ПолеБитыДоступСбросНазначение
APB_ADC_TRANS31R/W01 — результаты идут через GDMA
APB_ADC_RESET_FSM30R/W01 — сброс автомата DIG ADC
APB_ADC_EOF_NUM15:0R/W0x00FFЧисло выборок, после которого GDMA выдаёт DMA_IN_SUC_EOF

APB_SARADC_APB_ADC_CLKM_CONF_REG — источник и делитель такта контроллера

Смещение 0x0070, адрес 0x6004 0070, после сброса 0x0000 0004. TRM: регистр 39.69 (APB_SARADC_APB_ADC_CLKM_CONF_REG).

31302928272625242322212019181716
—CLK_SEL—CLKM_DIV_A
1514131211109876543210
CLKM_DIV_ACLKM_DIV_BCLKM_DIV_NUM
ПолеБитыДоступСбросНазначение
CLK_SEL22:21R/W0x0Такт контроллера: 0 — выключен, 1 — PLL_D2_CLK, 2 — APB_CLK
CLKM_DIV_A19:14R/W0x00Знаменатель дробной части делителя
CLKM_DIV_B13:8R/W0x00Числитель дробной части делителя
CLKM_DIV_NUM7:0R/W0x04Целая часть делителя: делитель = CLKM_DIV_NUM + CLKM_DIV_B / CLKM_DIV_A (по описанию поля в TRM)

APB_SARADC_APB_CTRL_DATE_REG — версия блока: дата ревизии аппаратуры

Смещение 0x03FC, адрес 0x6004 03FC, после сброса 0x0210 1180. TRM: регистр 39.76.

ПолеБитыДоступСброс
APB_CTRL_DATE31:0R/W0x0210 1180

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

Как расположены записи таблицы шаблонов в SAR1_PATT_TAB ESP32-S3?

По рисункам TRM для SAR1_PATT_TAB1 и TAB2 и по коду ESP-IDF (adc_ll_digi_set_pattern_table) запись k регистра (k = 0…3) занимает биты 23 − 6k…18 − 6k: запись 0 — биты 23:18, запись 3 — биты 5:0. Пример в разделе 39.3.7.5 TRM и рисунки для TAB3 и TAB4 показывают обратный порядок; страница следует ESP-IDF. Внутри записи биты 5:2 — канал, 1:0 — ослабление.

Почему цифровой контроллер ESP32-S3 не работает с ADC2?

По разделу 39.3.1 TRM контроллер DIG ADC2 у ESP32-S3 работает неправильно, описание удалено, подробности — в errata. Непрерывное сканирование возможно только на SAR ADC1 (каналы на GPIO1…GPIO10); SAR ADC2 доступен через RTC-контроллер в блоке SENS, и его делит с радиочастью арбитр (регистр ARB_CTRL).

Источники

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

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

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

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