diff options
author | patacongo <patacongo@7fd9a85b-ad96-42d3-883c-3090e2eb8679> | 2012-04-26 23:30:35 +0000 |
---|---|---|
committer | patacongo <patacongo@7fd9a85b-ad96-42d3-883c-3090e2eb8679> | 2012-04-26 23:30:35 +0000 |
commit | d0cf30e83912856d05184cf9e1e196aaf406367a (patch) | |
tree | 9928b966a43e6a8344803e825b0660c82d7d898e /nuttx | |
parent | a82ead552d891295fcf733535f9dea3df3099d5e (diff) | |
download | px4-firmware-d0cf30e83912856d05184cf9e1e196aaf406367a.tar.gz px4-firmware-d0cf30e83912856d05184cf9e1e196aaf406367a.tar.bz2 px4-firmware-d0cf30e83912856d05184cf9e1e196aaf406367a.zip |
Add support for UBW32 buttons
git-svn-id: https://nuttx.svn.sourceforge.net/svnroot/nuttx/trunk@4663 7fd9a85b-ad96-42d3-883c-3090e2eb8679
Diffstat (limited to 'nuttx')
-rw-r--r-- | nuttx/ChangeLog | 1 | ||||
-rw-r--r-- | nuttx/configs/stm3240g-eval/nsh/appconfig | 9 | ||||
-rw-r--r-- | nuttx/configs/ubw32/README.txt | 7 | ||||
-rw-r--r-- | nuttx/configs/ubw32/include/board.h | 50 | ||||
-rw-r--r-- | nuttx/configs/ubw32/src/Makefile | 4 | ||||
-rw-r--r-- | nuttx/configs/ubw32/src/up_buttons.c | 198 |
6 files changed, 269 insertions, 0 deletions
diff --git a/nuttx/ChangeLog b/nuttx/ChangeLog index 9b3715f72..da9041a35 100644 --- a/nuttx/ChangeLog +++ b/nuttx/ChangeLog @@ -2690,3 +2690,4 @@ support getting and setting of the thread or task name. * configs/ubw32: Added a configuration to support the Sparkfun UBW32 PIC32 board. * configs/ubw32/nsh: Added an NSH configuration for the Sparkfun UBW32 PIC32 board. + * configs/ubw32/up_buttons.c: Added button support for Bit Whacker board. diff --git a/nuttx/configs/stm3240g-eval/nsh/appconfig b/nuttx/configs/stm3240g-eval/nsh/appconfig index ac587d8a2..6fe75e7ee 100644 --- a/nuttx/configs/stm3240g-eval/nsh/appconfig +++ b/nuttx/configs/stm3240g-eval/nsh/appconfig @@ -87,3 +87,12 @@ ifeq ($(CONFIG_NET),y) #CONFIGURED_APPS += examples/ftpc #CONFIGURED_APPS += examples/ftpd endif + +# Uncomment to select a graphics example + +ifeq ($(CONFIG_NX),y) +#CONFIGURED_APPS += examples/nx +#CONFIGURED_APPS += examples/nxhello +#CONFIGURED_APPS += examples/nximage +#CONFIGURED_APPS += examples/nxlines +endif diff --git a/nuttx/configs/ubw32/README.txt b/nuttx/configs/ubw32/README.txt index e4706f5b0..f5d1a2781 100644 --- a/nuttx/configs/ubw32/README.txt +++ b/nuttx/configs/ubw32/README.txt @@ -15,6 +15,7 @@ Contents Toolchains Loading NuttX with PICkit2 LEDs + Buttons PIC32MX Configuration Options Configurations @@ -297,6 +298,12 @@ LEDs LED_ASSERTION 4 N/C N/C ON N/C N/C OFF LED_PANIC 5 ON N/C N/C OFF N/C N/C +Buttons +======= + + RE6 User switch + RE7 Program switch + PIC32MX Configuration Options ============================= diff --git a/nuttx/configs/ubw32/include/board.h b/nuttx/configs/ubw32/include/board.h index b2f1fce3c..6fb5dfcd2 100644 --- a/nuttx/configs/ubw32/include/board.h +++ b/nuttx/configs/ubw32/include/board.h @@ -136,6 +136,20 @@ #define LED_NVALUES 6 +/* The UBW32 board has three buttons. + * + * PROGRAM RE7 Pulled high, Grounded/low when depressed + * USER RE6 Pulled high, Grounded/low when depressed + * RESET Not software accessible + */ + +#define BUTTON_PROGRAM 0 +#define BUTTON_USER 1 +#define NUM_BUTTONS 2 + +#define BUTTON_PROGRAM_BIT (1 << BUTTON_PROGRAM) +#define BUTTON_USER_BIT (1 << BUTTON_USER) + /**************************************************************************** * Public Types ****************************************************************************/ @@ -179,6 +193,42 @@ EXTERN void pic32mx_setled(int led, bool ledon); EXTERN void pic32mx_setleds(uint8_t ledset); #endif +/**************************************************************************** + * Button support. + * + * Description: + * up_buttoninit() must be called to initialize button resources. After + * that, up_buttons() may be called to collect the current state of all + * buttons or up_irqbutton() may be called to register button interrupt + * handlers. + * + * After up_buttoninit() has been called, up_buttons() may be called to + * collect the state of all buttons. up_buttons() returns an 8-bit bit set + * with each bit associated with a button. See the BUTTON_*_BIT + * definitions in board.h for the meaning of each bit. + * + * up_irqbutton() may be called to register an interrupt handler that will + * be called when a button is depressed or released. The ID value is a + * button enumeration value that uniquely identifies a button resource. + * See the BUTTON_* definitions in board.h for the meaning of enumeration + * value. The previous interrupt handler address is returned (so that it + * may restored, if so desired). + * + * When an interrupt occurs, it is due to a change on the GPIO input pin + * associated with the button. In that case, all attached change + * notification handlers will be called. Each handler must maintain state + * and determine if the unlying GPIO button input value changed. + * + ****************************************************************************/ + +#ifdef CONFIG_ARCH_BUTTONS +EXTERN void up_buttoninit(void); +EXTERN uint8_t up_buttons(void); +#ifdef CONFIG_ARCH_IRQBUTTONS +EXTERN xcpt_t up_irqbutton(int id, xcpt_t irqhandler); +#endif +#endif + #undef EXTERN #ifdef __cplusplus } diff --git a/nuttx/configs/ubw32/src/Makefile b/nuttx/configs/ubw32/src/Makefile index 4a890cc34..d9161f505 100644 --- a/nuttx/configs/ubw32/src/Makefile +++ b/nuttx/configs/ubw32/src/Makefile @@ -40,6 +40,10 @@ CFLAGS += -I$(TOPDIR)/sched ASRCS = CSRCS = up_boot.c up_leds.c +ifeq ($(CONFIG_ARCH_BUTTONS),y) +CSRCS += up_buttons.c +endif + ifeq ($(CONFIG_NSH_ARCHINIT),y) CSRCS += up_nsh.c endif diff --git a/nuttx/configs/ubw32/src/up_buttons.c b/nuttx/configs/ubw32/src/up_buttons.c new file mode 100644 index 000000000..4fef56705 --- /dev/null +++ b/nuttx/configs/ubw32/src/up_buttons.c @@ -0,0 +1,198 @@ +/**************************************************************************** + * configs/ubw32/src/up_buttons.c + * + * Copyright (C) 2012 Gregory Nutt. All rights reserved. + * Author: Gregory Nutt <gnutt@nuttx.org> + * + * 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 NuttX 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 OWNER 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. + * + ****************************************************************************/ + +/**************************************************************************** + * Included Files + ****************************************************************************/ + +#include <nuttx/config.h> + +#include <stdint.h> +#include <stdbool.h> +#include <debug.h> + +#include <arch/board/board.h> + +#include "chip.h" +#include "up_arch.h" + +#include "pic32mx-internal.h" +#include "ubw-internal.h" + +#ifdef CONFIG_ARCH_BUTTONS + +/**************************************************************************** + * Definitions + ****************************************************************************/ +/* The UBW32 board has three buttons. + * + * PROGRAM RE7 Pulled high, Grounded/low when depressed + * USER RE6 Pulled high, Grounded/low when depressed + * RESET Not software accessible + */ + +#define GPIO_PROGRAM (GPIO_INPUT|GPIO_INT|GPIO_PORTE|GPIO_PIN7) +#define GPIO_USER (GPIO_INPUT|GPIO_INT|GPIO_PORTE|GPIO_PIN6) + +/* Change notification numbers: + * + * RE7 -> No change notification associated with RE7 + * RE6 -> No change notification associated with RE6 + */ + +#define CN_PROGRAM +#define CN_USER + +/**************************************************************************** + * Private Data + ****************************************************************************/ + +/* Pin configuration for each button */ + +static const uint16_t g_buttonset[NUM_BUTTONS] = +{ + GPIO_PROGRAM GPIO_USER +} + +/* Change notification number for each button */ + +#ifdef CONFIG_ARCH_IRQBUTTONS +static const uint8_t g_buttoncn[NUM_BUTTONS] = +{ + CN_PROGRAM, CN_USER +} +#endif + +/**************************************************************************** + * Private Functions + ****************************************************************************/ + +/**************************************************************************** + * Public Functions + ****************************************************************************/ + +/**************************************************************************** + * Name: up_buttoninit + * + * Description: + * up_buttoninit() must be called to initialize button resources. After + * that, up_buttons() may be called to collect the current state of all + * buttons or up_irqbutton() may be called to register button interrupt + * handlers. + * + ****************************************************************************/ + +void up_buttoninit(void) +{ + int i; + + /* Configure input pins */ + + for (i = 0; i < NUM_BUTTONS; i++) + { + pic32mx_configgpio(g_buttonset[i]); + } +} + +/**************************************************************************** + * Name: up_buttons + ****************************************************************************/ + +uint8_t up_buttons(void) +{ + uint8_t ret = 0; + int id; + + /* Configure input pins */ + + for (id = 0; id < NUM_BUTTONS; id++) + { + if (pic32mx_gpioread(g_buttonset[id])) + { + ret |= (1 << id); + } + } + + return ret; +} + +/************************************************************************************ + * Button support. + * + * Description: + * up_buttoninit() must be called to initialize button resources. After + * that, up_buttons() may be called to collect the current state of all + * buttons or up_irqbutton() may be called to register button interrupt + * handlers. + * + * After up_buttoninit() has been called, up_buttons() may be called to + * collect the state of all buttons. up_buttons() returns an 8-bit bit set + * with each bit associated with a button. See the BUTTON_*_BIT definitions in + * board.h for the meaning of each bit. + * + * up_irqbutton() may be called to register an interrupt handler that will + * be called when a button is depressed or released. The ID value is a + * button enumeration value that uniquely identifies a button resource. See the + * BUTTON_* definitions in board.h for the meaning of enumeration value. The + * previous interrupt handler address is returned (so that it may restored, if + * so desired). + * + * Interrupts are automatically enabled when the button handler is attached and + * automatically disabled when the button handler is detached. + * + * When an interrupt occurs, it is due to a change on the GPIO input pin + * associated with the button. In that case, all attached change + * notification handlers will be called. Each handler must maintain state + * and determine if the unlying GPIO button input value changed. + * + ************************************************************************************/ + +#ifdef CONFIG_ARCH_IRQBUTTONS +xcpt_t up_irqbutton(int id, xcpt_t irqhandler) +{ + xcpt_t oldhandler = NULL; + + if (id < NUM_BUTTONS) + { + oldhandler = pic32mx_gpioattach(g_buttonset[id], g_buttoncn[id], irqhandler); + if (irqbuttron) + { + pic32mx_gpioirqenable(g_buttoncn[id]); + } + } + return oldhandler; +} +#endif +#endif /* CONFIG_ARCH_BUTTONS */ |