Работа с GPIO: различия между версиями

Нет описания правки
Строка 7: Строка 7:


<b> Все GPIO (как и остальные порты Wiren Board) работают с напряжением 3.3V. Ни в коем случае не подключайте к GPIO напрямую сигналы, напряжением больше 3.3V! В случае необходимости подключения устройств, работающих с более высоким напряжением, необходимо использовать схемы согласования или подключать (для 5V) через резистор в 20 кОм и более </b>
<b> Все GPIO (как и остальные порты Wiren Board) работают с напряжением 3.3V. Ни в коем случае не подключайте к GPIO напрямую сигналы, напряжением больше 3.3V! В случае необходимости подключения устройств, работающих с более высоким напряжением, необходимо использовать схемы согласования или подключать (для 5V) через резистор в 20 кОм и более </b>
На некоторых GPIO (в частности на 3х GPIO, выведенных на клеммники в Wiren Baord rev. 2.8) можно программно установить 47к подтяжку к +3.3В. См. [[Pin_pull-up]].


===Интерфейс sysfs в Linux ===
===Интерфейс sysfs в Linux ===
Строка 69: Строка 72:
echo 1 > /sys/class/gpio/gpioN/value # установим логический 1  (высокое напряжение) на GPIO номер N
echo 1 > /sys/class/gpio/gpioN/value # установим логический 1  (высокое напряжение) на GPIO номер N
</pre>
</pre>
====Интерфейс sysfs и прерывания====
Через интерфейс sysfs можно запросить прерывания по изменению состояния процессора.
Установка прерывания производится путём записи значения в файл "edge". Значения могут быть:
* "none" - отключить прерывание
* "rising" - включить прерывание по нисходящему фронту
* "falling" - включить прерывание по восодящему фронту
* "both" - включить прерывание по обеим фронтам.
Пример:
<pre>
root@wirenboard:~# echo 3 >  /sys/class/gpio/export # экспортируем GPIO номер 3 (TB10 на WB3.3)
root@wirenboard:~# cat /sys/class/gpio/gpio3/edge  # проверяем состояние прерывания
none
root@wirenboard:~# echo falling > /sys/class/gpio/gpio3/edge # устанавливаем прерывание по нисходящему фронту
root@wirenboard:~# cat /proc/interrupts  | grep gpiolib # прерывание появилось в списке. 26 - внутренний номер прерывания, 0 - количество событий
26:          0  gpio-mxs  3  gpiolib
root@wirenboard:~# cat /proc/interrupts  | grep gpiolib # после нескольких собтий, 76 - количество событий
26:        76  gpio-mxs  3  gpiolib
</pre>
Прерывания можно ловить из userspace с помощью системного вызова epoll() и select() на файл value.
Пример работы см. https://github.com/contactless/wiegand-linux-sysfs
См. также http://elinux.org/GPIO


===Прямое обращение через память процессора===
===Прямое обращение через память процессора===