Регистры LEDC ESP32-S3
Регистры LEDC ESP32-S3: восемь каналов ШИМ и четыре таймера с дробным 18-битным делителем, разрядность до 14 бит, скважность с четырьмя дробными битами, аппаратное плавное изменение яркости и прерывания переполнения.
LEDC по адресу 0x6001 9000 — генератор ШИМ для яркости светодиодов, сервоприводов и звука. Каждый из восьми каналов берёт счётчик одного из четырёх таймеров (поле TIMER_SEL_CHn) и ставит выход в 1, когда счётчик равен HPOINT_CHn, и в 0 — когда равен HPOINT_CHn + DUTY_CHn[18:4]. Тактирование блока включает бит SYSTEM_LEDC_CLK_EN регистра SYSTEM_PERIP_CLK_EN0_REG.
Таймеры тактируются общим LEDC_CLK — APB_CLK, RC_FAST_CLK или XTAL_CLK по полю APB_CLK_SEL регистра LEDC_CONF_REG (1, 2 и 3). Делитель CLK_DIV_TIMERx дробный: биты 21:12 регистра — целая часть A, биты 11:4 — дробь B, делитель = A + B / 256. Частота ШИМ = f_LEDC_CLK / (делитель · 2^DUTY_RES).
Новые значения HPOINT, DUTY, TIMER_SEL, SIG_OUT_EN и настройки плавного изменения канала применяются после записи 1 в PARA_UP_CHn, делителя и разрядности таймера — после записи 1 в TIMERx_PARA_UP; оба бита сбрасываются сами (раздел 35.3 TRM).
| Экземпляр | Базовый адрес |
|---|---|
| LEDC | 0x6001 9000 |
Пример на C
Канал 0: новая скважность 50 % при 13 битах (soc/ledc_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/ledc_reg.h"
uint32_t duty = 1 << 12; // 4096 из 8192
REG_WRITE(LEDC_LSCH0_DUTY_REG, duty << 4); // 4 дробных бита
REG_SET_BIT(LEDC_LSCH0_CONF0_REG, LEDC_PARA_UP_LSCH0); // обновить настройки каналаРегистры блока
| Регистр (ESP-IDF) | Смещение | Назначение | После сброса |
|---|---|---|---|
| LEDC_LSCHn_CONF0_REG | 0x0000 + n · 0x0014 | Канал n: таймер, выход, обновление настроек, счёт периодов | 0x0000 0000 |
| LEDC_LSCHn_HPOINT_REG | 0x0004 + n · 0x0014 | Канал n: значение счётчика, при котором выход ставится в 1 | 0x0000 0000 |
| LEDC_LSCHn_DUTY_REG | 0x0008 + n · 0x0014 | Канал n: скважность | 0x0000 0000 |
| LEDC_LSCHn_CONF1_REG | 0x000C + n · 0x0014 | Канал n: плавное изменение скважности | 0x4000 0000 |
| LEDC_LSCHn_DUTY_R_REG | 0x0010 + n · 0x0014 | Канал n: текущая скважность | 0x0000 0000 |
| LEDC_LSTIMERn_CONF_REG | 0x00A0 + n · 0x0008 | Таймер n: делитель, разрядность, сброс и пауза | 0x0080 0000 |
| LEDC_LSTIMERn_VALUE_REG | 0x00A4 + n · 0x0008 | Таймер n: текущее значение счётчика | 0x0000 0000 |
| LEDC_INT_RAW_REG | 0x00C0 | Необработанные флаги прерываний | 0x0000 0000 |
| LEDC_INT_ST_REG | 0x00C4 | Флаги прерываний после маски разрешения | 0x0000 0000 |
| LEDC_INT_ENA_REG | 0x00C8 | Разрешение прерываний | 0x0000 0000 |
| LEDC_INT_CLR_REG | 0x00CC | Сброс флагов прерываний записью 1 | 0x0000 0000 |
| LEDC_CONF_REG | 0x00D0 | Источник такта LEDC | 0x0000 0000 |
| LEDC_DATE_REG | 0x00FC | Версия блока: дата ревизии аппаратуры | 0x1907 2601 |
Доступ — обозначения TRM: R/W — чтение и запись, RO — только чтение, WO — только запись, WT — запись 1 запускает действие, SS и SC — бит ставится и сбрасывается аппаратно, WTC — сбрасывается записью 1.
LEDC_LSCHn_CONF0_REG — канал n: таймер, выход, обновление настроек, счёт периодов
8 копий, n = 0…7: смещение 0x0000 + n · 0x0014, после сброса 0x0000 0000. TRM: регистр 35.1.
| 31 | 30 | 29 | 28 | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 |
| — | OVF_CNT_RESET_ST_CHn | OVF_CNT_RESET_CHn | |||||||||||||
| 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| OVF_CNT_EN_CHn | OVF_NUM_CHn | PARA_UP_CHn | IDLE_LV_CHn | SIG_OUT_EN_CHn | TIMER_SEL_CHn | ||||||||||
| Поле | Биты | Доступ | Сброс | Назначение |
|---|---|---|---|---|
| OVF_CNT_RESET_ST_CHn | 17 | RO | 0 | Состояние сброса счётчика периодов |
| OVF_CNT_RESET_CHn | 16 | WO | 0 | Запись 1 сбрасывает счётчик переполнений канала |
| OVF_CNT_EN_CHn | 15 | R/W | 0 | 1 — считать переполнения таймера |
| OVF_NUM_CHn | 14:5 | R/W | 0x000 | Прерывание OVF_CNT после OVF_NUM_CHn + 1 переполнений |
| PARA_UP_CHn | 4 | WO | 0 | Запись 1 применяет HPOINT, DUTY, TIMER_SEL, SIG_OUT_EN и плавное изменение |
| IDLE_LV_CHn | 3 | R/W | 0 | Уровень выхода, когда SIG_OUT_EN_CHn = 0 |
| SIG_OUT_EN_CHn | 2 | R/W | 0 | 1 — включить выход канала |
| TIMER_SEL_CHn | 1:0 | R/W | 0x0 | Таймер канала: 0…3 |
LEDC_LSCHn_HPOINT_REG — канал n: значение счётчика, при котором выход ставится в 1
8 копий, n = 0…7: смещение 0x0004 + n · 0x0014, после сброса 0x0000 0000. TRM: регистр 35.4.
| Поле | Биты | Доступ | Сброс | Назначение |
|---|---|---|---|---|
| HPOINT_CHn | 13:0 | R/W | 0x0000 | Выход ставится в 1, когда счётчик таймера равен этому значению |
LEDC_LSCHn_DUTY_REG — канал n: скважность
8 копий, n = 0…7: смещение 0x0008 + n · 0x0014, после сброса 0x0000 0000. TRM: регистр 35.5.
| Поле | Биты | Доступ | Сброс | Назначение |
|---|---|---|---|---|
| DUTY_CHn | 18:0 | R/W | 0x00000 | Биты 18:4 — длительность единицы в тактах счётчика, биты 3:0 — дробная часть: столько периодов из 16 на такт длиннее |
LEDC_LSCHn_CONF1_REG — канал n: плавное изменение скважности
8 копий, n = 0…7: смещение 0x000C + n · 0x0014, после сброса 0x4000 0000. TRM: регистр 35.2.
В версии 1.6 TRM описание DUTY_START_CHn изменено: теперь это включение плавного изменения. Значение вступает в силу вместе с остальными полями канала после записи 1 в PARA_UP_CHn.
| 31 | 30 | 29 | 28 | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 |
| DUTY_START_CHn | DUTY_INC_CHn | DUTY_NUM_CHn | DUTY_CYCLE_CHn | ||||||||||||
| 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| DUTY_CYCLE_CHn | DUTY_SCALE_CHn | ||||||||||||||
| Поле | Биты | Доступ | Сброс | Назначение |
|---|---|---|---|---|
| DUTY_START_CHn | 31 | R/W | 0 | 1 — включить плавное изменение скважности |
| DUTY_INC_CHn | 30 | R/W | 1 | Направление плавного изменения: 1 — увеличивать, 0 — уменьшать |
| DUTY_NUM_CHn | 29:20 | R/W | 0x000 | Число шагов плавного изменения |
| DUTY_CYCLE_CHn | 19:10 | R/W | 0x000 | Шаг делается раз в столько переполнений счётчика |
| DUTY_SCALE_CHn | 9:0 | R/W | 0x000 | Величина одного шага |
LEDC_LSCHn_DUTY_R_REG — канал n: текущая скважность
8 копий, n = 0…7: смещение 0x0010 + n · 0x0014, после сброса 0x0000 0000. TRM: регистр 35.6.
| Поле | Биты | Доступ | Сброс | Назначение |
|---|---|---|---|---|
| DUTY_R_CHn | 18:0 | RO | 0x00000 | Текущая скважность канала |
LEDC_LSTIMERn_CONF_REG — таймер n: делитель, разрядность, сброс и пауза
4 копии, n = 0…3: смещение 0x00A0 + n · 0x0008, после сброса 0x0080 0000. TRM: регистр 35.7.
| 31 | 30 | 29 | 28 | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 |
| — | TIMERn_PARA_UP | — | TIMERn_RST | TIMERn_PAUSE | CLK_DIV_TIMERn | ||||||||||
| 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| CLK_DIV_TIMERn | TIMERn_DUTY_RES | ||||||||||||||
| Поле | Биты | Доступ | Сброс | Назначение |
|---|---|---|---|---|
| TIMERn_PARA_UP | 25 | WO | 0 | Запись 1 применяет делитель и разрядность со следующего переполнения |
| TIMERn_RST | 23 | R/W | 1 | 1 — сбросить счётчик в 0 и держать |
| TIMERn_PAUSE | 22 | R/W | 0 | 1 — остановить счётчик |
| CLK_DIV_TIMERn | 21:4 | R/W | 0x00000 | Делитель: биты 21:12 — целая часть A, биты 11:4 — дробь B / 256 |
| TIMERn_DUTY_RES | 3:0 | R/W | 0x0 | Разрядность: счётчик идёт до 2^DUTY_RES − 1, не больше 14 бит |
LEDC_LSTIMERn_VALUE_REG — таймер n: текущее значение счётчика
4 копии, n = 0…3: смещение 0x00A4 + n · 0x0008, после сброса 0x0000 0000. TRM: регистр 35.8.
| Поле | Биты | Доступ | Сброс | Назначение |
|---|---|---|---|---|
| TIMERn_CNT | 13:0 | RO | 0x0000 | Текущее значение 14-битного счётчика |
LEDC_INT_RAW_REG — необработанные флаги прерываний
Смещение 0x00C0, адрес 0x6001 90C0, после сброса 0x0000 0000. TRM: регистр 35.9.
| Поле | Биты | Доступ | Сброс | Назначение |
|---|---|---|---|---|
| OVF_CNT_CH7_INT_RAW | 19 | R/W | 0 | Канал 7: таймер переполнился OVF_NUM_CH7 + 1 раз |
| OVF_CNT_CH6_INT_RAW | 18 | R/W | 0 | Канал 6: таймер переполнился OVF_NUM_CH6 + 1 раз |
| OVF_CNT_CH5_INT_RAW | 17 | R/W | 0 | Канал 5: таймер переполнился OVF_NUM_CH5 + 1 раз |
| OVF_CNT_CH4_INT_RAW | 16 | R/W | 0 | Канал 4: таймер переполнился OVF_NUM_CH4 + 1 раз |
| OVF_CNT_CH3_INT_RAW | 15 | R/W | 0 | Канал 3: таймер переполнился OVF_NUM_CH3 + 1 раз |
| OVF_CNT_CH2_INT_RAW | 14 | R/W | 0 | Канал 2: таймер переполнился OVF_NUM_CH2 + 1 раз |
| OVF_CNT_CH1_INT_RAW | 13 | R/W | 0 | Канал 1: таймер переполнился OVF_NUM_CH1 + 1 раз |
| OVF_CNT_CH0_INT_RAW | 12 | R/W | 0 | Канал 0: таймер переполнился OVF_NUM_CH0 + 1 раз |
| DUTY_CHNG_END_CH7_INT_RAW | 11 | R/W | 0 | Канал 7 закончил плавное изменение скважности |
| DUTY_CHNG_END_CH6_INT_RAW | 10 | R/W | 0 | Канал 6 закончил плавное изменение скважности |
| DUTY_CHNG_END_CH5_INT_RAW | 9 | R/W | 0 | Канал 5 закончил плавное изменение скважности |
| DUTY_CHNG_END_CH4_INT_RAW | 8 | R/W | 0 | Канал 4 закончил плавное изменение скважности |
| DUTY_CHNG_END_CH3_INT_RAW | 7 | R/W | 0 | Канал 3 закончил плавное изменение скважности |
| DUTY_CHNG_END_CH2_INT_RAW | 6 | R/W | 0 | Канал 2 закончил плавное изменение скважности |
| DUTY_CHNG_END_CH1_INT_RAW | 5 | R/W | 0 | Канал 1 закончил плавное изменение скважности |
| DUTY_CHNG_END_CH0_INT_RAW | 4 | R/W | 0 | Канал 0 закончил плавное изменение скважности |
| TIMER3_OVF_INT_RAW | 3 | R/W | 0 | Счётчик таймера 3 дошёл до наибольшего значения |
| TIMER2_OVF_INT_RAW | 2 | R/W | 0 | Счётчик таймера 2 дошёл до наибольшего значения |
| TIMER1_OVF_INT_RAW | 1 | R/W | 0 | Счётчик таймера 1 дошёл до наибольшего значения |
| TIMER0_OVF_INT_RAW | 0 | R/W | 0 | Счётчик таймера 0 дошёл до наибольшего значения |
LEDC_INT_ST_REG — флаги прерываний после маски разрешения
Смещение 0x00C4, адрес 0x6001 90C4, после сброса 0x0000 0000. TRM: регистр 35.10.
| Поле | Биты | Доступ | Сброс | Назначение |
|---|---|---|---|---|
| OVF_CNT_CH7_INT_ST | 19 | RO | 0 | Канал 7: таймер переполнился OVF_NUM_CH7 + 1 раз |
| OVF_CNT_CH6_INT_ST | 18 | RO | 0 | Канал 6: таймер переполнился OVF_NUM_CH6 + 1 раз |
| OVF_CNT_CH5_INT_ST | 17 | RO | 0 | Канал 5: таймер переполнился OVF_NUM_CH5 + 1 раз |
| OVF_CNT_CH4_INT_ST | 16 | RO | 0 | Канал 4: таймер переполнился OVF_NUM_CH4 + 1 раз |
| OVF_CNT_CH3_INT_ST | 15 | RO | 0 | Канал 3: таймер переполнился OVF_NUM_CH3 + 1 раз |
| OVF_CNT_CH2_INT_ST | 14 | RO | 0 | Канал 2: таймер переполнился OVF_NUM_CH2 + 1 раз |
| OVF_CNT_CH1_INT_ST | 13 | RO | 0 | Канал 1: таймер переполнился OVF_NUM_CH1 + 1 раз |
| OVF_CNT_CH0_INT_ST | 12 | RO | 0 | Канал 0: таймер переполнился OVF_NUM_CH0 + 1 раз |
| DUTY_CHNG_END_CH7_INT_ST | 11 | RO | 0 | Канал 7 закончил плавное изменение скважности |
| DUTY_CHNG_END_CH6_INT_ST | 10 | RO | 0 | Канал 6 закончил плавное изменение скважности |
| DUTY_CHNG_END_CH5_INT_ST | 9 | RO | 0 | Канал 5 закончил плавное изменение скважности |
| DUTY_CHNG_END_CH4_INT_ST | 8 | RO | 0 | Канал 4 закончил плавное изменение скважности |
| DUTY_CHNG_END_CH3_INT_ST | 7 | RO | 0 | Канал 3 закончил плавное изменение скважности |
| DUTY_CHNG_END_CH2_INT_ST | 6 | RO | 0 | Канал 2 закончил плавное изменение скважности |
| DUTY_CHNG_END_CH1_INT_ST | 5 | RO | 0 | Канал 1 закончил плавное изменение скважности |
| DUTY_CHNG_END_CH0_INT_ST | 4 | RO | 0 | Канал 0 закончил плавное изменение скважности |
| TIMER3_OVF_INT_ST | 3 | RO | 0 | Счётчик таймера 3 дошёл до наибольшего значения |
| TIMER2_OVF_INT_ST | 2 | RO | 0 | Счётчик таймера 2 дошёл до наибольшего значения |
| TIMER1_OVF_INT_ST | 1 | RO | 0 | Счётчик таймера 1 дошёл до наибольшего значения |
| TIMER0_OVF_INT_ST | 0 | RO | 0 | Счётчик таймера 0 дошёл до наибольшего значения |
LEDC_INT_ENA_REG — разрешение прерываний
Смещение 0x00C8, адрес 0x6001 90C8, после сброса 0x0000 0000. TRM: регистр 35.11.
| Поле | Биты | Доступ | Сброс | Назначение |
|---|---|---|---|---|
| OVF_CNT_CH7_INT_ENA | 19 | R/W | 0 | Канал 7: таймер переполнился OVF_NUM_CH7 + 1 раз |
| OVF_CNT_CH6_INT_ENA | 18 | R/W | 0 | Канал 6: таймер переполнился OVF_NUM_CH6 + 1 раз |
| OVF_CNT_CH5_INT_ENA | 17 | R/W | 0 | Канал 5: таймер переполнился OVF_NUM_CH5 + 1 раз |
| OVF_CNT_CH4_INT_ENA | 16 | R/W | 0 | Канал 4: таймер переполнился OVF_NUM_CH4 + 1 раз |
| OVF_CNT_CH3_INT_ENA | 15 | R/W | 0 | Канал 3: таймер переполнился OVF_NUM_CH3 + 1 раз |
| OVF_CNT_CH2_INT_ENA | 14 | R/W | 0 | Канал 2: таймер переполнился OVF_NUM_CH2 + 1 раз |
| OVF_CNT_CH1_INT_ENA | 13 | R/W | 0 | Канал 1: таймер переполнился OVF_NUM_CH1 + 1 раз |
| OVF_CNT_CH0_INT_ENA | 12 | R/W | 0 | Канал 0: таймер переполнился OVF_NUM_CH0 + 1 раз |
| DUTY_CHNG_END_CH7_INT_ENA | 11 | R/W | 0 | Канал 7 закончил плавное изменение скважности |
| DUTY_CHNG_END_CH6_INT_ENA | 10 | R/W | 0 | Канал 6 закончил плавное изменение скважности |
| DUTY_CHNG_END_CH5_INT_ENA | 9 | R/W | 0 | Канал 5 закончил плавное изменение скважности |
| DUTY_CHNG_END_CH4_INT_ENA | 8 | R/W | 0 | Канал 4 закончил плавное изменение скважности |
| DUTY_CHNG_END_CH3_INT_ENA | 7 | R/W | 0 | Канал 3 закончил плавное изменение скважности |
| DUTY_CHNG_END_CH2_INT_ENA | 6 | R/W | 0 | Канал 2 закончил плавное изменение скважности |
| DUTY_CHNG_END_CH1_INT_ENA | 5 | R/W | 0 | Канал 1 закончил плавное изменение скважности |
| DUTY_CHNG_END_CH0_INT_ENA | 4 | R/W | 0 | Канал 0 закончил плавное изменение скважности |
| TIMER3_OVF_INT_ENA | 3 | R/W | 0 | Счётчик таймера 3 дошёл до наибольшего значения |
| TIMER2_OVF_INT_ENA | 2 | R/W | 0 | Счётчик таймера 2 дошёл до наибольшего значения |
| TIMER1_OVF_INT_ENA | 1 | R/W | 0 | Счётчик таймера 1 дошёл до наибольшего значения |
| TIMER0_OVF_INT_ENA | 0 | R/W | 0 | Счётчик таймера 0 дошёл до наибольшего значения |
LEDC_INT_CLR_REG — сброс флагов прерываний записью 1
Смещение 0x00CC, адрес 0x6001 90CC, после сброса 0x0000 0000. TRM: регистр 35.12.
| Поле | Биты | Доступ | Сброс | Назначение |
|---|---|---|---|---|
| OVF_CNT_CH7_INT_CLR | 19 | WO | 0 | Канал 7: таймер переполнился OVF_NUM_CH7 + 1 раз |
| OVF_CNT_CH6_INT_CLR | 18 | WO | 0 | Канал 6: таймер переполнился OVF_NUM_CH6 + 1 раз |
| OVF_CNT_CH5_INT_CLR | 17 | WO | 0 | Канал 5: таймер переполнился OVF_NUM_CH5 + 1 раз |
| OVF_CNT_CH4_INT_CLR | 16 | WO | 0 | Канал 4: таймер переполнился OVF_NUM_CH4 + 1 раз |
| OVF_CNT_CH3_INT_CLR | 15 | WO | 0 | Канал 3: таймер переполнился OVF_NUM_CH3 + 1 раз |
| OVF_CNT_CH2_INT_CLR | 14 | WO | 0 | Канал 2: таймер переполнился OVF_NUM_CH2 + 1 раз |
| OVF_CNT_CH1_INT_CLR | 13 | WO | 0 | Канал 1: таймер переполнился OVF_NUM_CH1 + 1 раз |
| OVF_CNT_CH0_INT_CLR | 12 | WO | 0 | Канал 0: таймер переполнился OVF_NUM_CH0 + 1 раз |
| DUTY_CHNG_END_CH7_INT_CLR | 11 | WO | 0 | Канал 7 закончил плавное изменение скважности |
| DUTY_CHNG_END_CH6_INT_CLR | 10 | WO | 0 | Канал 6 закончил плавное изменение скважности |
| DUTY_CHNG_END_CH5_INT_CLR | 9 | WO | 0 | Канал 5 закончил плавное изменение скважности |
| DUTY_CHNG_END_CH4_INT_CLR | 8 | WO | 0 | Канал 4 закончил плавное изменение скважности |
| DUTY_CHNG_END_CH3_INT_CLR | 7 | WO | 0 | Канал 3 закончил плавное изменение скважности |
| DUTY_CHNG_END_CH2_INT_CLR | 6 | WO | 0 | Канал 2 закончил плавное изменение скважности |
| DUTY_CHNG_END_CH1_INT_CLR | 5 | WO | 0 | Канал 1 закончил плавное изменение скважности |
| DUTY_CHNG_END_CH0_INT_CLR | 4 | WO | 0 | Канал 0 закончил плавное изменение скважности |
| TIMER3_OVF_INT_CLR | 3 | WO | 0 | Счётчик таймера 3 дошёл до наибольшего значения |
| TIMER2_OVF_INT_CLR | 2 | WO | 0 | Счётчик таймера 2 дошёл до наибольшего значения |
| TIMER1_OVF_INT_CLR | 1 | WO | 0 | Счётчик таймера 1 дошёл до наибольшего значения |
| TIMER0_OVF_INT_CLR | 0 | WO | 0 | Счётчик таймера 0 дошёл до наибольшего значения |
LEDC_CONF_REG — источник такта LEDC
Смещение 0x00D0, адрес 0x6001 90D0, после сброса 0x0000 0000. TRM: регистр 35.3.
| 31 | 30 | 29 | 28 | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 |
| CLK_EN | — | ||||||||||||||
| 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| — | APB_CLK_SEL | ||||||||||||||
| Поле | Биты | Доступ | Сброс | Назначение |
|---|---|---|---|---|
| CLK_EN | 31 | R/W | 0 | 1 — такт регистров всегда включён, 0 — только на время записи |
| APB_CLK_SEL | 1:0 | R/W | 0x0 | Такт таймеров: 1 — APB_CLK, 2 — RC_FAST_CLK, 3 — XTAL_CLK |
LEDC_DATE_REG — версия блока: дата ревизии аппаратуры
Смещение 0x00FC, адрес 0x6001 90FC, после сброса 0x1907 2601. TRM: регистр 35.13.
| Поле | Биты | Доступ | Сброс |
|---|---|---|---|
| DATE | 31:0 | R/W | 0x1907 2601 |
Частые вопросы
Какую частоту и разрядность ШИМ даёт LEDC ESP32-S3?
По таблице 35.3-1 TRM при делителе 1: от APB_CLK 80 МГц — 14 бит на 1 кГц, 13 бит на 5 кГц и 12 бит на 10 кГц; от XTAL_CLK 40 МГц — 14 бит на 1 кГц и 13 бит на 4 кГц. Счётчик таймера 14-битный, больше 14 бит не бывает; делитель дробный, поэтому частоту подбирают почти любую в этих пределах.
Зачем младшие 4 бита в DUTY_CHn ESP32-S3?
Это дробная часть скважности. Целая часть — биты 18:4; если в битах 3:0 записано k, то из каждых 16 периодов k периодов идут с импульсом на один такт длиннее. Пример из раздела 35.3.3 TRM: целая часть 10 и дробь 5 дают среднюю скважность 10,3125 такта.
Источники
- Espressif. ESP32-S3 Technical Reference Manual, версия 1.8 — глава 35: таблица Register Summary и рисунки регистров — смещения, поля, тип доступа и значения после сброса
- Espressif. SVD svd/esp32s3.svd, версия 21 (espressif/svd, коммит be20aa1) — базовые адреса периферии, список регистров и полей; лицензия Apache-2.0
- Espressif. ESP-IDF v6.1: заголовки components/soc/esp32s3/register/soc/*_reg.h (коммит fff9895) — имена макросов регистров и полей, сверка положения полей и значений по умолчанию; лицензия Apache-2.0 OR MIT
Нашли ошибку в регистрах?
Другие регистры ESP32-S3
- Все регистры ESP32-S3Блоки периферии и базовые адреса
- GPIO — выводы общего назначения и матрица GPIOGPIO_BT_SELECT_REG, GPIO_OUT_REG, GPIO_OUT_W1TS_REG, GPIO_OUT_W1TC_REG
- IO MUX — мультиплексор функций и электрические настройки выводовPIN_CTRL, IO_MUX_GPIOn_REG
- UART — универсальный асинхронный приёмопередатчикUART_FIFO_REG, UART_INT_RAW_REG, UART_INT_ST_REG, UART_INT_ENA_REG
- SPI — контроллеры SPI общего назначения GP-SPI2 и GP-SPI3SPI_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
- TIMG — группа таймеров: таймеры общего назначения и сторожTIMG_TnCONFIG_REG, TIMG_TnLO_REG, TIMG_TnHI_REG, TIMG_TnUPDATE_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 — управление питанием, сном и RTC-доменомRTC_CNTL_OPTIONS0_REG, RTC_CNTL_SLP_TIMER0_REG, RTC_CNTL_SLP_TIMER1_REG, RTC_CNTL_TIME_UPDATE_REG
- APB_SARADC — цифровой контроллер АЦПAPB_SARADC_CTRL_REG, APB_SARADC_CTRL2_REG, APB_SARADC_FILTER_CTRL1_REG, APB_SARADC_SAR1_PATT_TABn_REG
- SENS — RTC-контроллеры АЦП, датчиков касания и температурыSENS_SAR_READER1_CTRL_REG, SENS_SAR_MEAS1_CTRL2_REG, SENS_SAR_MEAS1_MUX_REG, SENS_SAR_ATTENn_REG
- USB Serial/JTAG — встроенный USB-переходник на последовательный порт и 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_MAC_INTR_MAP_REG, INTERRUPT_CORE0_MAC_NMI_MAP_REG, INTERRUPT_CORE0_PWR_INTR_MAP_REG, INTERRUPT_CORE0_BB_INT_MAP_REG
Статьи, инструменты и термины
- ШИМ ESP32: LEDCРазрешение по частоте, делитель A + B/256, фактическая частота, duty, код ESP-IDF
- ШИМ ESP32LEDC: 16 каналов и 8 таймеров, общие таймеры, API Arduino и ESP-IDF, плавное изменение
- ЦАП на ШИМПульсации после RC, установление, разрешение
- ШИМPWM: среднее напряжение через коэффициент заполнения