diff --git a/examples/galileo/Makefile b/examples/galileo/Makefile index 6af6b61e3..f9f678481 100644 --- a/examples/galileo/Makefile +++ b/examples/galileo/Makefile @@ -1,6 +1,6 @@ TARGET=galileo -KNOWN_EXAMPLES = gpio-output i2c-LSM9DS0 +KNOWN_EXAMPLES = gpio-input gpio-output i2c-LSM9DS0 ifneq ($(filter $(EXAMPLE),$(KNOWN_EXAMPLES)),) CONTIKI_PROJECT = $(EXAMPLE) diff --git a/examples/galileo/README b/examples/galileo/README index 87f3f0ec7..b7698cb5d 100644 --- a/examples/galileo/README +++ b/examples/galileo/README @@ -23,6 +23,14 @@ 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. +GPIO Input +========== + +This application shows how to use the GPIO driver APIs to manipulate input +pins. This application uses default galileo pinmux initialization and sets +the GPIO 5 (IO2) as output pin and GPIO 6 (IO3) as input. It toggles the +output pin state at every half second and checks the value on input pin. + ======= = I2C = ======= diff --git a/examples/galileo/gpio-input.c b/examples/galileo/gpio-input.c new file mode 100644 index 000000000..8728d5088 --- /dev/null +++ b/examples/galileo/gpio-input.c @@ -0,0 +1,96 @@ +/* + * 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 "galileo-pinmux.h" +#include "gpio.h" +#include "i2c.h" + +#define PIN_OUTPUT 5 +#define PIN_INPUT 6 + +static uint32_t value; +static struct ctimer timer; +static struct quarkX1000_i2c_config i2c_config; + +PROCESS(gpio_input_process, "GPIO Input Process"); +AUTOSTART_PROCESSES(&gpio_input_process); +/*---------------------------------------------------------------------------*/ +static void +timeout(void *data) +{ + uint8_t value_in; + + /* toggle pin state */ + value = !value; + quarkX1000_gpio_write(PIN_OUTPUT, value); + + quarkX1000_gpio_read(PIN_INPUT, &value_in); + + if (value == value_in) + printf("GPIO pin value match!\n"); + else + printf("GPIO pin value DOESN'T match!\n"); + + ctimer_reset(&timer); +} +/*---------------------------------------------------------------------------*/ +PROCESS_THREAD(gpio_input_process, ev, data) +{ + PROCESS_BEGIN(); + + i2c_config.speed = QUARKX1000_I2C_SPEED_STANDARD; + i2c_config.addressing_mode = QUARKX1000_I2C_ADDR_MODE_7BIT; + + quarkX1000_i2c_init(); + quarkX1000_i2c_configure(&i2c_config); + + /* use default pinmux configuration */ + galileo_pinmux_initialize(); + + quarkX1000_gpio_init(); + quarkX1000_gpio_config(PIN_OUTPUT, QUARKX1000_GPIO_OUT); + quarkX1000_gpio_config(PIN_INPUT, QUARKX1000_GPIO_IN); + + quarkX1000_gpio_clock_enable(); + + ctimer_set(&timer, CLOCK_SECOND / 2, timeout, NULL); + + printf("GPIO input example is running\n"); + PROCESS_YIELD(); + + quarkX1000_gpio_clock_disable(); + + PROCESS_END(); +}