Difference between revisions of "GPIOlib"

From ArmadeusWiki
Jump to: navigation, search
(Get APFxxDev i.MX switch status)
(swith is on PF13 on APF27Dev)
Line 54: Line 54:
 
===Get APFxxDev i.MX switch status===
 
===Get APFxxDev i.MX switch status===
 
* Find the GPIO number connected to the switch, eg:
 
* Find the GPIO number connected to the switch, eg:
** for APF27Dev: '''PF15 ->''' PortF (n°6) pin 15 -> (6-1)*32 + 15 -> '''GPIO n°175'''
+
** for APF27Dev: '''PF13 ->''' PortF (n°6) pin 13 -> (6-1)*32 + 13 -> '''GPIO n°173'''
 
** for APF51Dev: '''GPIO1_3''' -> Port 1 pin 3 -> '''GPIO n°3''' ((1-1)*32 + 3)
 
** for APF51Dev: '''GPIO1_3''' -> Port 1 pin 3 -> '''GPIO n°3''' ((1-1)*32 + 3)
 
* Define envt variable (for portability):
 
* Define envt variable (for portability):
 
<pre class="apf">
 
<pre class="apf">
# export SWITCH=175   (APF27Dev)
+
# export SWITCH=173   (APF27Dev)
 
or
 
or
 
# export SWITCH=3    (APF51Dev)
 
# export SWITCH=3    (APF51Dev)

Revision as of 14:41, 28 September 2011

With recent Linux kernel (> 2.6.3x), there is an abstraction layer meant to ease GPIO usage: gpiolib. We will explain here how to use it.

Installation

  • If not already done:
$ make linux26-menuconfig
Device Drivers  --->
    -*- GPIO Support  --->
        [*]   /sys/class/gpio/... (sysfs interface)
$ make
  • reflash your kernel (if needed)

Usage

Blink APFxxDev i.MX LED

  • Find the GPIO number connected to the LED, eg:
    • for APF27Dev: PF14 -> PortF (n°6) pin 14 -> (6-1)*32 + 14 -> GPIO n°174
    • for APF51Dev: GPIO1_2 -> Port 1 pin 2 -> GPIO n° 2
  • Define envt variable (for portability):
# export LED=174    (APF27Dev)
or
# export LED=2    (APF51Dev)
  • Ask kernel to export the GPIO:
# echo $LED > /sys/class/gpio/export
  • Access functions are created:
# ls /sys/class/gpio/gpio$LED/
active_low  edge        subsystem   value
direction   power       uevent
  • Check GPIO direction and put in output:
# cat /sys/class/gpio/gpio$LED/direction
in
# echo out > /sys/class/gpio/gpio$LED/direction
# cat /sys/class/gpio/gpio$LED/direction
out
  • Play with GPIO value to blink LED:
# echo 1 > /sys/class/gpio/gpio$LED/value
# echo 0 > /sys/class/gpio/gpio$LED/value

Get APFxxDev i.MX switch status

  • Find the GPIO number connected to the switch, eg:
    • for APF27Dev: PF13 -> PortF (n°6) pin 13 -> (6-1)*32 + 13 -> GPIO n°173
    • for APF51Dev: GPIO1_3 -> Port 1 pin 3 -> GPIO n°3 ((1-1)*32 + 3)
  • Define envt variable (for portability):
# export SWITCH=173    (APF27Dev)
or
# export SWITCH=3    (APF51Dev)
  • Ask kernel to export the GPIO:
# echo $SWITCH > /sys/class/gpio/export
  • Access functions are created:
# ls /sys/class/gpio/gpio$SWITCH/
active_low  edge        subsystem   value
direction   power       uevent
  • Check GPIO direction and put in output:
# cat /sys/class/gpio/gpio$SWITCH/direction
in
  • Get switch status:
# cat /sys/class/gpio/gpio$SWITCH/value
1    (released)
...
# cat /sys/class/gpio/gpio$SWITCH/value
0    (pressed)
  • Block until an event occur:
# cat /sys/class/gpio/gpio$SWITCH/edge
none
# echo both > /sys/class/gpio/gpio$SWITCH/edge

Links