Linux - Доступ к GPIO из пространства пользователя |
Предыдущая Содержание Следующая |
http://brew-j2me.blogspot.com/
Android Karthik Wednesday, March 24, 2010
Для доступа к контактам GPIO из пространства пользователя ядро Linux предоставляет интерфейс GPIOLIB. Для получения интерфейса GPIOLIB убедитесь, что вы скомпилировали ядро со следующими опциями.
CONFIG_ARCH_REQUIRE_GPIOLIB CONFIG_GPIOLIB CONFIG_GPIO_SYSFS
Теперь вы можете обращаться и манипулировать контактами GPIO из пространства пользователя, используя стандартные вызовы Си, такие как Open, Write, Read, Close и другие.
Перед манипулированием GPIO, необходимые контакты GPIO должны быть экспортированы и должным образом сконфигурированы. Каждый контакт GPIO процессора имеет уникальный номер, обратитесь к документации на процессор.
Для экспорта GPIO необходимо необходимо открыть интерфейс GPIOLIB export и записать номер GPIO, который вы хотите экспортировать.
int exportfd; exportfd = open("/sys/class/gpio/export", O_WRONLY); if (exportfd < 0) { printf("Cannot open GPIO to export it %d\n", errno); return -1; }
Запишите GPIO, который вы хотите экспортировать и закройте интерфейс экспорта.
write(exportfd, "149", 4); close(exportfd);
Затем необходимо сконфигурировать направление GPIO, используя интерфейс GPIOLIB direction.
int directionfd; directionfd = open("/sys/class/gpio/gpio149/direction", O_RDWR); if (directionfd < 0) { printf("Cannot open GPIO direction for 149\n"); return -1; }
Запишите "in", если GPIO является входом или "out", если GPIO является выходом и закройте интерфейс.
write(directionfd, "out", 4); close(directionfd);
Теперь, чтобы установить/сбросить сигнал на контакте GPIO, можно использовать интерфейс GPIOLIB value. Установим ВЫСОКИЙ уровень на линии GPIO:
int valuefd; valuefd = open("/sys/class/gpio/gpio149/value", O_RDWR); if (valuefd < 0) { printf("Cannot open GPIO value for 149\n"); return -1; } write(valuefd, "1", 2); close(valuefd);
Установим НИЗКИЙ уровень на линии GPIO:
int valuefd; valuefd = open("/sys/class/gpio/gpio149/value", O_RDWR); if (valuefd < 0) { printf("Cannot open GPIO value for 149\n"); return -1; } write(valuefd, "0", 2); close(valuefd);
Для чтения состояния GPIO можно использовать функцию read().
|
Предыдущая Содержание Следующая |