summaryrefslogtreecommitdiff
path: root/nuttx/configs/pic32mz-starterkit
diff options
context:
space:
mode:
authorGregory Nutt <gnutt@nuttx.org>2015-03-02 10:01:10 -0600
committerGregory Nutt <gnutt@nuttx.org>2015-03-02 10:01:10 -0600
commit7d48dc09f36aff69e7cdf4b4c2152d650545c553 (patch)
tree5e39db622f70c3abe1c8d16c58d4a001a5e92d49 /nuttx/configs/pic32mz-starterkit
parent3b95bac0ac4b7f79c4a19f1678d4703ca0a24c81 (diff)
downloadpx4-nuttx-7d48dc09f36aff69e7cdf4b4c2152d650545c553.tar.gz
px4-nuttx-7d48dc09f36aff69e7cdf4b4c2152d650545c553.tar.bz2
px4-nuttx-7d48dc09f36aff69e7cdf4b4c2152d650545c553.zip
PIC32MZ Starter Kit: Add support for on-board buttons
Diffstat (limited to 'nuttx/configs/pic32mz-starterkit')
-rw-r--r--nuttx/configs/pic32mz-starterkit/include/board.h9
-rw-r--r--nuttx/configs/pic32mz-starterkit/nsh/defconfig4
-rw-r--r--nuttx/configs/pic32mz-starterkit/src/Makefile4
-rw-r--r--nuttx/configs/pic32mz-starterkit/src/pic32mz-starterkit.h13
-rw-r--r--nuttx/configs/pic32mz-starterkit/src/pic32mz_buttons.c184
5 files changed, 211 insertions, 3 deletions
diff --git a/nuttx/configs/pic32mz-starterkit/include/board.h b/nuttx/configs/pic32mz-starterkit/include/board.h
index d6a53f3b0..0d3a458de 100644
--- a/nuttx/configs/pic32mz-starterkit/include/board.h
+++ b/nuttx/configs/pic32mz-starterkit/include/board.h
@@ -229,6 +229,15 @@
* are grounded when pressed.
*/
+#define BUTTON_SW1 0
+#define BUTTON_SW2 1
+#define BUTTON_SW3 2
+#define NUM_BUTTONS 3
+
+#define BUTTON_SW1_BIT (1 << BUTTON_SW1)
+#define BUTTON_SW2_BIT (1 << BUTTON_SW2)
+#define BUTTON_SW3_BIT (1 << BUTTON_SW3)
+
/* UARTS ********************************************************************/
/* If the PIC32MZEC Adaptor Board is connected, then UART1 signals are
* available at these locations on the adaptor board:
diff --git a/nuttx/configs/pic32mz-starterkit/nsh/defconfig b/nuttx/configs/pic32mz-starterkit/nsh/defconfig
index 8cd3f3e77..d35b1c0b2 100644
--- a/nuttx/configs/pic32mz-starterkit/nsh/defconfig
+++ b/nuttx/configs/pic32mz-starterkit/nsh/defconfig
@@ -147,6 +147,7 @@ CONFIG_PIC32MZ_UART1=y
# CONFIG_PIC32MZ_CAN2 is not set
# CONFIG_PIC32MZ_ETHERNET is not set
# CONFIG_PIC32MZ_CTMU is not set
+# CONFIG_PIC32MZ_GPIOIRQ is not set
# CONFIG_PIC32MZ_T1_SOSC is not set
#
@@ -240,6 +241,8 @@ CONFIG_ARCH_BOARD="pic32mz-starterkit"
#
CONFIG_ARCH_HAVE_LEDS=y
CONFIG_ARCH_LEDS=y
+CONFIG_ARCH_HAVE_BUTTONS=y
+# CONFIG_ARCH_BUTTONS is not set
CONFIG_NSH_MMCSDMINOR=0
CONFIG_NSH_MMCSDSLOTNO=0
@@ -745,6 +748,7 @@ CONFIG_NSH_BUILTIN_APPS=y
# CONFIG_NSH_DISABLE_MKRD is not set
# CONFIG_NSH_DISABLE_MH is not set
# CONFIG_NSH_DISABLE_MOUNT is not set
+# CONFIG_NSH_DISABLE_MV is not set
# CONFIG_NSH_DISABLE_MW is not set
# CONFIG_NSH_DISABLE_PS is not set
# CONFIG_NSH_DISABLE_PUT is not set
diff --git a/nuttx/configs/pic32mz-starterkit/src/Makefile b/nuttx/configs/pic32mz-starterkit/src/Makefile
index 35673186a..b2d52d99f 100644
--- a/nuttx/configs/pic32mz-starterkit/src/Makefile
+++ b/nuttx/configs/pic32mz-starterkit/src/Makefile
@@ -46,6 +46,10 @@ else
CSRCS += pic32mz_userleds.c
endif
+ifeq ($(CONFIG_ARCH_BUTTONS),y)
+CSRCS += pic32mz_buttons.c
+endif
+
ifeq ($(CONFIG_NSH_ARCHINIT),y)
CSRCS += pic32mz_nsh.c
endif
diff --git a/nuttx/configs/pic32mz-starterkit/src/pic32mz-starterkit.h b/nuttx/configs/pic32mz-starterkit/src/pic32mz-starterkit.h
index 65b34b6bb..5bc759e9f 100644
--- a/nuttx/configs/pic32mz-starterkit/src/pic32mz-starterkit.h
+++ b/nuttx/configs/pic32mz-starterkit/src/pic32mz-starterkit.h
@@ -128,9 +128,9 @@
* RH2 LED2 High illuminates (GREEN)
*/
-#define GPIO_LED_1 (GPIO_OUTPUT|GPIO_VALUE_ZERO|GPIO_PORTH|GPIO_PIN0)
-#define GPIO_LED_2 (GPIO_OUTPUT|GPIO_VALUE_ZERO|GPIO_PORTH|GPIO_PIN1)
-#define GPIO_LED_3 (GPIO_OUTPUT|GPIO_VALUE_ZERO|GPIO_PORTH|GPIO_PIN2)
+#define GPIO_LED_1 (GPIO_OUTPUT | GPIO_VALUE_ZERO | GPIO_PORTH | GPIO_PIN0)
+#define GPIO_LED_2 (GPIO_OUTPUT | GPIO_VALUE_ZERO | GPIO_PORTH | GPIO_PIN1)
+#define GPIO_LED_3 (GPIO_OUTPUT | GPIO_VALUE_ZERO | GPIO_PORTH | GPIO_PIN2)
/* The PIC32MZ Ethernet Starter kit has 3 user push buttons labelled SW1-3
* on the board:
@@ -146,6 +146,13 @@
* are grounded when pressed.
*/
+#define GPIO_SW_1 (GPIO_INPUT | GPIO_INTERRUPT | GPIO_PULLUP | \
+ GPIO_PORTB | GPIO_PIN12)
+#define GPIO_SW_2 (GPIO_INPUT | GPIO_INTERRUPT | GPIO_PULLUP | \
+ GPIO_PORTB | GPIO_PIN13)
+#define GPIO_SW_3 (GPIO_INPUT | GPIO_INTERRUPT | GPIO_PULLUP | \
+ GPIO_PORTB | GPIO_PIN14)
+
/****************************************************************************
* Public Types
****************************************************************************/
diff --git a/nuttx/configs/pic32mz-starterkit/src/pic32mz_buttons.c b/nuttx/configs/pic32mz-starterkit/src/pic32mz_buttons.c
new file mode 100644
index 000000000..fb16c5da3
--- /dev/null
+++ b/nuttx/configs/pic32mz-starterkit/src/pic32mz_buttons.c
@@ -0,0 +1,184 @@
+/****************************************************************************
+ * configs/pic32mz-starterkit/src/pic32mz_buttons.c
+ *
+ * Copyright (C) 2015 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 <nuttx/arch.h>
+#include <nuttx/board.h>
+#include <arch/board/board.h>
+
+#include "pic32mz-gpio.h"
+#include "pic32mz-starterkit.h"
+
+#ifdef CONFIG_ARCH_BUTTONS
+
+/****************************************************************************
+ * Pre-processor Definitions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Functions
+ ****************************************************************************/
+
+/* Pin configuration for each start kit switch. This array is indexed by
+ * the BUTTON_* definitions in board.h
+ */
+
+static const pinset_t g_buttons[NUM_BUTTONS] =
+{
+ GPIO_SW_1, GPIO_SW_2, GPIO_SW_3
+};
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: board_button_initialize
+ *
+ * Description:
+ * board_button_initialize() must be called to initialize button resources.
+ * After that, board_buttons() may be called to collect the current state
+ * of all buttons or board_button_irq() may be called to register button
+ * interrupt handlers.
+ *
+ ****************************************************************************/
+
+void board_button_initialize(void)
+{
+ int i;
+
+ /* Configure the GPIO pins as inputs. NOTE that EXTI interrupts are
+ * configured for all pins.
+ */
+
+ for (i = 0; i < NUM_BUTTONS; i++)
+ {
+ pic32mz_configgpio(g_buttons[i]);
+ }
+}
+
+/****************************************************************************
+ * Name: board_buttons
+ ****************************************************************************/
+
+uint8_t board_buttons(void)
+{
+ uint8_t ret = 0;
+ int i;
+
+ /* Check that state of each key */
+
+ for (i = 0; i < NUM_BUTTONS; i++)
+ {
+ /* A LOW value means that the key is pressed. */
+
+ bool released = pic32mz_gpioread(g_buttons[i]);
+
+ /* Accumulate the set of depressed (not released) keys */
+
+ if (!released)
+ {
+ ret |= (1 << i);
+ }
+ }
+
+ return ret;
+}
+
+/*****************************************************************************
+ * Button interrupt support.
+ *
+ * Description:
+ * board_button_initialize() must be called to initialize button resources.
+ * After that, board_buttons() may be called to collect the current state
+ * of all buttons or board_button_irq() may be called to register button
+ * interrupthandlers.
+ *
+ * After board_button_initialize() has been called, board_buttons() may be
+ * called to collect the state of all buttons. board_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.
+ *
+ * board_button_irq() 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).
+ *
+ *****************************************************************************/
+
+#ifdef CONFIG_ARCH_IRQBUTTONS
+xcpt_t board_button_irq(int id, xcpt_t irqhandler)
+{
+#ifdef CONFIG_PIC32MZ_GPIOIRQ_PORTB
+ xcpt_t oldhandler = NULL;
+
+ if ((unsigned)id < NUM_BUTTONS)
+ {
+ /* Perform the attach/detach operation */
+
+ oldhandler = pic32mz_gpioattach(g_buttons[id], irqhandler);
+
+ /* The interrupt is now disabled. Are we attaching or detaching from
+ * button interrupt?
+ */
+
+ if (irqhandler)
+ {
+ /* Attaching... enable button interrupts now */
+
+ pic32mz_gpioirqenable(g_buttons[id]);
+ }
+ }
+
+ return oldhandler;
+#else
+ return NULL;
+#endif
+}
+#endif
+#endif /* CONFIG_ARCH_BUTTONS */