VSF Documented
ledc.h
Go to the documentation of this file.
1/*****************************************************************************
2 * Copyright(C)2009-2026 by VSF Team *
3 * *
4 * Licensed under the Apache License, Version 2.0 (the "License"); *
5 * you may not use this file except in compliance with the License. *
6 * You may obtain a copy of the License at *
7 * *
8 * http://www.apache.org/licenses/LICENSE-2.0 *
9 * *
10 * Unless required by applicable law or agreed to in writing, software *
11 * distributed under the License is distributed on an "AS IS" BASIS, *
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. *
13 * See the License for the specific language governing permissions and *
14 * limitations under the License. *
15 * *
16 ****************************************************************************/
17
18/*
19 * Clean-room re-implementation of ESP-IDF "driver/ledc.h".
20 *
21 * Authored from ESP-IDF v5.1 public API only. No code copied from the
22 * ESP-IDF source tree. The VSF port bridges onto
23 *
24 * hal/driver/common/template/vsf_template_pwm.h
25 *
26 * via a caller-supplied pool of vsf_pwm_t * instances (see
27 * vsf_espidf_cfg_t::ledc
28 * ).
29 *
30 * Mapping (one-to-one with speed_mode):
31 * pool index 0 -> LEDC_LOW_SPEED_MODE
32 * pool index 1 -> LEDC_HIGH_SPEED_MODE (optional, some targets only)
33 *
34 * Each vsf_pwm_t instance is shared by all channels of that speed_mode.
35 * A ledc_timer_config_t call re-initialises the vsf_pwm_t with the new
36 * counter frequency (freq_hz * 2^duty_resolution). If multiple timers
37 * on the same speed_mode are configured with different frequencies the
38 * last configuration wins, which matches typical demo use-cases.
39 *
40 * Only the common duty / freq control path is implemented. Advanced
41 * features (interrupt, fade service, sleep retention) are accepted at
42 * the header level for source compatibility but ignored at runtime.
43 */
44
45#ifndef __VSF_ESPIDF_DRIVER_LEDC_H__
46#define __VSF_ESPIDF_DRIVER_LEDC_H__
47
48#include <stdint.h>
49#include <stdbool.h>
50#include <stddef.h>
51
52#include "esp_err.h"
53#include "driver/gpio.h"
54
55#ifdef __cplusplus
56extern "C" {
57#endif
58
59/*============================ MACROS ========================================*/
60
62typedef enum {
67
69typedef enum {
74
76typedef enum {
99
101typedef enum {
108
110typedef enum {
121
123typedef enum {
131
133typedef enum {
138
140typedef enum {
145
146/*============================ TYPES =========================================*/
147
157typedef struct {
165
173typedef struct {
180 int hpoint;
181 struct {
182 unsigned int output_invert: 1;
183 } flags;
185
186/*============================ PROTOTYPES ====================================*/
187
191extern esp_err_t ledc_timer_config(const ledc_timer_config_t *timer_conf);
192
197
202extern esp_err_t ledc_set_duty(ledc_mode_t speed_mode, ledc_channel_t channel, uint32_t duty);
203
207extern esp_err_t ledc_update_duty(ledc_mode_t speed_mode, ledc_channel_t channel);
208
213 uint32_t duty, uint32_t hpoint);
214
219extern uint32_t ledc_get_duty(ledc_mode_t speed_mode, ledc_channel_t channel);
220
224extern int ledc_get_hpoint(ledc_mode_t speed_mode, ledc_channel_t channel);
225
229extern esp_err_t ledc_set_freq(ledc_mode_t speed_mode, ledc_timer_t timer_num, uint32_t freq_hz);
230
235extern uint32_t ledc_get_freq(ledc_mode_t speed_mode, ledc_timer_t timer_num);
236
240extern esp_err_t ledc_stop(ledc_mode_t speed_mode, ledc_channel_t channel, uint32_t idle_level);
241
245extern esp_err_t ledc_timer_pause(ledc_mode_t speed_mode, ledc_timer_t timer_num);
246
250extern esp_err_t ledc_timer_resume(ledc_mode_t speed_mode, ledc_timer_t timer_num);
251
255extern esp_err_t ledc_timer_rst(ledc_mode_t speed_mode, ledc_timer_t timer_num);
256
261 ledc_timer_t timer_sel);
262
263/*
264 * Fade / ISR helpers below are declared for source compatibility but
265 * return ESP_ERR_NOT_SUPPORTED from this shim (no fade hardware engine
266 * is modelled here).
267 */
268
272extern esp_err_t ledc_fade_func_install(int intr_alloc_flags);
273
277extern void ledc_fade_func_uninstall(void);
278
279#ifdef __cplusplus
280}
281#endif
282
283#endif // __VSF_ESPIDF_DRIVER_LEDC_H__
int esp_err_t
Definition esp_err.h:41
esp_err_t ledc_stop(ledc_mode_t speed_mode, ledc_channel_t channel, uint32_t idle_level)
Stop a channel's output and hold it at the given idle level.
Definition driver_ledc_port.c:372
esp_err_t ledc_bind_channel_timer(ledc_mode_t speed_mode, ledc_channel_t channel, ledc_timer_t timer_sel)
Bind a channel to a timer.
Definition driver_ledc_port.c:455
esp_err_t ledc_timer_pause(ledc_mode_t speed_mode, ledc_timer_t timer_num)
Pause a timer. Accepted but reduces to a channel-level stop on this shim.
Definition driver_ledc_port.c:399
esp_err_t ledc_set_duty(ledc_mode_t speed_mode, ledc_channel_t channel, uint32_t duty)
Set duty cycle value for a channel.
Definition driver_ledc_port.c:240
esp_err_t ledc_channel_config(const ledc_channel_config_t *ledc_conf)
Configure an LEDC channel (duty + timer binding).
Definition driver_ledc_port.c:199
esp_err_t ledc_set_duty_with_hpoint(ledc_mode_t speed_mode, ledc_channel_t channel, uint32_t duty, uint32_t hpoint)
Set duty + hpoint and apply in one call (ESP-IDF v5.x helper).
Definition driver_ledc_port.c:287
ledc_clk_cfg_t
LEDC clock source. Accepted but ignored.
Definition ledc.h:123
@ LEDC_USE_APB_CLK
Definition ledc.h:125
@ LEDC_USE_PLL_DIV_CLK
Definition ledc.h:129
@ LEDC_USE_REF_TICK
Definition ledc.h:126
@ LEDC_AUTO_CLK
Definition ledc.h:124
@ LEDC_USE_RC_FAST_CLK
Definition ledc.h:127
@ LEDC_USE_XTAL_CLK
Definition ledc.h:128
int ledc_get_hpoint(ledc_mode_t speed_mode, ledc_channel_t channel)
Get hpoint of a channel. Always returns 0 on this shim.
Definition driver_ledc_port.c:311
uint32_t ledc_get_freq(ledc_mode_t speed_mode, ledc_timer_t timer_num)
Get the configured frequency of a timer.
Definition driver_ledc_port.c:358
ledc_timer_t
LEDC timer index.
Definition ledc.h:101
@ LEDC_TIMER_3
Definition ledc.h:105
@ LEDC_TIMER_1
Definition ledc.h:103
@ LEDC_TIMER_MAX
Definition ledc.h:106
@ LEDC_TIMER_2
Definition ledc.h:104
@ LEDC_TIMER_0
Definition ledc.h:102
esp_err_t ledc_set_freq(ledc_mode_t speed_mode, ledc_timer_t timer_num, uint32_t freq_hz)
Re-program the timer frequency.
Definition driver_ledc_port.c:318
esp_err_t ledc_timer_rst(ledc_mode_t speed_mode, ledc_timer_t timer_num)
Reset a timer. Accepted but no-op on this shim.
Definition driver_ledc_port.c:448
uint32_t ledc_get_duty(ledc_mode_t speed_mode, ledc_channel_t channel)
Get current duty cycle of a channel.
Definition driver_ledc_port.c:298
esp_err_t ledc_update_duty(ledc_mode_t speed_mode, ledc_channel_t channel)
Apply the previously cached duty of a channel to hardware.
Definition driver_ledc_port.c:258
ledc_intr_type_t
LEDC interrupt type (fade done). Accepted but ignored.
Definition ledc.h:62
@ LEDC_INTR_DISABLE
Definition ledc.h:63
@ LEDC_INTR_MAX
Definition ledc.h:65
@ LEDC_INTR_FADE_END
Definition ledc.h:64
esp_err_t ledc_timer_config(const ledc_timer_config_t *timer_conf)
Configure an LEDC timer (counter frequency + resolution).
Definition driver_ledc_port.c:159
ledc_duty_direction_t
Fade direction.
Definition ledc.h:133
@ LEDC_DUTY_DIR_INCREASE
Definition ledc.h:135
@ LEDC_DUTY_DIR_DECREASE
Definition ledc.h:134
@ LEDC_DUTY_DIR_MAX
Definition ledc.h:136
ledc_timer_bit_t
LEDC duty resolution (in bits).
Definition ledc.h:76
@ LEDC_TIMER_5_BIT
Definition ledc.h:81
@ LEDC_TIMER_14_BIT
Definition ledc.h:90
@ LEDC_TIMER_15_BIT
Definition ledc.h:91
@ LEDC_TIMER_4_BIT
Definition ledc.h:80
@ LEDC_TIMER_16_BIT
Definition ledc.h:92
@ LEDC_TIMER_6_BIT
Definition ledc.h:82
@ LEDC_TIMER_7_BIT
Definition ledc.h:83
@ LEDC_TIMER_12_BIT
Definition ledc.h:88
@ LEDC_TIMER_13_BIT
Definition ledc.h:89
@ LEDC_TIMER_17_BIT
Definition ledc.h:93
@ LEDC_TIMER_2_BIT
Definition ledc.h:78
@ LEDC_TIMER_BIT_MAX
Definition ledc.h:97
@ LEDC_TIMER_8_BIT
Definition ledc.h:84
@ LEDC_TIMER_10_BIT
Definition ledc.h:86
@ LEDC_TIMER_3_BIT
Definition ledc.h:79
@ LEDC_TIMER_11_BIT
Definition ledc.h:87
@ LEDC_TIMER_1_BIT
Definition ledc.h:77
@ LEDC_TIMER_20_BIT
Definition ledc.h:96
@ LEDC_TIMER_19_BIT
Definition ledc.h:95
@ LEDC_TIMER_18_BIT
Definition ledc.h:94
@ LEDC_TIMER_9_BIT
Definition ledc.h:85
ledc_mode_t
LEDC speed mode.
Definition ledc.h:69
@ LEDC_HIGH_SPEED_MODE
Definition ledc.h:71
@ LEDC_SPEED_MODE_MAX
Definition ledc.h:72
@ LEDC_LOW_SPEED_MODE
Definition ledc.h:70
esp_err_t ledc_timer_resume(ledc_mode_t speed_mode, ledc_timer_t timer_num)
Resume a timer. Accepted but reduces to an internal re-enable on this shim.
Definition driver_ledc_port.c:422
esp_err_t ledc_fade_func_install(int intr_alloc_flags)
Install the fade service. Returns ESP_ERR_NOT_SUPPORTED.
Definition driver_ledc_port.c:475
void ledc_fade_func_uninstall(void)
Uninstall the fade service. No-op on this shim.
Definition driver_ledc_port.c:481
ledc_fade_mode_t
Fade mode.
Definition ledc.h:140
@ LEDC_FADE_WAIT_DONE
Definition ledc.h:142
@ LEDC_FADE_NO_WAIT
Definition ledc.h:141
@ LEDC_FADE_MAX
Definition ledc.h:143
ledc_channel_t
LEDC channel index.
Definition ledc.h:110
@ LEDC_CHANNEL_6
Definition ledc.h:117
@ LEDC_CHANNEL_0
Definition ledc.h:111
@ LEDC_CHANNEL_2
Definition ledc.h:113
@ LEDC_CHANNEL_4
Definition ledc.h:115
@ LEDC_CHANNEL_5
Definition ledc.h:116
@ LEDC_CHANNEL_MAX
Definition ledc.h:119
@ LEDC_CHANNEL_3
Definition ledc.h:114
@ LEDC_CHANNEL_7
Definition ledc.h:118
@ LEDC_CHANNEL_1
Definition ledc.h:112
unsigned uint32_t
Definition stdint.h:9
LEDC channel configuration.
Definition ledc.h:173
unsigned int output_invert
Definition ledc.h:182
ledc_timer_t timer_sel
Definition ledc.h:178
ledc_intr_type_t intr_type
Definition ledc.h:177
int hpoint
Definition ledc.h:180
ledc_mode_t speed_mode
Definition ledc.h:175
ledc_channel_t channel
Definition ledc.h:176
int gpio_num
Definition ledc.h:174
uint32_t duty
Definition ledc.h:179
LEDC timer configuration.
Definition ledc.h:157
ledc_timer_bit_t duty_resolution
Definition ledc.h:159
ledc_timer_t timer_num
Definition ledc.h:160
uint32_t freq_hz
Definition ledc.h:161
ledc_clk_cfg_t clk_cfg
Definition ledc.h:162
bool deconfigure
Definition ledc.h:163
ledc_mode_t speed_mode
Definition ledc.h:158
Generated from commit: vsfteam/vsf@015f4d1