gpio-irq-interrupt-10.ino

Efinix Sapphire RV64 : SoC RISC-V 64 bits configurable pour FPGA · Fichier : gpio-irq-interrupt-10.ino · Langage : C · Usage : Gérer un bouton poussoir via une interruption matérielle pour éviter le polling.

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");
    }
}

← Retour à la fiche