123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051 |
- #include "common.h"
- #include "led.h"
- #include <driver/ledc.h>
- /*
- * Note: the Arduino HAL doesn't handle low frequencies, because it
- * seems to insist on using a high frequency clock source...
- */
- #define LED_PIN_BASE 2
- void led_set(int led, enum led_mode mode)
- {
- static const struct {
- uint32_t freq;
- uint32_t duty;
- } led_modes[] = {
- { 1, 0 }, /* Off */
- { 1, 1 << 12 }, /* On */
- { 2, 1 << 11 }, /* Medium blink (2 Hz) */
- { 1, 1 << 11 }, /* Slow blink (1 Hz) */
- { 4, 1 << 11 } /* Fast blink (4 Hz) */
- };
- ledc_channel_config_t channel_config = {
- .speed_mode = LEDC_LOW_SPEED_MODE,
- .hpoint = 0,
- .flags.output_invert = 0,
- .intr_type = LEDC_INTR_DISABLE,
- .channel = led,
- .timer_sel = led,
- .gpio_num = led + LED_PIN_BASE,
- .duty = led_modes[mode].duty
- };
- ledc_timer_config_t timer_config = {
- .speed_mode = LEDC_LOW_SPEED_MODE,
- .duty_resolution = 12,
- .clk_cfg = LEDC_USE_REF_TICK,
- .timer_num = led,
- .freq_hz = led_modes[mode].freq
- };
- ledc_timer_config(&timer_config);
- ledc_channel_config(&channel_config);
- }
- void led_init(void)
- {
- for (int led = 0; led < 3; led++)
- led_set(led, LED_OFF);
- }
|