gpio-led-blink-loongarch.ino
Ejemplo en C que utiliza la API GPIOv2 del kernel Linux para controlar un LED a través del bus interno del puerto de extensión.
Compilado con gcc bajo Loongnix o LoongOS. El BPI-5202 expone los GPIO a través de /dev/gpiochip0. Consulte el esquema para la correspondencia exacta de los pines físicos. Ejecute como root: sudo ./led_blink.
gpio-led-blink-loongarch.ino
#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>
#include <sys/ioctl.h>
#include <linux/gpio.h>
#define GPIO_PIN 17 // Exemple de broche sur le connecteur 20-pin
int main() {
int fd;
struct gpiohandle_request req;
struct gpiohandle_data data;
// Ouvrir le contrôleur GPIO
fd = open("/dev/gpiochip0", O_RDONLY);
if (fd < 0) {
perror("Failed to open gpiochip0");
return 1;
}
// Configurer la demande de ligne GPIO
req.lineoffsets[0] = GPIO_PIN;
req.flags = GPIOHANDLE_REQUEST_OUTPUT;
req.default_values[0] = 0; // Éteint au démarrage
req.lines = 1;
req.consumer_label = "bpi5202_led";
// Demander la ligne GPIO
if (ioctl(fd, GPIO_GET_LINEHANDLE_IOCTL, &req) < 0) {
perror("Failed to request GPIO line");
close(fd);
return 1;
}
printf("Blinking LED on GPIO %d...\n", GPIO_PIN);
while (1) {
// Allumer
data.values[0] = 1;
ioctl(req.fd, GPIOHANDLE_SET_LINE_VALUES_IOCTL, &data);
sleep(1);
// Éteindre
data.values[0] = 0;
ioctl(req.fd, GPIOHANDLE_SET_LINE_VALUES_IOCTL, &data);
sleep(1);
}
close(req.fd);
close(fd);
return 0;
}