gpio-irq-interrupt-10.ino
Configure une interruption GPIO pour détecter l'appui sur un bouton, libérant le processeur du polling constant.
Connectez un bouton entre le pin GPIO et la masse (avec pull-up interne ou externe). La configuration d'interruption nécessite souvent une mappage spécifique dans le fichier de contraintes Efinity pour lier le GPIO à la ligne d'IRQ. Le gestionnaire d'interruption doit être court et rapide.
gpio-irq-interrupt-10.ino
#include <stdio.h>
#include "xhal_gpio.h"
#include "xhal_irq.h"
#define BTN_PIN GPIO_PIN_2
#define IRQ_LINE GPIO_IRQ_LINE_2 // À mapper dans Efinity
volatile int button_pressed = 0;
void gpio_irq_handler(void) {
// Effacer l'interruption
xhal_gpio_clear_irq_status(BTN_PIN);
button_pressed = 1;
}
int main(void) {
xhal_gpio_init();
xhal_gpio_config(BTN_PIN, GPIO_INPUT);
// Configurer l'interruption sur front descendant
xhal_gpio_configure_irq(BTN_PIN, GPIO_IRQ_FALLING);
// Enregistrer le handler
xhal_irq_register(IRQ_LINE, gpio_irq_handler);
xhal_irq_enable(IRQ_LINE);
printf("Waiting for button press...\n");
while(1) {
if (button_pressed) {
printf("Button Pressed!\n");
button_pressed = 0;
}
// WFI pour économie d'énergie (si supporté)
// asm volatile("wfi");
}
}