Регистры АЦП ESP32-C3
Регистры цифрового контроллера АЦП ESP32-C3: разовое измерение одного канала, непрерывное измерение по таблице каналов с передачей через DMA, фильтры, пороговый монитор, тактирование и встроенный датчик температуры.
Содержание
- Пример на C
- Регистры блока
- APB_SARADC_CTRL_REG
- APB_SARADC_CTRL2_REG
- APB_SARADC_FILTER_CTRL1_REG
- APB_SARADC_SAR_PATT_TABn_REG
- APB_SARADC_ONETIME_SAMPLE_REG
- APB_SARADC_APB_ADC_ARB_CTRL_REG
- APB_SARADC_FILTER_CTRL0_REG
- APB_SARADC_1_DATA_STATUS_REG
- APB_SARADC_2_DATA_STATUS_REG
- APB_SARADC_THRESn_CTRL_REG
- APB_SARADC_THRES_CTRL_REG
- APB_SARADC_INT_ENA_REG
- APB_SARADC_INT_RAW_REG
- APB_SARADC_INT_ST_REG
- APB_SARADC_INT_CLR_REG
- APB_SARADC_DMA_CONF_REG
- APB_SARADC_APB_ADC_CLKM_CONF_REG
- APB_SARADC_APB_TSENS_CTRL_REG
- APB_SARADC_APB_TSENS_CTRL2_REG
- APB_SARADC_CALI_REG
- APB_SARADC_APB_CTRL_DATE_REG
У ESP32-C3 два 12-битных SAR АЦП: АЦП1 с каналами 0…4 на GPIO0…GPIO4 и АЦП2 с каналом 0 на GPIO5. Ими управляет контроллер APB_SARADC по адресу 0x6004 0000. АЦП2 делит доступ с Wi-Fi, поэтому для измерений при работающем радио берут АЦП1.
Разовое измерение настраивается в APB_SARADC_ONETIME_SAMPLE_REG: выбрать АЦП, канал и ослабление, установить ONETIME_START и дождаться флага ADC1_DONE или ADC2_DONE; результат лежит в APB_SARADC_1_DATA_STATUS_REG или 2_DATA_STATUS_REG. Непрерывное измерение идёт по таблице SAR_PATT_TAB — до восьми записей «канал и ослабление» — и складывает результаты в память через GDMA.
Ослабление 0…3 расширяет диапазон входного напряжения примерно до 0,75, 1,05, 1,3 и 2,5 В. Калибровочные константы АЦП записаны в eFuse, ESP-IDF учитывает их в схемах калибровки adc_cali (esp_adc/adc_cali.h; старый esp_adc_cal в ESP-IDF 6 удалён).
| Экземпляр | Базовый адрес |
|---|---|
| APB_SARADC | 0x6004 0000 |
Пример на C
АЦП1, канал 2 (GPIO2), ослабление 3: разовое измерение (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"
REG_SET_BIT(APB_SARADC_ONETIME_SAMPLE_REG, APB_SARADC1_ONETIME_SAMPLE);
REG_SET_FIELD(APB_SARADC_ONETIME_SAMPLE_REG, APB_SARADC_ONETIME_CHANNEL, 2);
REG_SET_FIELD(APB_SARADC_ONETIME_SAMPLE_REG, APB_SARADC_ONETIME_ATTEN, 3);
REG_WRITE(APB_SARADC_INT_CLR_REG, APB_SARADC_ADC1_DONE_INT_CLR);
REG_CLR_BIT(APB_SARADC_ONETIME_SAMPLE_REG, APB_SARADC_ONETIME_START);
REG_SET_BIT(APB_SARADC_ONETIME_SAMPLE_REG, APB_SARADC_ONETIME_START);
while (!(REG_READ(APB_SARADC_INT_RAW_REG) & APB_SARADC_ADC1_DONE_INT_RAW)) {}
uint32_t raw = REG_GET_FIELD(APB_SARADC_1_DATA_STATUS_REG, APB_SARADC_ADC1_DATA) & 0xFFF;Регистры блока
| Регистр (ESP-IDF) | Смещение | Назначение | После сброса |
|---|---|---|---|
| APB_SARADC_CTRL_REG | 0x0000 | Запуск, длина таблицы каналов, делитель такта | 0x4003 8240 |
| APB_SARADC_CTRL2_REG | 0x0004 | Таймер непрерывного измерения, инверсия данных | 0x0000 A1FE |
| APB_SARADC_FILTER_CTRL1_REG | 0x0008 | Коэффициенты фильтров | 0x0000 0000 |
| APB_SARADC_SAR_PATT_TABn_REG | 0x0014 + n · 0x0004 | Таблица каналов для непрерывного измерения, часть n | 0x0000 0000 |
| APB_SARADC_ONETIME_SAMPLE_REG | 0x0020 | Разовое измерение: АЦП, канал, ослабление, запуск | 0x1A00 0000 |
| APB_SARADC_APB_ADC_ARB_CTRL_REG | 0x0024 | Арбитр доступа к АЦП2 | 0x0000 0800 |
| APB_SARADC_FILTER_CTRL0_REG | 0x0028 | Каналы фильтров и сброс | 0x0374 0000 |
| APB_SARADC_1_DATA_STATUS_REG | 0x002C | Результат АЦП1 | 0x0000 0000 |
| APB_SARADC_2_DATA_STATUS_REG | 0x0030 | Результат АЦП2 | 0x0000 0000 |
| APB_SARADC_THRESn_CTRL_REG | 0x0034 + n · 0x0004 | Пороговый монитор n: канал и пороги | 0x0003 FFED |
| APB_SARADC_THRES_CTRL_REG | 0x003C | Включение пороговых мониторов | 0x0000 0000 |
| APB_SARADC_INT_ENA_REG | 0x0040 | Разрешение прерываний | 0x0000 0000 |
| APB_SARADC_INT_RAW_REG | 0x0044 | Необработанные флаги прерываний | 0x0000 0000 |
| APB_SARADC_INT_ST_REG | 0x0048 | Флаги прерываний после маски разрешения | 0x0000 0000 |
| APB_SARADC_INT_CLR_REG | 0x004C | Сброс флагов прерываний записью 1 | 0x0000 0000 |
| APB_SARADC_DMA_CONF_REG | 0x0050 | Передача результатов через GDMA | 0x0000 00FF |
| APB_SARADC_APB_ADC_CLKM_CONF_REG | 0x0054 | Источник и делитель такта АЦП | 0x0000 0004 |
| APB_SARADC_APB_TSENS_CTRL_REG | 0x0058 | Датчик температуры: включение и результат | 0x0001 8000 |
| APB_SARADC_APB_TSENS_CTRL2_REG | 0x005C | Датчик температуры: такт и время включения | 0x0000 0002 |
| APB_SARADC_CALI_REG | 0x0060 | Калибровка АЦП | 0x0000 8000 |
| APB_SARADC_APB_CTRL_DATE_REG | 0x03FC | Версия блока: дата ревизии аппаратуры | 0x0200 7171 |
Доступ — обозначения TRM: R/W — чтение и запись, RO — только чтение, WO — только запись, WT — запись 1 запускает действие, SS и SC — бит ставится и сбрасывается аппаратно, WTC — сбрасывается записью 1.
APB_SARADC_CTRL_REG — запуск, длина таблицы каналов, делитель такта
Смещение 0x0000, адрес 0x6004 0000, после сброса 0x4003 8240. TRM: регистр 34.1.
| 31 | 30 | 29 | 28 | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 |
| WAIT_ARB_CYCLE | — | XPD_SAR_FORCE | — | SAR_PATT_P_CLEAR | — | SAR_PATT_LEN | |||||||||
| 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| SAR_PATT_LEN | SAR_CLK_DIV | SAR_CLK_GATED | — | START | START_FORCE | ||||||||||
| Поле | Биты | Доступ | Сброс | Назначение |
|---|---|---|---|---|
| WAIT_ARB_CYCLE | 31:30 | R/W | 0x1 | |
| XPD_SAR_FORCE | 28:27 | R/W | 0x0 | Питание АЦП: 3 — включено принудительно |
| SAR_PATT_P_CLEAR | 23 | R/W | 0 | Сбросить указатель таблицы каналов |
| SAR_PATT_LEN | 17:15 | R/W | 0x7 | Число записей таблицы каналов минус 1 |
| SAR_CLK_DIV | 14:7 | R/W | 0x04 | Делитель такта SAR |
| SAR_CLK_GATED | 6 | R/W | 1 | Тактирование SAR |
| START | 1 | R/W | 0 | Запустить непрерывное измерение |
| START_FORCE | 0 | R/W | 0 | Запуск непрерывного измерения программно |
APB_SARADC_CTRL2_REG — таймер непрерывного измерения, инверсия данных
Смещение 0x0004, адрес 0x6004 0004, после сброса 0x0000 A1FE. TRM: регистр 34.2.
| 31 | 30 | 29 | 28 | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 |
| — | TIMER_EN | TIMER_TARGET | |||||||||||||
| 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| TIMER_TARGET | — | SAR2_INV | SAR1_INV | MAX_MEAS_NUM | MEAS_NUM_LIMIT | ||||||||||
| Поле | Биты | Доступ | Сброс | Назначение |
|---|---|---|---|---|
| TIMER_EN | 24 | R/W | 0 | Запускать измерения по таймеру |
| TIMER_TARGET | 23:12 | R/W | 0x00A | Период таймера в тактах АЦП |
| SAR2_INV | 10 | R/W | 0 | |
| SAR1_INV | 9 | R/W | 0 | |
| MAX_MEAS_NUM | 8:1 | R/W | 0xFF | |
| MEAS_NUM_LIMIT | 0 | R/W | 0 |
APB_SARADC_FILTER_CTRL1_REG — коэффициенты фильтров
Смещение 0x0008, адрес 0x6004 0008, после сброса 0x0000 0000. TRM: регистр 34.3.
| 31 | 30 | 29 | 28 | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 |
| FILTER_FACTOR0 | FILTER_FACTOR1 | — | |||||||||||||
| 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| — | |||||||||||||||
| Поле | Биты | Доступ | Сброс |
|---|---|---|---|
| FILTER_FACTOR0 | 31:29 | R/W | 0x0 |
| FILTER_FACTOR1 | 28:26 | R/W | 0x0 |
APB_SARADC_SAR_PATT_TABn_REG — таблица каналов для непрерывного измерения, часть n
2 копии, n = 1, 2: смещение 0x0014 + n · 0x0004, после сброса 0x0000 0000. TRM: регистр 34.4.
| Поле | Биты | Доступ | Сброс | Назначение |
|---|---|---|---|---|
| SAR_PATT_TABn | 23:0 | R/W | 0x000000 | Четыре записи таблицы по 6 бит: бит 5 — АЦП (sar_sel), биты 4:2 — канал, биты 1:0 — ослабление |
APB_SARADC_ONETIME_SAMPLE_REG — разовое измерение: АЦП, канал, ослабление, запуск
Смещение 0x0020, адрес 0x6004 0020, после сброса 0x1A00 0000. TRM: регистр 34.6.
| 31 | 30 | 29 | 28 | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 |
| APB_SARADC1_ONETIME_SAMPLE | APB_SARADC2_ONETIME_SAMPLE | ONETIME_START | ONETIME_CHANNEL | ONETIME_ATTEN | — | ||||||||||
| 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| — | |||||||||||||||
| Поле | Биты | Доступ | Сброс | Назначение |
|---|---|---|---|---|
| APB_SARADC1_ONETIME_SAMPLE | 31 | R/W | 0 | Разовое измерение на АЦП1 |
| APB_SARADC2_ONETIME_SAMPLE | 30 | R/W | 0 | Разовое измерение на АЦП2 |
| ONETIME_START | 29 | R/W | 0 | Переход из 0 в 1 запускает измерение |
| ONETIME_CHANNEL | 28:25 | R/W | 0xD | Номер канала |
| ONETIME_ATTEN | 24:23 | R/W | 0x0 | Ослабление входа 0…3 |
APB_SARADC_APB_ADC_ARB_CTRL_REG — арбитр доступа к АЦП2
Смещение 0x0024, адрес 0x6004 0024, после сброса 0x0000 0800. TRM: регистр 34.7 (APB_SARADC_APB_ADC_ARB_CTRL_REG).
| 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| — | ADC_ARB_FIX_PRIORITY | ADC_ARB_WIFI_PRIORITY | — | ADC_ARB_APB_PRIORITY | ADC_ARB_GRANT_FORCE | ADC_ARB_WIFI_FORCE | — | ADC_ARB_APB_FORCE | — | ||||||
| Поле | Биты | Доступ | Сброс |
|---|---|---|---|
| ADC_ARB_FIX_PRIORITY | 12 | R/W | 0 |
| ADC_ARB_WIFI_PRIORITY | 11:10 | R/W | 0x2 |
| ADC_ARB_APB_PRIORITY | 7:6 | R/W | 0x0 |
| ADC_ARB_GRANT_FORCE | 5 | R/W | 0 |
| ADC_ARB_WIFI_FORCE | 4 | R/W | 0 |
| ADC_ARB_APB_FORCE | 2 | R/W | 0 |
APB_SARADC_FILTER_CTRL0_REG — каналы фильтров и сброс
Смещение 0x0028, адрес 0x6004 0028, после сброса 0x0374 0000. TRM: регистр 34.8.
| 31 | 30 | 29 | 28 | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 |
| FILTER_RESET | — | FILTER_CHANNEL0 | FILTER_CHANNEL1 | — | |||||||||||
| 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| — | |||||||||||||||
| Поле | Биты | Доступ | Сброс |
|---|---|---|---|
| FILTER_RESET | 31 | R/W | 0 |
| FILTER_CHANNEL0 | 25:22 | R/W | 0xD |
| FILTER_CHANNEL1 | 21:18 | R/W | 0xD |
APB_SARADC_1_DATA_STATUS_REG — результат АЦП1
Смещение 0x002C, адрес 0x6004 002C, после сброса 0x0000 0000. TRM: регистр 34.9 (APB_SARADC_1_DATA_STATUS_REG).
| Поле | Биты | Доступ | Сброс | Назначение |
|---|---|---|---|---|
| APB_SARADC1_DATA | 16:0 | RO | 0x00000 | Результат АЦП1: 12 бит в младших разрядах |
APB_SARADC_2_DATA_STATUS_REG — результат АЦП2
Смещение 0x0030, адрес 0x6004 0030, после сброса 0x0000 0000. TRM: регистр 34.10 (APB_SARADC_2_DATA_STATUS_REG).
| Поле | Биты | Доступ | Сброс | Назначение |
|---|---|---|---|---|
| ADC2_DATA | 16:0 | RO | 0x00000 | Результат АЦП2 |
APB_SARADC_THRESn_CTRL_REG — пороговый монитор n: канал и пороги
2 копии, n = 0, 1: смещение 0x0034 + n · 0x0004, после сброса 0x0003 FFED. TRM: регистр 34.11.
| 31 | 30 | 29 | 28 | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 |
| — | THRESn_LOW | THRESn_HIGH | |||||||||||||
| 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| THRESn_HIGH | — | THRESn_CHANNEL | |||||||||||||
| Поле | Биты | Доступ | Сброс | Назначение |
|---|---|---|---|---|
| THRESn_LOW | 30:18 | R/W | 0x0000 | Нижний порог |
| THRESn_HIGH | 17:5 | R/W | 0x1FFF | Верхний порог |
| THRESn_CHANNEL | 3:0 | R/W | 0xD | Канал, который контролирует монитор |
APB_SARADC_THRES_CTRL_REG — включение пороговых мониторов
Смещение 0x003C, адрес 0x6004 003C, после сброса 0x0000 0000. TRM: регистр 34.13.
| 31 | 30 | 29 | 28 | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 |
| THRES0_EN | THRES1_EN | — | THRES_ALL_EN | — | |||||||||||
| 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| — | |||||||||||||||
| Поле | Биты | Доступ | Сброс | Назначение |
|---|---|---|---|---|
| THRES0_EN | 31 | R/W | 0 | Включить монитор 0 |
| THRES1_EN | 30 | R/W | 0 | Включить монитор 1 |
| THRES_ALL_EN | 27 | R/W | 0 |
APB_SARADC_INT_ENA_REG — разрешение прерываний
Смещение 0x0040, адрес 0x6004 0040, после сброса 0x0000 0000. TRM: регистр 34.14.
| 31 | 30 | 29 | 28 | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 |
| ADC1_DONE_INT_ENA | ADC2_DONE_INT_ENA | THRES0_HIGH_INT_ENA | THRES1_HIGH_INT_ENA | THRES0_LOW_INT_ENA | THRES1_LOW_INT_ENA | — | |||||||||
| 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| — | |||||||||||||||
| Поле | Биты | Доступ | Сброс | Назначение |
|---|---|---|---|---|
| ADC1_DONE_INT_ENA | 31 | R/W | 0 | АЦП1 закончил преобразование |
| ADC2_DONE_INT_ENA | 30 | R/W | 0 | АЦП2 закончил преобразование |
| THRES0_HIGH_INT_ENA | 29 | R/W | 0 | Результат канала монитора 0 выше верхнего порога |
| THRES1_HIGH_INT_ENA | 28 | R/W | 0 | Результат канала монитора 1 выше верхнего порога |
| THRES0_LOW_INT_ENA | 27 | R/W | 0 | Результат канала монитора 0 ниже нижнего порога |
| THRES1_LOW_INT_ENA | 26 | R/W | 0 | Результат канала монитора 1 ниже нижнего порога |
APB_SARADC_INT_RAW_REG — необработанные флаги прерываний
Смещение 0x0044, адрес 0x6004 0044, после сброса 0x0000 0000. TRM: регистр 34.15.
| 31 | 30 | 29 | 28 | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 |
| ADC1_DONE_INT_RAW | ADC2_DONE_INT_RAW | THRES0_HIGH_INT_RAW | THRES1_HIGH_INT_RAW | THRES0_LOW_INT_RAW | THRES1_LOW_INT_RAW | — | |||||||||
| 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| — | |||||||||||||||
| Поле | Биты | Доступ | Сброс | Назначение |
|---|---|---|---|---|
| ADC1_DONE_INT_RAW | 31 | RO | 0 | АЦП1 закончил преобразование |
| ADC2_DONE_INT_RAW | 30 | RO | 0 | АЦП2 закончил преобразование |
| THRES0_HIGH_INT_RAW | 29 | RO | 0 | Результат канала монитора 0 выше верхнего порога |
| THRES1_HIGH_INT_RAW | 28 | RO | 0 | Результат канала монитора 1 выше верхнего порога |
| THRES0_LOW_INT_RAW | 27 | RO | 0 | Результат канала монитора 0 ниже нижнего порога |
| THRES1_LOW_INT_RAW | 26 | RO | 0 | Результат канала монитора 1 ниже нижнего порога |
APB_SARADC_INT_ST_REG — флаги прерываний после маски разрешения
Смещение 0x0048, адрес 0x6004 0048, после сброса 0x0000 0000. TRM: регистр 34.16.
| 31 | 30 | 29 | 28 | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 |
| ADC1_DONE_INT_ST | ADC2_DONE_INT_ST | THRES0_HIGH_INT_ST | THRES1_HIGH_INT_ST | THRES0_LOW_INT_ST | THRES1_LOW_INT_ST | — | |||||||||
| 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| — | |||||||||||||||
| Поле | Биты | Доступ | Сброс | Назначение |
|---|---|---|---|---|
| ADC1_DONE_INT_ST | 31 | RO | 0 | АЦП1 закончил преобразование |
| ADC2_DONE_INT_ST | 30 | RO | 0 | АЦП2 закончил преобразование |
| THRES0_HIGH_INT_ST | 29 | RO | 0 | Результат канала монитора 0 выше верхнего порога |
| THRES1_HIGH_INT_ST | 28 | RO | 0 | Результат канала монитора 1 выше верхнего порога |
| THRES0_LOW_INT_ST | 27 | RO | 0 | Результат канала монитора 0 ниже нижнего порога |
| THRES1_LOW_INT_ST | 26 | RO | 0 | Результат канала монитора 1 ниже нижнего порога |
APB_SARADC_INT_CLR_REG — сброс флагов прерываний записью 1
Смещение 0x004C, адрес 0x6004 004C, после сброса 0x0000 0000. TRM: регистр 34.17.
| 31 | 30 | 29 | 28 | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 |
| ADC1_DONE_INT_CLR | ADC2_DONE_INT_CLR | THRES0_HIGH_INT_CLR | THRES1_HIGH_INT_CLR | THRES0_LOW_INT_CLR | THRES1_LOW_INT_CLR | — | |||||||||
| 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| — | |||||||||||||||
| Поле | Биты | Доступ | Сброс | Назначение |
|---|---|---|---|---|
| ADC1_DONE_INT_CLR | 31 | WO | 0 | АЦП1 закончил преобразование |
| ADC2_DONE_INT_CLR | 30 | WO | 0 | АЦП2 закончил преобразование |
| THRES0_HIGH_INT_CLR | 29 | WO | 0 | Результат канала монитора 0 выше верхнего порога |
| THRES1_HIGH_INT_CLR | 28 | WO | 0 | Результат канала монитора 1 выше верхнего порога |
| THRES0_LOW_INT_CLR | 27 | WO | 0 | Результат канала монитора 0 ниже нижнего порога |
| THRES1_LOW_INT_CLR | 26 | WO | 0 | Результат канала монитора 1 ниже нижнего порога |
APB_SARADC_DMA_CONF_REG — передача результатов через GDMA
Смещение 0x0050, адрес 0x6004 0050, после сброса 0x0000 00FF. TRM: регистр 34.18.
| 31 | 30 | 29 | 28 | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 |
| APB_ADC_TRANS | APB_ADC_RESET_FSM | — | |||||||||||||
| 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| APB_ADC_EOF_NUM | |||||||||||||||
| Поле | Биты | Доступ | Сброс | Назначение |
|---|---|---|---|---|
| APB_ADC_TRANS | 31 | R/W | 0 | Передавать результаты через GDMA |
| APB_ADC_RESET_FSM | 30 | R/W | 0 | Сброс автомата контроллера |
| APB_ADC_EOF_NUM | 15:0 | R/W | 0x00FF | Число результатов до события конца пакета GDMA |
APB_SARADC_APB_ADC_CLKM_CONF_REG — источник и делитель такта АЦП
Смещение 0x0054, адрес 0x6004 0054, после сброса 0x0000 0004. TRM: регистр 34.19 (APB_SARADC_APB_ADC_CLKM_CONF_REG).
| 31 | 30 | 29 | 28 | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 |
| — | CLK_SEL | CLK_EN | CLKM_DIV_A | ||||||||||||
| 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| CLKM_DIV_A | CLKM_DIV_B | CLKM_DIV_NUM | |||||||||||||
| Поле | Биты | Доступ | Сброс | Назначение |
|---|---|---|---|---|
| CLK_SEL | 22:21 | R/W | 0x0 | Источник такта АЦП |
| CLK_EN | 20 | R/W | 0 | Включить такт АЦП |
| CLKM_DIV_A | 19:14 | R/W | 0x00 | |
| CLKM_DIV_B | 13:8 | R/W | 0x00 | |
| CLKM_DIV_NUM | 7:0 | R/W | 0x04 | Целая часть делителя такта АЦП |
APB_SARADC_APB_TSENS_CTRL_REG — датчик температуры: включение и результат
Смещение 0x0058, адрес 0x6004 0058, после сброса 0x0001 8000. TRM: регистр 34.20.
| 31 | 30 | 29 | 28 | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 |
| — | TSENS_PU | TSENS_CLK_DIV | |||||||||||||
| 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| TSENS_CLK_DIV | TSENS_IN_INV | — | TSENS_OUT | ||||||||||||
| Поле | Биты | Доступ | Сброс | Назначение |
|---|---|---|---|---|
| TSENS_PU | 22 | R/W | 0 | Включить датчик температуры |
| TSENS_CLK_DIV | 21:14 | R/W | 0x06 | Делитель такта датчика |
| TSENS_IN_INV | 13 | R/W | 0 | |
| TSENS_OUT | 7:0 | RO | 0x00 | Код датчика температуры |
APB_SARADC_APB_TSENS_CTRL2_REG — датчик температуры: такт и время включения
Смещение 0x005C, адрес 0x6004 005C, после сброса 0x0000 0002. TRM: регистр 34.21 (APB_SARADC_APB_TSENS_CTRL2_REG).
| 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| TSENS_CLK_SEL | — | TSENS_XPD_WAIT | |||||||||||||
| Поле | Биты | Доступ | Сброс |
|---|---|---|---|
| TSENS_CLK_SEL | 15 | R/W | 0 |
| TSENS_XPD_WAIT | 11:0 | R/W | 0x002 |
APB_SARADC_CALI_REG — калибровка АЦП
Смещение 0x0060, адрес 0x6004 0060, после сброса 0x0000 8000. TRM: регистр 34.22.
| Поле | Биты | Доступ | Сброс |
|---|---|---|---|
| CALI_CFG | 16:0 | R/W | 0x08000 |
APB_SARADC_APB_CTRL_DATE_REG — версия блока: дата ревизии аппаратуры
Смещение 0x03FC, адрес 0x6004 03FC, после сброса 0x0200 7171. TRM: регистр 34.23 (APB_SARADC_APB_CTRL_DATE_REG).
| Поле | Биты | Доступ | Сброс |
|---|---|---|---|
| DATE | 31:0 | R/W | 0x0200 7171 |
Частые вопросы
Как сделать разовое измерение АЦП ESP32-C3 через регистры?
В APB_SARADC_ONETIME_SAMPLE_REG установить APB_SARADC1_ONETIME_SAMPLE, записать канал в ONETIME_CHANNEL и ослабление в ONETIME_ATTEN, затем записать 1 в ONETIME_START, дождаться флага ADC1_DONE_INT_RAW в APB_SARADC_INT_RAW_REG и прочитать 12-битный результат из APB_SARADC_1_DATA_STATUS_REG. Перед запуском ONETIME_START сбрасывают в 0.
Где находятся регистры датчика температуры ESP32-C3?
В том же блоке APB_SARADC: APB_SARADC_APB_TSENS_CTRL_REG включает датчик битом TSENS_PU и отдаёт 8-битный код в TSENS_OUT, APB_SARADC_APB_TSENS_CTRL2_REG выбирает такт и время включения. Перевод кода в градусы с поправкой из eFuse делает драйвер temperature_sensor ESP-IDF.
Источники
- Espressif. ESP32-C3 Technical Reference Manual, версия 1.4 — глава 34: таблица Register Summary и рисунки регистров — смещения, поля, тип доступа и значения после сброса
- Espressif. SVD svd/esp32c3.svd, версия 18 (espressif/svd, коммит be20aa1) — базовые адреса периферии, список регистров и полей; лицензия Apache-2.0
- Espressif. ESP-IDF v6.1: заголовки components/soc/esp32c3/register/soc/*_reg.h (коммит fff9895) — имена макросов регистров и полей, сверка положения полей и значений по умолчанию; лицензия Apache-2.0 OR MIT
Нашли ошибку в регистрах?
Другие регистры ESP32-C3
- Все регистры ESP32-C3Блоки периферии и базовые адреса
- GPIO — выводы общего назначения и матрица GPIOGPIO_BT_SELECT_REG, GPIO_OUT_REG, GPIO_OUT_W1TS_REG, GPIO_OUT_W1TC_REG
- IO MUX — мультиплексор функций и электрические настройки выводовPIN_CTRL, IO_MUX_GPIOn_REG, IO_MUX_DATE_REG
- UART — универсальный асинхронный приёмопередатчикUART_FIFO_REG, UART_INT_RAW_REG, UART_INT_ST_REG, UART_INT_ENA_REG
- SPI — контроллер SPI общего назначения GP-SPI2SPI_CMD_REG, SPI_ADDR_REG, SPI_CTRL_REG, SPI_CLOCK_REG
- I2C — контроллер шины I2CI2C_SCL_LOW_PERIOD_REG, I2C_CTR_REG, I2C_SR_REG, I2C_TO_REG
- LEDC — контроллер ШИМ для светодиодов и не толькоLEDC_LSCHn_CONF0_REG, LEDC_LSCHn_HPOINT_REG, LEDC_LSCHn_DUTY_REG, LEDC_LSCHn_CONF1_REG
- TIMG — группа таймеров: таймер общего назначения и сторожTIMG_T0CONFIG_REG, TIMG_T0LO_REG, TIMG_T0HI_REG, TIMG_T0UPDATE_REG
- RMT — контроллер инфракрасного пульта и импульсных протоколовRMT_CHnDATA_REG, RMT_CHnCONF0_REG, RMT_CHnCONF0_REG, RMT_CHnCONF1_REG
- SYSTIMER — системный таймерSYSTIMER_CONF_REG, SYSTIMER_UNITn_OP_REG, SYSTIMER_UNITn_LOAD_HI_REG, SYSTIMER_UNITn_LOAD_LO_REG
- RTC_CNTL — управление питанием, сном и RTCRTC_CNTL_OPTIONS0_REG, RTC_CNTL_SLP_TIMER0_REG, RTC_CNTL_SLP_TIMER1_REG, RTC_CNTL_TIME_UPDATE_REG
- USB Serial/JTAG — встроенный USB-порт: виртуальный COM-порт и JTAGUSB_SERIAL_JTAG_EP1_REG, USB_SERIAL_JTAG_EP1_CONF_REG, USB_SERIAL_JTAG_INT_RAW_REG, USB_SERIAL_JTAG_INT_ST_REG
- eFuse — однократно программируемая память настроек и ключейEFUSE_RD_WR_DIS_REG, EFUSE_RD_REPEAT_DATA0_REG, EFUSE_RD_REPEAT_DATA1_REG, EFUSE_RD_REPEAT_DATA2_REG
- INTERRUPT — матрица прерыванийINTERRUPT_CORE0_PWR_INTR_MAP_REG, INTERRUPT_CORE0_I2C_MST_INT_MAP_REG, INTERRUPT_CORE0_SLCn_INTR_MAP_REG, INTERRUPT_CORE0_APB_CTRL_INTR_MAP_REG