Регистры LEDC ESP32-C3
Регистры LEDC ESP32-C3: шесть каналов ШИМ и четыре таймера с дробным 18-битным делителем, разрядность до 14 бит, скважность с дробной частью, аппаратное плавное изменение яркости и прерывания переполнения.
LEDC по адресу 0x6001 9000 — генератор ШИМ, которым ESP-IDF пользуется для яркости светодиодов, сервоприводов и звука. Каждый из шести каналов берёт счётчик одного из четырёх таймеров (поле TIMER_SEL_CHn) и переключает выход, когда счётчик проходит значения HPOINT и HPOINT + DUTY.
Таймеры тактируются общим источником LEDC_CLK — APB_CLK, RC_FAST_CLK или XTAL_CLK по полю APB_CLK_SEL регистра LEDC_CONF_REG. Делитель CLK_DIV_TIMERx дробный: старшие 10 бит — целая часть, младшие 8 — дробь в 1/256. Частота ШИМ = f_LEDC_CLK / (делитель · 2^TIMERx_DUTY_RES).
Новые значения скважности и настроек канала вступают в силу только после записи 1 в PARA_UP_CHn, а таймера — в TIMERx_PARA_UP; скважность в регистре DUTY_CHn задаётся с четырьмя дробными битами.
| Экземпляр | Базовый адрес |
|---|---|
| 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_CONF1_REG, LEDC_DUTY_START_LSCH0); // применить скважность
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 | Версия блока: дата ревизии аппаратуры | 0x1906 1700 |
Доступ — обозначения TRM: R/W — чтение и запись, RO — только чтение, WO — только запись, WT — запись 1 запускает действие, SS и SC — бит ставится и сбрасывается аппаратно, WTC — сбрасывается записью 1.
LEDC_LSCHn_CONF0_REG — канал n: таймер, выход, обновление настроек
6 копий, n = 0…5: смещение 0x0000 + n · 0x0014, после сброса 0x0000 0000. TRM: регистр 32.1.
| 31 | 30 | 29 | 28 | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 |
| — | 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_CHn | 16 | WT | 0 | Сброс счётчика периодов |
| OVF_CNT_EN_CHn | 15 | R/W | 0 | Включить счёт периодов |
| OVF_NUM_CHn | 14:5 | R/W | 0x000 | Число периодов минус 1 до прерывания OVF_CNT |
| PARA_UP_CHn | 4 | WT | 0 | Запись 1 применяет HPOINT, DUTY и настройки плавности |
| IDLE_LV_CHn | 3 | R/W | 0 | Уровень выхода, когда канал остановлен |
| SIG_OUT_EN_CHn | 2 | R/W | 0 | Включить выход канала |
| TIMER_SEL_CHn | 1:0 | R/W | 0x0 | Номер таймера 0…3 для канала |
LEDC_LSCHn_HPOINT_REG — канал n: значение счётчика, при котором выход ставится в 1
6 копий, n = 0…5: смещение 0x0004 + n · 0x0014, после сброса 0x0000 0000. TRM: регистр 32.4.
| Поле | Биты | Доступ | Сброс | Назначение |
|---|---|---|---|---|
| HPOINT_CHn | 13:0 | R/W | 0x0000 | Выход ставится в 1, когда счётчик таймера равен этому значению |
LEDC_LSCHn_DUTY_REG — канал n: скважность
6 копий, n = 0…5: смещение 0x0008 + n · 0x0014, после сброса 0x0000 0000. TRM: регистр 32.5.
| Поле | Биты | Доступ | Сброс | Назначение |
|---|---|---|---|---|
| DUTY_CHn | 18:0 | R/W | 0x00000 | Скважность: длительность единицы в тактах счётчика, младшие 4 бита — дробь |
LEDC_LSCHn_CONF1_REG — канал n: плавное изменение скважности
6 копий, n = 0…5: смещение 0x000C + n · 0x0014, после сброса 0x4000 0000. TRM: регистр 32.2.
| 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/SC | 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: текущая скважность
6 копий, n = 0…5: смещение 0x0010 + n · 0x0014, после сброса 0x0000 0000. TRM: регистр 32.6.
| Поле | Биты | Доступ | Сброс | Назначение |
|---|---|---|---|---|
| DUTY_R_CHn | 18:0 | RO | 0x00000 | Текущая скважность канала |
LEDC_LSTIMERn_CONF_REG — таймер n: делитель, разрядность, сброс и пауза
4 копии, n = 0…3: смещение 0x00A0 + n · 0x0008, после сброса 0x0080 0000. TRM: регистр 32.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 | WT | 0 | Запись 1 применяет делитель и разрядность |
| TIMERn_RST | 23 | R/W | 1 | Сбросить счётчик и держать в нуле |
| TIMERn_PAUSE | 22 | R/W | 0 | Остановить счётчик |
| CLK_DIV_TIMERn | 21:4 | R/W | 0x00000 | Делитель: 10 бит целой части и 8 бит дроби (1/256) |
| TIMERn_DUTY_RES | 3:0 | R/W | 0x0 | Разрядность счётчика 1…14 бит |
LEDC_LSTIMERn_VALUE_REG — таймер n: текущее значение счётчика
4 копии, n = 0…3: смещение 0x00A4 + n · 0x0008, после сброса 0x0000 0000. TRM: регистр 32.8.
| Поле | Биты | Доступ | Сброс | Назначение |
|---|---|---|---|---|
| TIMERn_CNT | 13:0 | RO | 0x0000 | Текущее значение счётчика таймера |
LEDC_INT_RAW_REG — необработанные флаги прерываний
Смещение 0x00C0, адрес 0x6001 90C0, после сброса 0x0000 0000. TRM: регистр 32.9.
| 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| OVF_CNT_CH5_INT_RAW | OVF_CNT_CH4_INT_RAW | OVF_CNT_CH3_INT_RAW | OVF_CNT_CH2_INT_RAW | OVF_CNT_CH1_INT_RAW | OVF_CNT_CH0_INT_RAW | DUTY_CHNG_END_CH5_INT_RAW | DUTY_CHNG_END_CH4_INT_RAW | DUTY_CHNG_END_CH3_INT_RAW | DUTY_CHNG_END_CH2_INT_RAW | DUTY_CHNG_END_CH1_INT_RAW | DUTY_CHNG_END_CH0_INT_RAW | TIMER3_OVF_INT_RAW | TIMER2_OVF_INT_RAW | TIMER1_OVF_INT_RAW | TIMER0_OVF_INT_RAW |
| Поле | Биты | Доступ | Сброс | Назначение |
|---|---|---|---|---|
| OVF_CNT_CH5_INT_RAW | 15 | R/W | 0 | Канал 5: счётчик периодов достиг OVF_NUM_CHn + 1 |
| OVF_CNT_CH4_INT_RAW | 14 | R/W | 0 | Канал 4: счётчик периодов достиг OVF_NUM_CHn + 1 |
| OVF_CNT_CH3_INT_RAW | 13 | R/W | 0 | Канал 3: счётчик периодов достиг OVF_NUM_CHn + 1 |
| OVF_CNT_CH2_INT_RAW | 12 | R/W | 0 | Канал 2: счётчик периодов достиг OVF_NUM_CHn + 1 |
| OVF_CNT_CH1_INT_RAW | 11 | R/W | 0 | Канал 1: счётчик периодов достиг OVF_NUM_CHn + 1 |
| OVF_CNT_CH0_INT_RAW | 10 | R/W | 0 | Канал 0: счётчик периодов достиг OVF_NUM_CHn + 1 |
| 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: регистр 32.10.
| 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| OVF_CNT_CH5_INT_ST | OVF_CNT_CH4_INT_ST | OVF_CNT_CH3_INT_ST | OVF_CNT_CH2_INT_ST | OVF_CNT_CH1_INT_ST | OVF_CNT_CH0_INT_ST | DUTY_CHNG_END_CH5_INT_ST | DUTY_CHNG_END_CH4_INT_ST | DUTY_CHNG_END_CH3_INT_ST | DUTY_CHNG_END_CH2_INT_ST | DUTY_CHNG_END_CH1_INT_ST | DUTY_CHNG_END_CH0_INT_ST | TIMER3_OVF_INT_ST | TIMER2_OVF_INT_ST | TIMER1_OVF_INT_ST | TIMER0_OVF_INT_ST |
| Поле | Биты | Доступ | Сброс | Назначение |
|---|---|---|---|---|
| OVF_CNT_CH5_INT_ST | 15 | RO | 0 | Канал 5: счётчик периодов достиг OVF_NUM_CHn + 1 |
| OVF_CNT_CH4_INT_ST | 14 | RO | 0 | Канал 4: счётчик периодов достиг OVF_NUM_CHn + 1 |
| OVF_CNT_CH3_INT_ST | 13 | RO | 0 | Канал 3: счётчик периодов достиг OVF_NUM_CHn + 1 |
| OVF_CNT_CH2_INT_ST | 12 | RO | 0 | Канал 2: счётчик периодов достиг OVF_NUM_CHn + 1 |
| OVF_CNT_CH1_INT_ST | 11 | RO | 0 | Канал 1: счётчик периодов достиг OVF_NUM_CHn + 1 |
| OVF_CNT_CH0_INT_ST | 10 | RO | 0 | Канал 0: счётчик периодов достиг OVF_NUM_CHn + 1 |
| 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: регистр 32.11.
| 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| OVF_CNT_CH5_INT_ENA | OVF_CNT_CH4_INT_ENA | OVF_CNT_CH3_INT_ENA | OVF_CNT_CH2_INT_ENA | OVF_CNT_CH1_INT_ENA | OVF_CNT_CH0_INT_ENA | DUTY_CHNG_END_CH5_INT_ENA | DUTY_CHNG_END_CH4_INT_ENA | DUTY_CHNG_END_CH3_INT_ENA | DUTY_CHNG_END_CH2_INT_ENA | DUTY_CHNG_END_CH1_INT_ENA | DUTY_CHNG_END_CH0_INT_ENA | TIMER3_OVF_INT_ENA | TIMER2_OVF_INT_ENA | TIMER1_OVF_INT_ENA | TIMER0_OVF_INT_ENA |
| Поле | Биты | Доступ | Сброс | Назначение |
|---|---|---|---|---|
| OVF_CNT_CH5_INT_ENA | 15 | R/W | 0 | Канал 5: счётчик периодов достиг OVF_NUM_CHn + 1 |
| OVF_CNT_CH4_INT_ENA | 14 | R/W | 0 | Канал 4: счётчик периодов достиг OVF_NUM_CHn + 1 |
| OVF_CNT_CH3_INT_ENA | 13 | R/W | 0 | Канал 3: счётчик периодов достиг OVF_NUM_CHn + 1 |
| OVF_CNT_CH2_INT_ENA | 12 | R/W | 0 | Канал 2: счётчик периодов достиг OVF_NUM_CHn + 1 |
| OVF_CNT_CH1_INT_ENA | 11 | R/W | 0 | Канал 1: счётчик периодов достиг OVF_NUM_CHn + 1 |
| OVF_CNT_CH0_INT_ENA | 10 | R/W | 0 | Канал 0: счётчик периодов достиг OVF_NUM_CHn + 1 |
| 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: регистр 32.12.
| 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| OVF_CNT_CH5_INT_CLR | OVF_CNT_CH4_INT_CLR | OVF_CNT_CH3_INT_CLR | OVF_CNT_CH2_INT_CLR | OVF_CNT_CH1_INT_CLR | OVF_CNT_CH0_INT_CLR | DUTY_CHNG_END_CH5_INT_CLR | DUTY_CHNG_END_CH4_INT_CLR | DUTY_CHNG_END_CH3_INT_CLR | DUTY_CHNG_END_CH2_INT_CLR | DUTY_CHNG_END_CH1_INT_CLR | DUTY_CHNG_END_CH0_INT_CLR | TIMER3_OVF_INT_CLR | TIMER2_OVF_INT_CLR | TIMER1_OVF_INT_CLR | TIMER0_OVF_INT_CLR |
| Поле | Биты | Доступ | Сброс | Назначение |
|---|---|---|---|---|
| OVF_CNT_CH5_INT_CLR | 15 | WO | 0 | Канал 5: счётчик периодов достиг OVF_NUM_CHn + 1 |
| OVF_CNT_CH4_INT_CLR | 14 | WO | 0 | Канал 4: счётчик периодов достиг OVF_NUM_CHn + 1 |
| OVF_CNT_CH3_INT_CLR | 13 | WO | 0 | Канал 3: счётчик периодов достиг OVF_NUM_CHn + 1 |
| OVF_CNT_CH2_INT_CLR | 12 | WO | 0 | Канал 2: счётчик периодов достиг OVF_NUM_CHn + 1 |
| OVF_CNT_CH1_INT_CLR | 11 | WO | 0 | Канал 1: счётчик периодов достиг OVF_NUM_CHn + 1 |
| OVF_CNT_CH0_INT_CLR | 10 | WO | 0 | Канал 0: счётчик периодов достиг OVF_NUM_CHn + 1 |
| 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: регистр 32.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 | Тактирование регистров LEDC |
| APB_CLK_SEL | 1:0 | R/W | 0x0 | Такт LEDC: 1 — APB_CLK, 2 — RC_FAST_CLK, 3 — XTAL_CLK |
LEDC_DATE_REG — версия блока: дата ревизии аппаратуры
Смещение 0x00FC, адрес 0x6001 90FC, после сброса 0x1906 1700. TRM: регистр 32.13.
| Поле | Биты | Доступ | Сброс |
|---|---|---|---|
| LEDC_DATE | 31:0 | R/W | 0x1906 1700 |
Частые вопросы
Какую частоту и разрядность ШИМ даёт LEDC ESP32-C3?
Произведение частоты на 2 в степени разрядности не может превышать частоту LEDC_CLK: от APB_CLK 80 МГц это около 4,9 кГц при 14 битах, 19,5 кГц при 12 битах и 312,5 кГц при 8 битах. Делитель дробный, поэтому частоту можно подобрать почти любую в этих пределах.
Почему изменение DUTY не меняет скважность ESP32-C3?
Канал перечитывает настройки только после записи 1 в бит PARA_UP_CHn регистра LEDC_LSCHn_CONF0_REG, а запуск плавного изменения — после установки DUTY_START_CHn в LEDC_LSCHn_CONF1_REG. Значение в DUTY_CHn сдвинуто на 4 бита: младшие четыре — дробная часть.
Источники
- Espressif. ESP32-C3 Technical Reference Manual, версия 1.4 — глава 32: таблица 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
- 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
- АЦП — 12-битный SAR АЦП и датчик температурыAPB_SARADC_CTRL_REG, APB_SARADC_CTRL2_REG, APB_SARADC_FILTER_CTRL1_REG, APB_SARADC_SAR_PATT_TABn_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
Статьи, инструменты и термины
- ШИМ ESP32: LEDCРазрешение по частоте, делитель A + B/256, фактическая частота, duty, код ESP-IDF
- ШИМ ESP32LEDC: 16 каналов и 8 таймеров, общие таймеры, API Arduino и ESP-IDF, плавное изменение
- ЦАП на ШИМПульсации после RC, установление, разрешение
- ШИМPWM: среднее напряжение через коэффициент заполнения