🛠 Controlar GPIOs en Sapphire RV64

Efinix Sapphire RV64: SoC RISC-V de 64 bits configurable para FPGA · debutant · Apprenez à configurer et piloter les broches d'entrée/sortie générales (GPIO) de votre SoC Sapphire RV64 pour interagir avec le monde physique.

Objetivos

Este tutorial le guía en la configuración y uso de las interfaces de Entrada/Salida de Propósito General (GPIO) del SoC Sapphire RV64. Aprenderá a habilitar periféricos de E/S, comprender su direccionamiento de memoria a través del bus AXI4/APB3 y manipular registros para encender un LED o leer un botón. Este es el primer paso esencial para cualquier proyecto embebido que requiera interacción física.

Hardware Necesario

Pasos

  1. Configurar el periférico GPIO: En Efinity, abra su proyecto Sapphire RV64. Acceda a la configuración del SoC y asegúrese de que el bloque GPIO esté habilitado. Seleccione el número deseado de pines (hasta 32 GPIOs disponibles). Configure el ancho de bus (típicamente 32 bits para el registro de datos).
  1. Generar el bitstream: Genere el bitstream FPGA. Este paso sintetiza el núcleo VexiiRiscv y los periféricos, incluidos los GPIOs, en el FPGA. Cargue el bitstream en su placa.
  1. Identificar direcciones de memoria: Consulte la documentación generada por Efinity para encontrar la dirección base de los GPIO. Por ejemplo, suponga que la dirección base es 0x10000000. Los registros típicos incluyen: Dirección (0x00), Datos (0x04) y Máscara (0x08).
  1. Escribir el código C: Cree un archivo main.c. Defina punteros a los registros GPIO.
#include <stdint.h>

#define GPIO_BASE 0x10000000
#define GPIO_DIR  (*(volatile uint32_t *)(GPIO_BASE + 0x00))
#define GPIO_DATA (*(volatile uint32_t *)(GPIO_BASE + 0x04))

void main() {
    // Configurar el pin 0 como salida (bit 0 a 1)
    GPIO_DIR |= (1 << 0);
    
    while(1) {
        GPIO_DATA ^= (1 << 0); // Alternar LED
        for(volatile int i=0; i<100000; i++); // Retraso simple
    }
}
  1. Compilar y flashear: Compile el código con el compilador RISC-V apropiado (objetivo RV64IMACFD). Cargue el binario en la memoria del SoC vía JTAG o UART según su configuración.

Verificación

Una vez que se ejecuta el programa, el LED conectado al pin GPIO 0 debe parpadear a intervalos regulares. Si usa un botón en otro pin configurado como entrada, puede agregar una lectura de GPIO_DATA para verificar el estado lógico.

Para Ir Más Allá

Explore el uso de interrupciones GPIO para reaccionar a cambios de estado sin bucles de sondeo, o configure múltiples grupos de GPIO para controlar pantallas de 7 segmentos.

Otros tutoriales para esta placa

Ejemplos de código para esta placa

← Volver a la ficha 🛠 Todos los tutoriales