From cc51f89b3154c5328e5cad5b1d8cfd0c12e1c053 Mon Sep 17 00:00:00 2001 From: Ricardo de Almeida Gonzaga Date: Thu, 24 Sep 2015 14:24:46 -0300 Subject: [PATCH] galileo: Add GPIO output example This patch introduces an example application to demonstrate how to use GPIO driver APIs to manipulate output pins. The application sets the GPIO 4 pin as output pin and toggles its state at every half second. --- examples/galileo/Makefile | 16 ++++++++ examples/galileo/README | 25 ++++++++++++ examples/galileo/gpio-output.c | 73 ++++++++++++++++++++++++++++++++++ 3 files changed, 114 insertions(+) create mode 100644 examples/galileo/Makefile create mode 100644 examples/galileo/README create mode 100644 examples/galileo/gpio-output.c diff --git a/examples/galileo/Makefile b/examples/galileo/Makefile new file mode 100644 index 000000000..95539c7e6 --- /dev/null +++ b/examples/galileo/Makefile @@ -0,0 +1,16 @@ +KNOWN_EXAMPLES = gpio-output + +ifneq ($(filter $(EXAMPLE),$(KNOWN_EXAMPLES)),) + CONTIKI_PROJECT = $(EXAMPLE) +else + CONTIKI_PROJECT = help +endif + +all: $(CONTIKI_PROJECT) + +CONTIKI = ../.. +include $(CONTIKI)/Makefile.include + +help: + @echo -e "\nSet the variable EXAMPLE to one of the following Galileo-specific examples:" + @for EXAMPLE in $(KNOWN_EXAMPLES); do echo $$EXAMPLE; done diff --git a/examples/galileo/README b/examples/galileo/README new file mode 100644 index 000000000..cdd2133a9 --- /dev/null +++ b/examples/galileo/README @@ -0,0 +1,25 @@ +Galileo Specific Examples +======================= + +This directory contains galileo-specific example applications to illustrate +how to use galileo APIs. + +In order to build a application, you should set the EXAMPLE environment +variable to the name of the application you want to build. For instance, if +you want to build gpio-output application, run the following command: +$ make TARGET=galileo EXAMPLE=gpio-output + +============ += GPIO = +============ + +GPIO Output +=========== + +This application shows how to use the GPIO driver APIs to manipulate output +pins. This application sets the GPIO 4 pin as output pin and toggles its +state at every half second. + +For a visual effect, you should wire shield pin IO1 to a led in a protoboard. +Once the application is running, you should see a blinking LED. + diff --git a/examples/galileo/gpio-output.c b/examples/galileo/gpio-output.c new file mode 100644 index 000000000..39a92516f --- /dev/null +++ b/examples/galileo/gpio-output.c @@ -0,0 +1,73 @@ +/* + * Copyright (C) 2015, Intel Corporation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * 3. Neither the name of the copyright holder nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include + +#include "contiki.h" +#include "sys/ctimer.h" + +#include "gpio.h" + +#define PIN 4 /* IO1 */ + +static uint32_t value; +static struct ctimer timer; + +PROCESS(gpio_output_process, "GPIO Output Process"); +AUTOSTART_PROCESSES(&gpio_output_process); +/*---------------------------------------------------------------------------*/ +static void +timeout(void *data) +{ + /* toggle pin state */ + value = !value; + quarkX1000_gpio_write(PIN, value); + + ctimer_reset(&timer); +} +/*---------------------------------------------------------------------------*/ +PROCESS_THREAD(gpio_output_process, ev, data) +{ + PROCESS_BEGIN(); + + quarkX1000_gpio_init(); + quarkX1000_gpio_config(PIN, QUARKX1000_GPIO_OUT); + + quarkX1000_gpio_clock_enable(); + + ctimer_set(&timer, CLOCK_SECOND / 2, timeout, NULL); + + printf("GPIO output example is running\n"); + PROCESS_YIELD(); + + quarkX1000_gpio_clock_disable(); + + PROCESS_END(); +}