У базі даних ESP-IDF роботу з перериваннями розділено на два шари: Hardware Interrupt API (загальна робота з процесорними перериваннями контролера) та Периферійні ISR API (робота з перериваннями конкретних модулів, таких як GPIO, Timers, UART тощо).
Це базові низькорівневі функції для виділення, прив'язки та керування перериваннями на рівні процесора (Xtensa / RISC-V).
Функція Опис
esp_intr_alloc() Виділяє вектор переривання з вказаним пріоритетом і прив'язує обробник.
esp_intr_alloc_intrstatus() Виділяє вектор переривання з підтримкою перевірки регістру статусу (для декількох джерел).
esp_intr_free() Звільняє виділене переривання та деактивує його вектор.
esp_intr_enable() Увімкає (розблоковує) конкретне оброблюване переривання.
esp_intr_disable() Вимкає (блокує) конкретне переривання.
esp_intr_get_cpu() Повертає номер ядра CPU, до якого прив'язано переривання.
esp_intr_get_intno() Повертає апаратний номер лінії переривання.
esp_intr_nonmaskable_enable() Вмикає немасковане переривання (NMI).
esp_intr_nonmaskable_disable() Вимкає немасковане переривання (NMI).
Функції для обробки сигналів на зовнішніх виводах мікроконтролера.
Функція Опис
gpio_install_isr_service() Ініціалізує глобальну службу обробки переривань GPIO (викликається один раз).
gpio_uninstall_isr_service() Видаляє службу обробки переривань GPIO та звільняє ресурси.
gpio_isr_handler_add() Додає ISR-обробник для конкретного пина GPIO з передачею аргументу.
gpio_isr_handler_remove() Видаляє ISR-обробник для вказаного пина GPIO.
gpio_isr_register() Реєструє єдиний загальний ISR-обробник для всіх GPIO (низькорівневий підхід).
gpio_intr_enable() Дозволяє генерувати переривання на конкретному пині GPIO.
gpio_intr_disable() Забороняє генерувати переривання на конкретному пині GPIO.
gpio_set_intr_type() Встановлює тип тригера (по фронту RISING/FALLING, по рівню HIGH/LOW).
gpio_wakeup_enable() Налаштовує пин GPIO для пробудження контролера з глибокого сну (Deep/Light Sleep).
gpio_wakeup_disable() Вимкає пробудження системи з даного пина GPIO.
Обробка подій досягнення лічильником заданого значення.
Новий драйвер (driver/gptimer.h — ESP-IDF v5.0+)
Функція Опис
gptimer_register_event_callbacks() Реєструє структури зворотного виклику (callback), що виконуються в ISR при збігу таймера.
Застарілий драйвер (driver/timer.h — ESP-IDF v4.x)
Функція Опис
timer_isr_callback_add() Додає ISR callback для конкретного таймера.
timer_isr_register() Реєструє загальний ISR-обробник для групи таймерів.
timer_group_intr_enable() Вмикає переривання для вказаного таймера в групі.
timer_group_intr_disable() Вимкає переривання для таймера в групі.
Використовуються для тимчасового блокування виконання інших переривань, коли треба гарантувати атомарність операції.
Макрос / Функція
Опис
portENTER_CRITICAL(&mux)
Входить у критичну секцію (забороняє переривання з пріоритетом нижче NMI на даному ядрі).
portEXIT_CRITICAL(&mux)
Виходить з критичної секції (відновлює стан переривань).
portENTER_CRITICAL_ISR(&mux)
Входить у критичну секцію всередині іншого ISR-обробника.
portEXIT_CRITICAL_ISR(&mux)
Виходить з критичної секції всередині ISR-обробника.
taskENTER_CRITICAL() / taskEXIT_CRITICAL()
Аліаси для захисту системних викликів FreeRTOS.
Використовуються в кінці будь-якого ISR, якщо робота з чергою, семафором або подією розблокувала задачу з вищим пріоритетом.
Функція / Макрос
Опис
portYIELD_FROM_ISR()
Примусово викликає планувальник FreeRTOS для миттєвого перемикання контексту задач після ISR.
portYIELD_FROM_ISR(high_task_woken)
Передає прапорець pdTRUE/pdFALSE для оцінки необхідності перемикання.
Звичайні функції FreeRTOS заборонено викликати в перериваннях. Для цього застосовуються спеціальні ISR-версії:
Черги (Queues): xQueueSendFromISR(), xQueueSendToBackFromISR(), xQueueSendToFrontFromISR(), xQueueReceiveFromISR(), xQueueOverwriteFromISR()
Семафори та М'ютекси: xSemaphoreGiveFromISR(), xSemaphoreTakeFromISR()
Групи подій (Event Groups): xEventGroupSetBitsFromISR(), xEventGroupClearBitsFromISR()
Сповіщення задач (Task Notifications): vTaskNotifyGiveFromISR(), xTaskNotifyFromISR()
Програмні таймери: xTimerStartFromISR(), xTimerStopFromISR(), xTimerResetFromISR()