Добрый день
В новом проекте мне потребовалось вызывать прерывание каждый цикл генерации ШИМ. ESP-IDF предоставляет API ledc. Мне удалось настроить работу таймера. Но по неизвестной мне причине вызов прерывания не идёт.
В чём может быть причина? И как её решить?
Прилагаю код:
На данный момент мне пока пришёл в голову только костыль. Подключить выход шим к другому пину и генерировать прерывания таким образом
В новом проекте мне потребовалось вызывать прерывание каждый цикл генерации ШИМ. ESP-IDF предоставляет API ledc. Мне удалось настроить работу таймера. Но по неизвестной мне причине вызов прерывания не идёт.
В чём может быть причина? И как её решить?
Прилагаю код:
C++:
ledc_timer_config_t ledc_timer;
ledc_channel_config_t ledc_channel;
void IRAM_ATTR isr_handler(void *param) {
static bool flag;
digitalWrite(22, flag);
flag = !flag;
}
void setup() {
pinMode(22, OUTPUT);
delay(100);
ledc_timer.duty_resolution = LEDC_TIMER_4_BIT; // resolution of PWM duty
ledc_timer.freq_hz = 8000; // frequency of PWM signal 00
ledc_timer.speed_mode = LEDC_HIGH_SPEED_MODE; // timer mode
ledc_timer.timer_num = LEDC_TIMER_0; // timer index
ledc_channel.gpio_num = 2; //
ledc_channel.speed_mode = LEDC_HIGH_SPEED_MODE; //
ledc_channel.channel = LEDC_CHANNEL_0; //
ledc_channel.timer_sel = LEDC_TIMER_0; //
ledc_channel.duty = 1; //
int a = ledc_timer_config(&ledc_timer);
int b = ledc_channel_config(&ledc_channel);
int c = ledc_fade_func_install(ESP_INTR_FLAG_IRAM);
int d = ledc_fade_start(LEDC_HIGH_SPEED_MODE, LEDC_CHANNEL_0, LEDC_FADE_NO_WAIT);
int e = ledc_isr_register(isr_handler, NULL, ESP_INTR_FLAG_IRAM, NULL);
}