Linux - Доступ к GPIO из пространства пользователя

Предыдущая  Содержание  Следующая V*D*V

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().

 

Предыдущая  Содержание  Следующая