🛠 Configuración de GPIO y control de periféricos en Sapphire RV64

Efinix Sapphire RV64: SoC RISC-V de 64 bits configurable para FPGA · intermediaire · Apprenez à configurer les broches GPIO du SoC Sapphire RV64 via Efinity pour interagir avec des composants externes comme des LED ou des capteurs.

Objetivos

Este tutorial tiene como objetivo comprender la arquitectura de E/S del SoC Efinix Sapphire RV64. Configuraremos los bloques GPIO disponibles en la lógica programable para controlar una salida digital (LED) o leer una entrada (botón/sensor). El enfoque está en la configuración de hardware mediante Efinity y el acceso a registros de memoria desde software embebido.

Equipo necesario

Pasos

  1. Configuración del SoC en Efinity: Abra su proyecto Efinity. En la configuración del SoC Sapphire, habilite el bloque GPIO. Puede asignar hasta 32 GPIO. Asegúrese de que los pines físicos seleccionados no entren en conflicto con otras interfaces (UART, SPI).
  2. Generación de bitstream: Compile el proyecto para generar el archivo de configuración FPGA. Cárguelo en la tarjeta.
  3. Identificación de direcciones de memoria: Consulte el informe de generación para encontrar la dirección base del bloque GPIO. Por defecto, los registros de control y datos se mapean en el espacio de memoria.
  4. Escritura de código C: Use punteros para acceder a los registros. Por ejemplo, para encender un LED en GPIO 0:
#define GPIO_BASE 0x01000000
#define GPIO_DIR 0x00
#define GPIO_OUT 0x04

void main() {
    // Configurar GPIO 0 como salida (bit 0 a 1)
    *(volatile unsigned int*)(GPIO_BASE + GPIO_DIR) |= (1 << 0);
    // Establecer GPIO 0 en estado alto
    *(volatile unsigned int*)(GPIO_BASE + GPIO_OUT) |= (1 << 0);
    while(1);
}
  1. Compilación y transferencia: Compile el código con la cadena de herramientas RISC-V adaptada al núcleo VexiiRiscv. Cargue el binario mediante JTAG o UART.

Verificación

Observe que el LED se enciende tras la ejecución del programa. Si usa un botón, configure el GPIO como entrada y lea el registro de entrada para detectar cambios de estado. Use el depurador RISC-V para verificar los valores de los registros en tiempo real.

Para ir más allá

Explore las interrupciones de periféricos externos (EPI) para reaccionar a cambios de estado de GPIO sin polling. Integre un sensor I2C para diversificar las entradas de E/S.

Otros tutoriales para esta placa

Ejemplos de código para esta placa

← Volver a la ficha 🛠 Todos los tutoriales