Ядро Linux позволяет легко «играть» с GPIO.
Существует включаемый файл для работы с GPIOs:
#include <linux/gpio.h>
GPIOs должен быть выделен перед использованием, хотя текущая реализация не обеспечивает это требование. Основная функция распределения является:
int gpio_request(unsigned int gpio, const char *label);
Параметр GPIO указывает, какой требуется GPIO, а метка связывает строку с ним, что впоследствии может появиться в sysfs. Применяется обычное соглашение: код возврата нуля указывает на успех; в противном случае возвращаемое значение будет отрицательным числом ошибок. GPIO может быть возвращен в систему с:
void gpio_free(unsigned int gpio);
Некоторые GPIOs используются для вывода, другие для ввода. В любом режиме может использоваться подходящий GPIO, хотя только одно направление активно в любой момент времени.Код ядра должен информировать ядро GPIO о том, как использовать строку; это делается с помощью следующих функций:
int gpio_direction_input(unsigned int gpio);
int gpio_direction_output(unsigned int gpio, int value);
В любом случае, gpio - номер GPIO. В выходном случае должно быть указано значение GPIO (ноль или один); GPIO будет установлен соответственно как часть вызова. Для обеих функций возвращаемое значение снова равно нулю или отрицательному числу ошибок. Направление (подходящим образом) GPIO может быть изменено в любое время.
Для входных GPIOs, текущее значение может быть прочитано с:
int gpio_get_value(unsigned int gpio);
Эта функция возвращает значение предоставленной GPIO; он не имеет никаких условий для возврата кода ошибки. Предполагается (правильно во всех случаях), что любые ошибки будут найдены при вызове gpio_direction_input(), поэтому важно проверить возвращаемое значение этой функции.
Установка значения выходных GPIOs всегда может быть сделано с помощью gpio_direction_output(), но, если GPIO, как известно, в режиме вывода уже, gpio_set_value() может быть немного более эффективным:
void gpio_set_value(unsigned int gpio, int value);
Для получения дополнительной информации проверьте эту ссылку: enter link description here