1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950 |
- #include "common.h"
- #include "pins.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...
- */
- 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 + PIN_LED_0,
- .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);
- }
|