Регистры LEDC ESP32
Регистры LEDC ESP32: восемь быстрых (HS) и восемь медленных (LS) каналов ШИМ, по четыре таймера на каждую группу с дробным 18-битным делителем и разрядностью до 20 бит, скважность, аппаратное плавное изменение яркости и прерывания.
Содержание
- Пример на C
- Регистры блока
- LEDC_HSCHn_CONF0_REG
- LEDC_HSCHn_HPOINT_REG
- LEDC_HSCHn_DUTY_REG
- LEDC_HSCHn_CONF1_REG
- LEDC_HSCHn_DUTY_R_REG
- LEDC_LSCHn_CONF0_REG
- LEDC_LSCHn_HPOINT_REG
- LEDC_LSCHn_DUTY_REG
- LEDC_LSCHn_CONF1_REG
- LEDC_LSCHn_DUTY_R_REG
- LEDC_HSTIMERn_CONF_REG
- LEDC_HSTIMERn_VALUE_REG
- LEDC_LSTIMERn_CONF_REG
- LEDC_LSTIMERn_VALUE_REG
- LEDC_INT_RAW_REG
- LEDC_INT_ST_REG
- LEDC_INT_ENA_REG
- LEDC_INT_CLR_REG
- LEDC_CONF_REG
LEDC по адресу 0x3FF5 9000 разделён на две группы. Быстрые каналы HSCH0…7 и таймеры HSTIMER0…3 применяют новую скважность и делитель сами в начале следующего периода. Медленные каналы LSCH0…7 и таймеры LSTIMER0…3 тактируются от медленного источника и требуют записи 1 в PARA_UP — зато могут работать в лёгком сне.
Такт таймера — APB_CLK 80 МГц или REF_TICK 1 МГц (поле TICK_SEL); у медленных таймеров вместо APB может быть RC-генератор 8 МГц (поле APB_CLK_SEL регистра LEDC_CONF_REG). Делитель CLK_DIV_NUM дробный: 10 бит целой части и 8 бит дроби. Частота ШИМ = f_clk / (делитель · 2^DUTY_RES), разрядность до 20 бит.
| Экземпляр | Базовый адрес |
|---|---|
| LEDC | 0x3FF5 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_HSCH0_DUTY_REG, duty << 4); // 4 дробных бита
REG_SET_BIT(LEDC_HSCH0_CONF1_REG, LEDC_DUTY_START_HSCH0); // применить в начале периодаРегистры блока
| Регистр (ESP-IDF) | Смещение | Назначение | После сброса |
|---|---|---|---|
| LEDC_HSCHn_CONF0_REG | 0x0000 + n · 0x0014 | Быстрый канал n: таймер, выход, уровень покоя | 0x0000 0000 |
| LEDC_HSCHn_HPOINT_REG | 0x0004 + n · 0x0014 | Быстрый канал n: точка установки выхода | 0x0000 0000 |
| LEDC_HSCHn_DUTY_REG | 0x0008 + n · 0x0014 | Быстрый канал n: скважность | 0x0000 0000 |
| LEDC_HSCHn_CONF1_REG | 0x000C + n · 0x0014 | Быстрый канал n: плавное изменение скважности | 0x4000 0000 |
| LEDC_HSCHn_DUTY_R_REG | 0x0010 + n · 0x0014 | Быстрый канал n: текущая скважность | 0x0000 0000 |
| LEDC_LSCHn_CONF0_REG | 0x00A0 + n · 0x0014 | Медленный канал n: таймер, выход, обновление | 0x0000 0000 |
| LEDC_LSCHn_HPOINT_REG | 0x00A4 + n · 0x0014 | Медленный канал n: точка установки выхода | 0x0000 0000 |
| LEDC_LSCHn_DUTY_REG | 0x00A8 + n · 0x0014 | Медленный канал n: скважность | 0x0000 0000 |
| LEDC_LSCHn_CONF1_REG | 0x00AC + n · 0x0014 | Медленный канал n: плавное изменение скважности | 0x4000 0000 |
| LEDC_LSCHn_DUTY_R_REG | 0x00B0 + n · 0x0014 | Медленный канал n: текущая скважность | 0x0000 0000 |
| LEDC_HSTIMERn_CONF_REG | 0x0140 + n · 0x0008 | Быстрый таймер n: делитель, разрядность, такт | 0x0100 0000 |
| LEDC_HSTIMERn_VALUE_REG | 0x0144 + n · 0x0008 | Быстрый таймер n: значение счётчика | 0x0000 0000 |
| LEDC_LSTIMERn_CONF_REG | 0x0160 + n · 0x0008 | Медленный таймер n: делитель, разрядность, такт | 0x0100 0000 |
| LEDC_LSTIMERn_VALUE_REG | 0x0164 + n · 0x0008 | Медленный таймер n: значение счётчика | 0x0000 0000 |
| LEDC_INT_RAW_REG | 0x0180 | Необработанные флаги прерываний | 0x0000 0000 |
| LEDC_INT_ST_REG | 0x0184 | Флаги прерываний после маски разрешения | 0x0000 0000 |
| LEDC_INT_ENA_REG | 0x0188 | Разрешение прерываний | 0x0000 0000 |
| LEDC_INT_CLR_REG | 0x018C | Сброс флагов прерываний записью 1 | 0x0000 0000 |
| LEDC_CONF_REG | 0x0190 | Источник медленного такта | 0x0000 0000 |
Доступ — обозначения TRM: R/W — чтение и запись, RO — только чтение, WO — только запись, WT — запись 1 запускает действие, SS и SC — бит ставится и сбрасывается аппаратно, WTC — сбрасывается записью 1.
LEDC_HSCHn_CONF0_REG — быстрый канал n: таймер, выход, уровень покоя
8 копий, n = 0…7: смещение 0x0000 + n · 0x0014, после сброса 0x0000 0000. TRM: регистр 28.1.
| 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| — | IDLE_LV_HSCHn | SIG_OUT_EN_HSCHn | TIMER_SEL_HSCHn | ||||||||||||
| Поле | Биты | Доступ | Сброс | Назначение |
|---|---|---|---|---|
| IDLE_LV_HSCHn | 3 | R/W | 0 | Уровень выхода, когда канал остановлен |
| SIG_OUT_EN_HSCHn | 2 | R/W | 0 | Включить выход канала |
| TIMER_SEL_HSCHn | 1:0 | R/W | 0x0 | Номер быстрого таймера 0…3 |
LEDC_HSCHn_HPOINT_REG — быстрый канал n: точка установки выхода
8 копий, n = 0…7: смещение 0x0004 + n · 0x0014, после сброса 0x0000 0000. TRM: регистр 28.2.
| Поле | Биты | Доступ | Сброс | Назначение |
|---|---|---|---|---|
| HPOINT_HSCHn | 19:0 | R/W | 0x00000 | Выход ставится в 1, когда счётчик таймера равен этому значению |
LEDC_HSCHn_DUTY_REG — быстрый канал n: скважность
8 копий, n = 0…7: смещение 0x0008 + n · 0x0014, после сброса 0x0000 0000. TRM: регистр 28.3.
| Поле | Биты | Доступ | Сброс | Назначение |
|---|---|---|---|---|
| DUTY_HSCHn | 24:0 | R/W | 0x0000000 | Скважность в тактах счётчика, младшие 4 бита — дробь |
LEDC_HSCHn_CONF1_REG — быстрый канал n: плавное изменение скважности
8 копий, n = 0…7: смещение 0x000C + n · 0x0014, после сброса 0x4000 0000. TRM: регистр 28.4.
| 31 | 30 | 29 | 28 | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 |
| DUTY_START_HSCHn | DUTY_INC_HSCHn | DUTY_NUM_HSCHn | DUTY_CYCLE_HSCHn | ||||||||||||
| 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| DUTY_CYCLE_HSCHn | DUTY_SCALE_HSCHn | ||||||||||||||
| Поле | Биты | Доступ | Сброс | Назначение |
|---|---|---|---|---|
| DUTY_START_HSCHn | 31 | R/W | 0 | Запись 1 запускает применение скважности или плавное изменение |
| DUTY_INC_HSCHn | 30 | R/W | 1 | Направление: 1 — увеличивать, 0 — уменьшать |
| DUTY_NUM_HSCHn | 29:20 | R/W | 0x000 | Число шагов изменения |
| DUTY_CYCLE_HSCHn | 19:10 | R/W | 0x000 | Изменять скважность раз в столько периодов |
| DUTY_SCALE_HSCHn | 9:0 | R/W | 0x000 | Шаг изменения скважности |
LEDC_HSCHn_DUTY_R_REG — быстрый канал n: текущая скважность
8 копий, n = 0…7: смещение 0x0010 + n · 0x0014, после сброса 0x0000 0000. TRM: регистр 28.5.
| Поле | Биты | Доступ | Сброс | Назначение |
|---|---|---|---|---|
| DUTY_HSCHn_R | 24:0 | RO | 0x0000000 | Текущая скважность канала |
LEDC_LSCHn_CONF0_REG — медленный канал n: таймер, выход, обновление
8 копий, n = 0…7: смещение 0x00A0 + n · 0x0014, после сброса 0x0000 0000. TRM: регистр 28.6.
| 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| — | PARA_UP_LSCHn | IDLE_LV_LSCHn | SIG_OUT_EN_LSCHn | TIMER_SEL_LSCHn | |||||||||||
| Поле | Биты | Доступ | Сброс | Назначение |
|---|---|---|---|---|
| PARA_UP_LSCHn | 4 | R/W | 0 | Запись 1 применяет HPOINT, DUTY и настройки плавности |
| IDLE_LV_LSCHn | 3 | R/W | 0 | Уровень выхода, когда канал остановлен |
| SIG_OUT_EN_LSCHn | 2 | R/W | 0 | Включить выход канала |
| TIMER_SEL_LSCHn | 1:0 | R/W | 0x0 | Номер медленного таймера 0…3 |
LEDC_LSCHn_HPOINT_REG — медленный канал n: точка установки выхода
8 копий, n = 0…7: смещение 0x00A4 + n · 0x0014, после сброса 0x0000 0000. TRM: регистр 28.7.
| Поле | Биты | Доступ | Сброс | Назначение |
|---|---|---|---|---|
| HPOINT_LSCHn | 19:0 | R/W | 0x00000 | Выход ставится в 1, когда счётчик таймера равен этому значению |
LEDC_LSCHn_DUTY_REG — медленный канал n: скважность
8 копий, n = 0…7: смещение 0x00A8 + n · 0x0014, после сброса 0x0000 0000. TRM: регистр 28.8.
| Поле | Биты | Доступ | Сброс | Назначение |
|---|---|---|---|---|
| DUTY_LSCHn | 24:0 | R/W | 0x0000000 | Скважность в тактах счётчика, младшие 4 бита — дробь |
LEDC_LSCHn_CONF1_REG — медленный канал n: плавное изменение скважности
8 копий, n = 0…7: смещение 0x00AC + n · 0x0014, после сброса 0x4000 0000. TRM: регистр 28.9.
| 31 | 30 | 29 | 28 | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 |
| DUTY_START_LSCHn | DUTY_INC_LSCHn | DUTY_NUM_LSCHn | DUTY_CYCLE_LSCHn | ||||||||||||
| 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| DUTY_CYCLE_LSCHn | DUTY_SCALE_LSCHn | ||||||||||||||
| Поле | Биты | Доступ | Сброс | Назначение |
|---|---|---|---|---|
| DUTY_START_LSCHn | 31 | R/W | 0 | Запись 1 запускает применение скважности или плавное изменение |
| DUTY_INC_LSCHn | 30 | R/W | 1 | Направление: 1 — увеличивать, 0 — уменьшать |
| DUTY_NUM_LSCHn | 29:20 | R/W | 0x000 | Число шагов изменения |
| DUTY_CYCLE_LSCHn | 19:10 | R/W | 0x000 | Изменять скважность раз в столько периодов |
| DUTY_SCALE_LSCHn | 9:0 | R/W | 0x000 | Шаг изменения скважности |
LEDC_LSCHn_DUTY_R_REG — медленный канал n: текущая скважность
8 копий, n = 0…7: смещение 0x00B0 + n · 0x0014, после сброса 0x0000 0000. TRM: регистр 28.10.
| Поле | Биты | Доступ | Сброс | Назначение |
|---|---|---|---|---|
| DUTY_LSCHn_R | 24:0 | RO | 0x0000000 | Текущая скважность канала |
LEDC_HSTIMERn_CONF_REG — быстрый таймер n: делитель, разрядность, такт
4 копии, n = 0…3: смещение 0x0140 + n · 0x0008, после сброса 0x0100 0000. TRM: регистр 28.11.
| 31 | 30 | 29 | 28 | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 |
| — | TICK_SEL_HSTIMERn | HSTIMERn_RST | HSTIMERn_PAUSE | CLK_DIV_NUM_HSTIMERn | |||||||||||
| 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| CLK_DIV_NUM_HSTIMERn | HSTIMERn_DUTY_RES | ||||||||||||||
| Поле | Биты | Доступ | Сброс | Назначение |
|---|---|---|---|---|
| TICK_SEL_HSTIMERn | 25 | R/W | 0 | Такт: 1 — APB_CLK, 0 — REF_TICK |
| HSTIMERn_RST | 24 | R/W | 1 | Сбросить счётчик и держать в нуле |
| HSTIMERn_PAUSE | 23 | R/W | 0 | Остановить счётчик |
| CLK_DIV_NUM_HSTIMERn | 22:5 | R/W | 0x00000 | Делитель: 10 бит целой части и 8 бит дроби |
| HSTIMERn_DUTY_RES | 4:0 | R/W | 0x00 | Разрядность счётчика 1…20 бит |
LEDC_HSTIMERn_VALUE_REG — быстрый таймер n: значение счётчика
4 копии, n = 0…3: смещение 0x0144 + n · 0x0008, после сброса 0x0000 0000. TRM: регистр 28.12.
| Поле | Биты | Доступ | Сброс | Назначение |
|---|---|---|---|---|
| HSTIMERn_CNT | 19:0 | RO | 0x00000 | Текущее значение счётчика |
LEDC_LSTIMERn_CONF_REG — медленный таймер n: делитель, разрядность, такт
4 копии, n = 0…3: смещение 0x0160 + n · 0x0008, после сброса 0x0100 0000. TRM: регистр 28.13.
| 31 | 30 | 29 | 28 | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 |
| — | LSTIMERn_PARA_UP | TICK_SEL_LSTIMERn | LSTIMERn_RST | LSTIMERn_PAUSE | CLK_DIV_NUM_LSTIMERn | ||||||||||
| 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| CLK_DIV_NUM_LSTIMERn | LSTIMERn_DUTY_RES | ||||||||||||||
| Поле | Биты | Доступ | Сброс | Назначение |
|---|---|---|---|---|
| LSTIMERn_PARA_UP | 26 | R/W | 0 | Запись 1 применяет делитель и разрядность |
| TICK_SEL_LSTIMERn | 25 | R/W | 0 | Такт: 1 — SLOW_CLK (по APB_CLK_SEL), 0 — REF_TICK |
| LSTIMERn_RST | 24 | R/W | 1 | Сбросить счётчик и держать в нуле |
| LSTIMERn_PAUSE | 23 | R/W | 0 | Остановить счётчик |
| CLK_DIV_NUM_LSTIMERn | 22:5 | R/W | 0x00000 | Делитель: 10 бит целой части и 8 бит дроби |
| LSTIMERn_DUTY_RES | 4:0 | R/W | 0x00 | Разрядность счётчика 1…20 бит |
LEDC_LSTIMERn_VALUE_REG — медленный таймер n: значение счётчика
4 копии, n = 0…3: смещение 0x0164 + n · 0x0008, после сброса 0x0000 0000. TRM: регистр 28.14.
| Поле | Биты | Доступ | Сброс | Назначение |
|---|---|---|---|---|
| LSTIMERn_CNT | 19:0 | RO | 0x00000 | Текущее значение счётчика |
LEDC_INT_RAW_REG — необработанные флаги прерываний
Смещение 0x0180, адрес 0x3FF5 9180, после сброса 0x0000 0000. TRM: регистр 28.15.
| Поле | Биты | Доступ | Сброс | Назначение |
|---|---|---|---|---|
| DUTY_CHNG_END_LSCH7_INT_RAW | 23 | RO | 0 | Медленный канал 7 закончил плавное изменение скважности |
| DUTY_CHNG_END_LSCH6_INT_RAW | 22 | RO | 0 | Медленный канал 6 закончил плавное изменение скважности |
| DUTY_CHNG_END_LSCH5_INT_RAW | 21 | RO | 0 | Медленный канал 5 закончил плавное изменение скважности |
| DUTY_CHNG_END_LSCH4_INT_RAW | 20 | RO | 0 | Медленный канал 4 закончил плавное изменение скважности |
| DUTY_CHNG_END_LSCH3_INT_RAW | 19 | RO | 0 | Медленный канал 3 закончил плавное изменение скважности |
| DUTY_CHNG_END_LSCH2_INT_RAW | 18 | RO | 0 | Медленный канал 2 закончил плавное изменение скважности |
| DUTY_CHNG_END_LSCH1_INT_RAW | 17 | RO | 0 | Медленный канал 1 закончил плавное изменение скважности |
| DUTY_CHNG_END_LSCH0_INT_RAW | 16 | RO | 0 | Медленный канал 0 закончил плавное изменение скважности |
| DUTY_CHNG_END_HSCH7_INT_RAW | 15 | RO | 0 | Быстрый канал 7 закончил плавное изменение скважности |
| DUTY_CHNG_END_HSCH6_INT_RAW | 14 | RO | 0 | Быстрый канал 6 закончил плавное изменение скважности |
| DUTY_CHNG_END_HSCH5_INT_RAW | 13 | RO | 0 | Быстрый канал 5 закончил плавное изменение скважности |
| DUTY_CHNG_END_HSCH4_INT_RAW | 12 | RO | 0 | Быстрый канал 4 закончил плавное изменение скважности |
| DUTY_CHNG_END_HSCH3_INT_RAW | 11 | RO | 0 | Быстрый канал 3 закончил плавное изменение скважности |
| DUTY_CHNG_END_HSCH2_INT_RAW | 10 | RO | 0 | Быстрый канал 2 закончил плавное изменение скважности |
| DUTY_CHNG_END_HSCH1_INT_RAW | 9 | RO | 0 | Быстрый канал 1 закончил плавное изменение скважности |
| DUTY_CHNG_END_HSCH0_INT_RAW | 8 | RO | 0 | Быстрый канал 0 закончил плавное изменение скважности |
| LSTIMER3_OVF_INT_RAW | 7 | RO | 0 | Переполнение медленного таймера 3 |
| LSTIMER2_OVF_INT_RAW | 6 | RO | 0 | Переполнение медленного таймера 2 |
| LSTIMER1_OVF_INT_RAW | 5 | RO | 0 | Переполнение медленного таймера 1 |
| LSTIMER0_OVF_INT_RAW | 4 | RO | 0 | Переполнение медленного таймера 0 |
| HSTIMER3_OVF_INT_RAW | 3 | RO | 0 | Переполнение быстрого таймера 3 |
| HSTIMER2_OVF_INT_RAW | 2 | RO | 0 | Переполнение быстрого таймера 2 |
| HSTIMER1_OVF_INT_RAW | 1 | RO | 0 | Переполнение быстрого таймера 1 |
| HSTIMER0_OVF_INT_RAW | 0 | RO | 0 | Переполнение быстрого таймера 0 |
LEDC_INT_ST_REG — флаги прерываний после маски разрешения
Смещение 0x0184, адрес 0x3FF5 9184, после сброса 0x0000 0000. TRM: регистр 28.16.
| Поле | Биты | Доступ | Сброс | Назначение |
|---|---|---|---|---|
| DUTY_CHNG_END_LSCH7_INT_ST | 23 | RO | 0 | Медленный канал 7 закончил плавное изменение скважности |
| DUTY_CHNG_END_LSCH6_INT_ST | 22 | RO | 0 | Медленный канал 6 закончил плавное изменение скважности |
| DUTY_CHNG_END_LSCH5_INT_ST | 21 | RO | 0 | Медленный канал 5 закончил плавное изменение скважности |
| DUTY_CHNG_END_LSCH4_INT_ST | 20 | RO | 0 | Медленный канал 4 закончил плавное изменение скважности |
| DUTY_CHNG_END_LSCH3_INT_ST | 19 | RO | 0 | Медленный канал 3 закончил плавное изменение скважности |
| DUTY_CHNG_END_LSCH2_INT_ST | 18 | RO | 0 | Медленный канал 2 закончил плавное изменение скважности |
| DUTY_CHNG_END_LSCH1_INT_ST | 17 | RO | 0 | Медленный канал 1 закончил плавное изменение скважности |
| DUTY_CHNG_END_LSCH0_INT_ST | 16 | RO | 0 | Медленный канал 0 закончил плавное изменение скважности |
| DUTY_CHNG_END_HSCH7_INT_ST | 15 | RO | 0 | Быстрый канал 7 закончил плавное изменение скважности |
| DUTY_CHNG_END_HSCH6_INT_ST | 14 | RO | 0 | Быстрый канал 6 закончил плавное изменение скважности |
| DUTY_CHNG_END_HSCH5_INT_ST | 13 | RO | 0 | Быстрый канал 5 закончил плавное изменение скважности |
| DUTY_CHNG_END_HSCH4_INT_ST | 12 | RO | 0 | Быстрый канал 4 закончил плавное изменение скважности |
| DUTY_CHNG_END_HSCH3_INT_ST | 11 | RO | 0 | Быстрый канал 3 закончил плавное изменение скважности |
| DUTY_CHNG_END_HSCH2_INT_ST | 10 | RO | 0 | Быстрый канал 2 закончил плавное изменение скважности |
| DUTY_CHNG_END_HSCH1_INT_ST | 9 | RO | 0 | Быстрый канал 1 закончил плавное изменение скважности |
| DUTY_CHNG_END_HSCH0_INT_ST | 8 | RO | 0 | Быстрый канал 0 закончил плавное изменение скважности |
| LSTIMER3_OVF_INT_ST | 7 | RO | 0 | Переполнение медленного таймера 3 |
| LSTIMER2_OVF_INT_ST | 6 | RO | 0 | Переполнение медленного таймера 2 |
| LSTIMER1_OVF_INT_ST | 5 | RO | 0 | Переполнение медленного таймера 1 |
| LSTIMER0_OVF_INT_ST | 4 | RO | 0 | Переполнение медленного таймера 0 |
| HSTIMER3_OVF_INT_ST | 3 | RO | 0 | Переполнение быстрого таймера 3 |
| HSTIMER2_OVF_INT_ST | 2 | RO | 0 | Переполнение быстрого таймера 2 |
| HSTIMER1_OVF_INT_ST | 1 | RO | 0 | Переполнение быстрого таймера 1 |
| HSTIMER0_OVF_INT_ST | 0 | RO | 0 | Переполнение быстрого таймера 0 |
LEDC_INT_ENA_REG — разрешение прерываний
Смещение 0x0188, адрес 0x3FF5 9188, после сброса 0x0000 0000. TRM: регистр 28.17.
| Поле | Биты | Доступ | Сброс | Назначение |
|---|---|---|---|---|
| DUTY_CHNG_END_LSCH7_INT_ENA | 23 | R/W | 0 | Медленный канал 7 закончил плавное изменение скважности |
| DUTY_CHNG_END_LSCH6_INT_ENA | 22 | R/W | 0 | Медленный канал 6 закончил плавное изменение скважности |
| DUTY_CHNG_END_LSCH5_INT_ENA | 21 | R/W | 0 | Медленный канал 5 закончил плавное изменение скважности |
| DUTY_CHNG_END_LSCH4_INT_ENA | 20 | R/W | 0 | Медленный канал 4 закончил плавное изменение скважности |
| DUTY_CHNG_END_LSCH3_INT_ENA | 19 | R/W | 0 | Медленный канал 3 закончил плавное изменение скважности |
| DUTY_CHNG_END_LSCH2_INT_ENA | 18 | R/W | 0 | Медленный канал 2 закончил плавное изменение скважности |
| DUTY_CHNG_END_LSCH1_INT_ENA | 17 | R/W | 0 | Медленный канал 1 закончил плавное изменение скважности |
| DUTY_CHNG_END_LSCH0_INT_ENA | 16 | R/W | 0 | Медленный канал 0 закончил плавное изменение скважности |
| DUTY_CHNG_END_HSCH7_INT_ENA | 15 | R/W | 0 | Быстрый канал 7 закончил плавное изменение скважности |
| DUTY_CHNG_END_HSCH6_INT_ENA | 14 | R/W | 0 | Быстрый канал 6 закончил плавное изменение скважности |
| DUTY_CHNG_END_HSCH5_INT_ENA | 13 | R/W | 0 | Быстрый канал 5 закончил плавное изменение скважности |
| DUTY_CHNG_END_HSCH4_INT_ENA | 12 | R/W | 0 | Быстрый канал 4 закончил плавное изменение скважности |
| DUTY_CHNG_END_HSCH3_INT_ENA | 11 | R/W | 0 | Быстрый канал 3 закончил плавное изменение скважности |
| DUTY_CHNG_END_HSCH2_INT_ENA | 10 | R/W | 0 | Быстрый канал 2 закончил плавное изменение скважности |
| DUTY_CHNG_END_HSCH1_INT_ENA | 9 | R/W | 0 | Быстрый канал 1 закончил плавное изменение скважности |
| DUTY_CHNG_END_HSCH0_INT_ENA | 8 | R/W | 0 | Быстрый канал 0 закончил плавное изменение скважности |
| LSTIMER3_OVF_INT_ENA | 7 | R/W | 0 | Переполнение медленного таймера 3 |
| LSTIMER2_OVF_INT_ENA | 6 | R/W | 0 | Переполнение медленного таймера 2 |
| LSTIMER1_OVF_INT_ENA | 5 | R/W | 0 | Переполнение медленного таймера 1 |
| LSTIMER0_OVF_INT_ENA | 4 | R/W | 0 | Переполнение медленного таймера 0 |
| HSTIMER3_OVF_INT_ENA | 3 | R/W | 0 | Переполнение быстрого таймера 3 |
| HSTIMER2_OVF_INT_ENA | 2 | R/W | 0 | Переполнение быстрого таймера 2 |
| HSTIMER1_OVF_INT_ENA | 1 | R/W | 0 | Переполнение быстрого таймера 1 |
| HSTIMER0_OVF_INT_ENA | 0 | R/W | 0 | Переполнение быстрого таймера 0 |
LEDC_INT_CLR_REG — сброс флагов прерываний записью 1
Смещение 0x018C, адрес 0x3FF5 918C, после сброса 0x0000 0000. TRM: регистр 28.18.
| Поле | Биты | Доступ | Сброс | Назначение |
|---|---|---|---|---|
| DUTY_CHNG_END_LSCH7_INT_CLR | 23 | WO | 0 | Медленный канал 7 закончил плавное изменение скважности |
| DUTY_CHNG_END_LSCH6_INT_CLR | 22 | WO | 0 | Медленный канал 6 закончил плавное изменение скважности |
| DUTY_CHNG_END_LSCH5_INT_CLR | 21 | WO | 0 | Медленный канал 5 закончил плавное изменение скважности |
| DUTY_CHNG_END_LSCH4_INT_CLR | 20 | WO | 0 | Медленный канал 4 закончил плавное изменение скважности |
| DUTY_CHNG_END_LSCH3_INT_CLR | 19 | WO | 0 | Медленный канал 3 закончил плавное изменение скважности |
| DUTY_CHNG_END_LSCH2_INT_CLR | 18 | WO | 0 | Медленный канал 2 закончил плавное изменение скважности |
| DUTY_CHNG_END_LSCH1_INT_CLR | 17 | WO | 0 | Медленный канал 1 закончил плавное изменение скважности |
| DUTY_CHNG_END_LSCH0_INT_CLR | 16 | WO | 0 | Медленный канал 0 закончил плавное изменение скважности |
| DUTY_CHNG_END_HSCH7_INT_CLR | 15 | WO | 0 | Быстрый канал 7 закончил плавное изменение скважности |
| DUTY_CHNG_END_HSCH6_INT_CLR | 14 | WO | 0 | Быстрый канал 6 закончил плавное изменение скважности |
| DUTY_CHNG_END_HSCH5_INT_CLR | 13 | WO | 0 | Быстрый канал 5 закончил плавное изменение скважности |
| DUTY_CHNG_END_HSCH4_INT_CLR | 12 | WO | 0 | Быстрый канал 4 закончил плавное изменение скважности |
| DUTY_CHNG_END_HSCH3_INT_CLR | 11 | WO | 0 | Быстрый канал 3 закончил плавное изменение скважности |
| DUTY_CHNG_END_HSCH2_INT_CLR | 10 | WO | 0 | Быстрый канал 2 закончил плавное изменение скважности |
| DUTY_CHNG_END_HSCH1_INT_CLR | 9 | WO | 0 | Быстрый канал 1 закончил плавное изменение скважности |
| DUTY_CHNG_END_HSCH0_INT_CLR | 8 | WO | 0 | Быстрый канал 0 закончил плавное изменение скважности |
| LSTIMER3_OVF_INT_CLR | 7 | WO | 0 | Переполнение медленного таймера 3 |
| LSTIMER2_OVF_INT_CLR | 6 | WO | 0 | Переполнение медленного таймера 2 |
| LSTIMER1_OVF_INT_CLR | 5 | WO | 0 | Переполнение медленного таймера 1 |
| LSTIMER0_OVF_INT_CLR | 4 | WO | 0 | Переполнение медленного таймера 0 |
| HSTIMER3_OVF_INT_CLR | 3 | WO | 0 | Переполнение быстрого таймера 3 |
| HSTIMER2_OVF_INT_CLR | 2 | WO | 0 | Переполнение быстрого таймера 2 |
| HSTIMER1_OVF_INT_CLR | 1 | WO | 0 | Переполнение быстрого таймера 1 |
| HSTIMER0_OVF_INT_CLR | 0 | WO | 0 | Переполнение быстрого таймера 0 |
LEDC_CONF_REG — источник медленного такта
Смещение 0x0190, адрес 0x3FF5 9190, после сброса 0x0000 0000. TRM: регистр 28.19.
| Поле | Биты | Доступ | Сброс | Назначение |
|---|---|---|---|---|
| APB_CLK_SEL | 0 | R/W | 0 | SLOW_CLK медленных таймеров: 1 — APB_CLK 80 МГц, 0 — RC-генератор 8 МГц |
Частые вопросы
Чем быстрые каналы LEDC ESP32 отличаются от медленных?
Быстрые (high-speed) каналы обновляют скважность и делитель аппаратно в начале периода, без программного шага, но останавливаются в лёгком сне. Медленные (low-speed) обновляются только после записи 1 в бит PARA_UP канала или таймера и могут тактироваться от RC-генератора 8 МГц во сне. Регистры у обеих групп одинаковые по составу.
Какая максимальная частота ШИМ у ESP32?
Частота, умноженная на 2 в степени разрядности, не может превышать частоту такта таймера: от 80 МГц это 40 МГц при 1 бите, 312,5 кГц при 8 битах, 1,22 кГц при 16 битах и 76 Гц при 20 битах. Калькулятор LEDC подбирает делитель и разрядность для нужной частоты.
Источники
- Espressif. ESP32 Technical Reference Manual, версия 5.8 — глава 28: таблица Register Summary и рисунки регистров — смещения, поля, тип доступа и значения после сброса
- Espressif. SVD svd/esp32.svd, версия 16 (espressif/svd, коммит be20aa1) — базовые адреса периферии, список регистров и полей; лицензия Apache-2.0
- Espressif. ESP-IDF v6.1: заголовки components/soc/esp32/register/soc/*_reg.h (коммит fff9895) — имена макросов регистров и полей, сверка положения полей и значений по умолчанию; лицензия Apache-2.0 OR MIT
Нашли ошибку в регистрах?
Другие регистры ESP32
- Все регистры ESP32Блоки периферии и базовые адреса
- GPIO — выводы общего назначения и матрица GPIOGPIO_OUT_REG, GPIO_OUT_W1TS_REG, GPIO_OUT_W1TC_REG, GPIO_OUT1_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 общего назначения HSPI и VSPISPI_CMD_REG, SPI_ADDR_REG, SPI_CTRL_REG, SPI_CTRL1_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_CHnCONF0_REG, RMT_CHnCONF1_REG, RMT_INT_RAW_REG, RMT_INT_ST_REG
- RTC_CNTL — управление питанием, сном и RTCRTC_CNTL_OPTIONS0_REG, RTC_CNTL_SLP_TIMER0_REG, RTC_CNTL_SLP_TIMER1_REG, RTC_CNTL_TIME_UPDATE_REG
- SENS — АЦП, сенсорные входы и ЦАП домена RTCSENS_SAR_READ_CTRL_REG, SENS_ULP_CP_SLEEP_CYC0_REG, SENS_SAR_START_FORCE_REG, SENS_SAR_ATTENn_REG
- eFuse — однократно программируемая память настроек и ключейEFUSE_BLK0_RDATA0_REG, EFUSE_BLK0_RDATA1_REG, EFUSE_BLK0_RDATA2_REG, EFUSE_BLK0_RDATA3_REG
Статьи, инструменты и термины
- ШИМ ESP32: LEDCРазрешение по частоте, делитель A + B/256, фактическая частота, duty, код ESP-IDF
- ШИМ ESP32LEDC: 16 каналов и 8 таймеров, общие таймеры, API Arduino и ESP-IDF, плавное изменение
- ЦАП на ШИМПульсации после RC, установление, разрешение
- ШИМPWM: среднее напряжение через коэффициент заполнения