Personal tools

Log in

Changes

From IGEP - ISEE Wiki

Jump to: navigation, search

How to use GPIOs

875 bytes added, 16:59, 22 September 2015
no edit summary
__TOC__== Overview ==
This How-To is meant to be a starting point for people to learn use GPIOs for IGEP v2 devices as quickly and easily as possible. For this how-to i used [http://releases.linaro.org/platform/linaro-m/headless/final/linaro-m-headless-tar-20101108-2.tar.gz Linaro Headless], Ubuntu 10.04 with Linaro Toolchain, IGEP v2 RC5 and [http://svn.hylands.org/linux/gpio/ GPIO driver] wrote by Dave Hylands. There are more ways to use GPIOs in IGEP v2, but this one is simple and reliable.<br>
= Feedback There are more ways to use GPIOs. This article show two simple ways to use gpios: bash commandline and Contributing =C-code.
At any point, if you see a mistake you can contribute to For this How-ToI used [http://labs.<br> isee.biz/index.php/IGEP_firmware_Yocto IGEP firmware Yocto]
= Compile GPIO driver source code == Feedback and Contributing ===At any point, if you see a mistake you can contribute to this How-To. Edit yourself !
Download source code from author website using the next command:<br> == Requirements ==<pre>wget For this How-r -np httpto, I used://svn.hylands.org/linux/gpio/</pre> * IGEPv2 Board Due the Makefiles are wrote * Only for Gumstix SDK, C-program example it is necessary change some constants to our Hostalso needed:** Add shortcircuit cable between J990:20 and J990:22 pins. There By default, GPIO 156 (J990:20) and GPIO 157 (J990:22) are: available on these J990 pins.
$/svn.hylands.org/linux/gpio/app/Makefile Another boards tested:
$/svn.hylands.org/linux/gpio/lib/Makefile *IGEP COM MODULE *IGEP COM AQUILA
Search lines: <pre>OVEROTOP ?= /home/gumstix/overo-oeCROSS_COMPILE ?= $(OVEROTOP)/tmp/sysroots/x86_64-linux/usr/armv7a/bin/arm-angstrom-linux-gnueabi-</pre> Replace by, your cross compiler path, for example: <pre>OVEROTOP ?How to chek an GPIO = /CROSS_COMPILE ?= $(OVEROTOP)/usr/bin/arm-linux-gnueabi-</pre> $/svn.hylands.org/linux/gpio/modules/Makefile<br>
Search lines: <pre>OVEROTOP ?= /home/gumstix/overo-oe#CROSS_COMPILE ?= $(OVEROTOP)/tmp/cross/armv7a/bin/arm-angstrom-linux-gnueabi-CROSS_COMPILE ?= $(OVEROTOP)/tmp/sysroots/x86_64-linux/usr/armv7a/bin/arm-angstrom-linuxThe gpio-gnueabiint-KERNEL_PATH &nbsp;?= .test.c program shows one way of using the sysfs file /..sys/..class/../..gpio/gumstixgpioXX/overo-oe/tmp/sysroots/overo-angstrom-linux-gnueabi/kernelARCH ?= arm</pre> Replace by, your cross compiler path and your kernel source path used, for example: <pre>OVEROTOP ?= /#CROSS_COMPILE ?= $(OVEROTOP)/tmp/cross/armv7a/bin/arm-angstrom-linux-gnueabi-CROSS_COMPILE ?= $value to block program execution using poll(OVEROTOP)//usr/bin/arm-linux-gnueabi-KERNEL_PATH &nbsp;?= ../../../../../&lt;your kernel source path used&gt;ARCH ?= arm</pre> Go to: $/svn.hylands.org/linux/gpio/Makefile and compile app, lib and module using make commanduntil the input level on GPIOXX changes.
Transfer binaries created to IGEP v2[[File:GPIO_TEST.tar]]
= Install binaries = Bash commandline ==Basic gpio operations could be done using bash and sysfs :* Export GPIOs <pre>echo "GPIO number NN" > /sys/class/gpio/export</pre>** For example: '''echo "156" > /sys/class/gpio/export'''<br><br>* Unexport GPIOs <pre>echo "GPIO number NN" > /sys/class/gpio/unexport</pre> * Set GPIO direction <pre>echo "out" > /sys/class/gpio/gpioNN/direction</pre>** For example: '''echo "out" > /sys/class/gpio/gpio156/direction'''<br><br>* Set GPIO value =<pre>echo "1" > /sys/class/gpio/gpioNN/value</pre>* Get GPIO value <pre>cat /sys/class/gpio/gpioNN/value</pre>* Configure hardware interrupts <pre>echo "rising" > /sys/class/gpio/gpioNN/edge</pre>
=== Install module ===
Go to:$/svn.hylands.org/linux/gpio/modules/ and insert user== C-gpio-drv.ko into linux kernel with the following command: <pre>insmod user-gpio-drv.ko</pre> Check that user-gpio-drv.ko is currently loaded with the following command:<pre>lsmod</pre>program Example ==
The module is loaded until system haltC-program Example contains some C-functions to control GPIOs.These also can do:* Export and unexport GPIOs* Set GPIO direction * Set GPIO value * Get GPIO value * Configure hardware interrupts
=== Install dynamic library ===Example program configures a GPIO to wait a hardware interrupt. Once the GPIO value change from 0 value to 1 value (rising), program gives you a message.
<br> === Compile example program ===[http://labs.isee.biz/index.php/How_to_setup_a_cross_compiler#Download.2FInstall_IGEP_SDK Download an Install] IGEP SDK if you don't have it.
=== Execute app ===First of all you need to initialize a suitable environment in the bash shell console inside your machine. <br> You can do this sourcing once the environment-setup script. <pre>jdoe@ubuntu ~ $ source /opt/poky/1.2/environment-setup-armv7a-vfp-neon-poky-linux-gnueabi </pre>
<br>* Download [http://labs.isee.biz/images/6/69/Gpio_examplebeta1.tar.bz2 source code]* Extract source code* Build source code:
= Testing driver =Cross toolchain tools are available into the built-in virtual machine Poky SDK. You only need open bash terminal prompt and write command: <pre>jdoe@ubuntu ~/Desktop $ arm-poky-linux-gnueabi-gcc -o gpio_example gpio_examplebeta1.c</pre>
<br> * Copy binary file to IGEP Board
=== Execute program ===Open a remote terminal and locate your program binary, execute program and pass like a parameter 157 value (GPIO 157):<pre>root@igep00x0:~# ./gpio_example 157 <br/pre> ExampleResult will be:[[What can I do with IGEP0020<pre>root@igep00x0:~#How_to_handle_the_gpio-LED.27s]] /gpio_example 157gpio/direction: No such file or directory
[[Categorypoll() GPIO 157 interrupt occurred............. </pre> === Generate interrupts ===Open a second remote terminal and type:Work_in_progress]] [[Category<pre>cd /sys/class/gpio/echo 156 > export cd gpio156/ echo out > directionecho 0 > valueecho 1 > value</pre> === Result ===At first remote terminal you should read a message similar like this:Communications]]<pre>poll() GPIO 157 interrupt occurred </pre>