gpio-irq-interrupt-10.ino

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

Configura una interrupción GPIO para detectar la pulsación de un botón, liberando al procesador del sondeo constante.

Conecte un botón entre el pin GPIO y tierra (con pull-up interno o externo). La configuración de interrupciones a menudo requiere un mapeo específico en el archivo de restricciones de Efinity para vincular el GPIO a la línea IRQ. El manejador de interrupciones debe ser corto y rápido.

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

← Volver a la ficha