summaryrefslogtreecommitdiff
path: root/nuttx/configs/avr32dev1
diff options
context:
space:
mode:
authorpatacongo <patacongo@42af7a65-404d-4744-a932-0658087f49c3>2010-10-17 17:38:40 +0000
committerpatacongo <patacongo@42af7a65-404d-4744-a932-0658087f49c3>2010-10-17 17:38:40 +0000
commit93ba4af2ff1dacc63106796eb22f294e7d9030b0 (patch)
tree4a09e894cd6f4a2f031fb8ab8f3feed67e22cce9 /nuttx/configs/avr32dev1
parent0956ec5b471ce98d3ee0bdad3d95e8f55881ccd9 (diff)
downloadpx4-nuttx-93ba4af2ff1dacc63106796eb22f294e7d9030b0.tar.gz
px4-nuttx-93ba4af2ff1dacc63106796eb22f294e7d9030b0.tar.bz2
px4-nuttx-93ba4af2ff1dacc63106796eb22f294e7d9030b0.zip
Add button logic
git-svn-id: svn://svn.code.sf.net/p/nuttx/code/trunk@3030 42af7a65-404d-4744-a932-0658087f49c3
Diffstat (limited to 'nuttx/configs/avr32dev1')
-rwxr-xr-xnuttx/configs/avr32dev1/README.txt4
-rwxr-xr-xnuttx/configs/avr32dev1/include/board.h15
-rwxr-xr-xnuttx/configs/avr32dev1/ostest/defconfig10
-rwxr-xr-xnuttx/configs/avr32dev1/src/avr32dev1_internal.h30
-rwxr-xr-xnuttx/configs/avr32dev1/src/up_buttons.c65
5 files changed, 90 insertions, 34 deletions
diff --git a/nuttx/configs/avr32dev1/README.txt b/nuttx/configs/avr32dev1/README.txt
index c28da89e0..01c38cb0e 100755
--- a/nuttx/configs/avr32dev1/README.txt
+++ b/nuttx/configs/avr32dev1/README.txt
@@ -156,6 +156,10 @@ AVR32DEV1 Configuration Options
the delay actually is 100 seconds.
Individual subsystems can be enabled:
+
+ CONFIG_AVR32_GPIOIRQ - GPIO interrupt support
+ CONFIG_AVR32_GPIOIRQSETA - Set of GPIOs on PORTA that support interrupts
+ CONFIG_AVR32_GPIOIRQSETB - Set of GPIOs on PORTB that support interrupts
CONFIG_AVR32_USARTn - Enable support for USARTn
CONFIG_AVR32_USARTn_RS232 - Configure USARTn as an RS232 interface.
diff --git a/nuttx/configs/avr32dev1/include/board.h b/nuttx/configs/avr32dev1/include/board.h
index c166cae05..7c6371e1d 100755
--- a/nuttx/configs/avr32dev1/include/board.h
+++ b/nuttx/configs/avr32dev1/include/board.h
@@ -43,6 +43,9 @@
#include <nuttx/config.h>
+#include <stdint.h>
+#include <nuttx/irq.h>
+
/************************************************************************************
* Definitions
************************************************************************************/
@@ -135,6 +138,10 @@ EXTERN void avr32_boardinitialize(void);
* returns an 8-bit bit set with each bit associated with a button. See the
* BUTTON* definitions above for the meaning of each bit in the returned value.
*
+ * NOTE: Nothing in the "base" NuttX code calls up_buttoninit(). If you want button
+ * support in an application, your application startup code must call up_buttoninit()
+ * prior to calling any of the other button interfaces.
+ *
************************************************************************************/
#ifdef CONFIG_ARCH_BUTTONS
@@ -161,9 +168,15 @@ EXTERN uint8_t up_buttons(void);
* called when BUTTON1/2 is depressed. The previous interrupt handler value is
* returned (so that it may restored, if so desired).
*
+ * Configuration Notes:
+ * Configuration CONFIG_AVR32_GPIOIRQ must be selected to enable the overall GPIO
+ * IRQ feature and CONFIG_AVR32_GPIOIRQSETA and/or CONFIG_AVR32_GPIOIRQSETB must
+ * be enabled to select GPIOs to support interrupts on. For button support, bits
+ * 2 and 3 must be set in CONFIG_AVR32_GPIOIRQSETB (PB2 and PB3).
+ *
************************************************************************************/
-#ifdef CONFIG_GPIOB_IRQ
+#ifdef CONFIG_AVR32_GPIOIRQ
EXTERN xcpt_t up_irqbutton1(xcpt_t irqhandler);
EXTERN xcpt_t up_irqbutton2(xcpt_t irqhandler);
#endif
diff --git a/nuttx/configs/avr32dev1/ostest/defconfig b/nuttx/configs/avr32dev1/ostest/defconfig
index 0068dae6e..234725b82 100755
--- a/nuttx/configs/avr32dev1/ostest/defconfig
+++ b/nuttx/configs/avr32dev1/ostest/defconfig
@@ -89,7 +89,7 @@ CONFIG_ARCH_INTERRUPTSTACK=n
CONFIG_ARCH_STACKDUMP=y
CONFIG_ARCH_BOOTLOADER=n
CONFIG_ARCH_LEDS=y
-CONFIG_ARCH_BUTTONS=n
+CONFIG_ARCH_BUTTONS=y
CONFIG_ARCH_CALIBRATION=n
CONFIG_ARCH_DMA=n
@@ -103,6 +103,10 @@ CONFIG_AVR32_AVRTOOLSL=n
#
# Individual subsystems can be enabled:
#
+# CONFIG_AVR32_GPIOIRQ - GPIO interrupt support
+# CONFIG_AVR32_GPIOIRQSETA - Set of GPIOs on PORTA that support interrupts
+# CONFIG_AVR32_GPIOIRQSETB - Set of GPIOs on PORTB that support interrupts
+#
# CONFIG_AVR32_USARTn - Enable support for USARTn
# CONFIG_AVR32_USARTn_RS232 - Configure USARTn as an RS232 interface.
# CONFIG_AVR32_USARTn_SPI - Configure USARTn as an SPI interface.
@@ -113,6 +117,10 @@ CONFIG_AVR32_AVRTOOLSL=n
# CONFIG_AVR32_USARTn_ISO786 - Configure USARTn as an ISO786 interface.
#
+CONFIG_AVR32_GPIOIRQ=y
+CONFIG_AVR32_GPIOIRQSETA=0
+CONFIG_AVR32_GPIOIRQSETB=0x0000000c
+
CONFIG_AVR32_USART0=n
CONFIG_AVR32_USART0_RS232=n
CONFIG_AVR32_USART0_SPI=n
diff --git a/nuttx/configs/avr32dev1/src/avr32dev1_internal.h b/nuttx/configs/avr32dev1/src/avr32dev1_internal.h
index f46ed5516..1d3343127 100755
--- a/nuttx/configs/avr32dev1/src/avr32dev1_internal.h
+++ b/nuttx/configs/avr32dev1/src/avr32dev1_internal.h
@@ -43,11 +43,22 @@
#include <nuttx/config.h>
#include <nuttx/compiler.h>
+#include "at91uc3_config.h"
/************************************************************************************
* Definitions
************************************************************************************/
+/* Configuration ********************************************************************/
+
+#if (CONFIG_AVR32_GPIOIRQSETB & 4) == 1
+# define CONFIG_AVR32DEV_BUTTON1_IRQ 1
+#endif
+
+#if (CONFIG_AVR32_GPIOIRQSETB & 8) == 1
+# define CONFIG_AVR32DEV_BUTTON2_IRQ 1
+#endif
+
/* AVRDEV1 GPIO Pin Definitions *****************************************************/
/* LEDs
*
@@ -68,8 +79,23 @@
* PIN 25 PB3 KEY2
*/
-#define PINMUX_GPIO_BUTTON1 (GPIO_ENABLE | GPIO_INPUT | GPIO_PORTB | 2)
-#define PINMUX_GPIO_BUTTON2 (GPIO_ENABLE | GPIO_INPUT | GPIO_PORTB | 3)
+#if CONFIG_AVR32DEV_BUTTON1_IRQ
+# define PINMUX_GPIO_BUTTON1 (GPIO_ENABLE | GPIO_INPUT | GPIO_INTR | \
+ GPIO_INTMODE_BOTH | GPIO_GLITCH | GPIO_PORTB | 2)
+# define GPIO_BUTTON1_IRQ AVR32_IRQ_GPIO_PB2
+#else
+# define PINMUX_GPIO_BUTTON1 (GPIO_ENABLE | GPIO_INPUT | GPIO_GLITCH | \
+ GPIO_PORTB | 2)
+#endif
+
+#if CONFIG_AVR32DEV_BUTTON2_IRQ
+# define PINMUX_GPIO_BUTTON2 (GPIO_ENABLE | GPIO_INPUT | GPIO_INTR | \
+ GPIO_INTMODE_BOTH | GPIO_GLITCH | GPIO_PORTB | 3)
+# define GPIO_BUTTON2_IRQ AVR32_IRQ_GPIO_PB3
+#else
+# define PINMUX_GPIO_BUTTON2 (GPIO_ENABLE | GPIO_INPUT | GPIO_GLITCH | \
+ GPIO_PORTB | 3)
+#endif
/************************************************************************************
* Public Types
diff --git a/nuttx/configs/avr32dev1/src/up_buttons.c b/nuttx/configs/avr32dev1/src/up_buttons.c
index 37434d656..b891d8698 100755
--- a/nuttx/configs/avr32dev1/src/up_buttons.c
+++ b/nuttx/configs/avr32dev1/src/up_buttons.c
@@ -38,7 +38,9 @@
****************************************************************************/
#include <nuttx/config.h>
+#include "at91uc3_config.h"
+#include <sys/types.h>
#include <stdint.h>
#include <nuttx/irq.h>
@@ -59,9 +61,6 @@
* Private Data
****************************************************************************/
-static xcpt_t g_irqbutton1;
-static xcpt_t g_irqbutton2;
-
/****************************************************************************
* Private Functions
****************************************************************************/
@@ -89,7 +88,7 @@ uint8_t up_buttons(void)
uint8_t retval;
retval = at91uc3_gpioread(PINMUX_GPIO_BUTTON1) ? 0 : BUTTON1;
- retval |= sat91uc3_gpioread(PINMUX_GPIO_BUTTON2) ? 0 : BUTTON2;
+ retval |= at91uc3_gpioread(PINMUX_GPIO_BUTTON2) ? 0 : BUTTON2;
return retval;
}
@@ -98,30 +97,33 @@ uint8_t up_buttons(void)
* Name: up_irqbutton1
****************************************************************************/
-#ifdef CONFIG_GPIOB_IRQ
+#ifdef CONFIG_AVR32_GPIOIRQ
xcpt_t up_irqbutton1(xcpt_t irqhandler)
{
+#ifdef CONFIG_AVR32DEV_BUTTON1_IRQ
xcpt_t oldhandler;
- irqstate_t flags;
-
- /* Disable interrupts until we are done */
-
- flags = irqsave();
- /* Get the old button interrupt handler and save the new one */
+ /* Attach the handler */
- oldhandler = g_irqbutton1;
- g_irqbutton1 = irqhandler;
+ gpio_irqattach(GPIO_BUTTON1_IRQ, irqhandler, &oldhandler);
- /* Configure and enable the interrupt */
+ /* Enable/disable the interrupt */
-#warning "Missing Logic"
-
- irqrestore(flags);
+ if (irqhandler)
+ {
+ gpio_irqenable(GPIO_BUTTON1_IRQ);
+ }
+ else
+ {
+ gpio_irqdisable(GPIO_BUTTON1_IRQ);
+ }
/* Return the old button handler (so that it can be restored) */
return oldhandler;
+#else
+ return NULL;
+#endif
}
#endif
@@ -129,30 +131,33 @@ xcpt_t up_irqbutton1(xcpt_t irqhandler)
* Name: up_irqbutton2
****************************************************************************/
-#ifdef CONFIG_GPIOB_IRQ
+#ifdef CONFIG_AVR32_GPIOIRQ
xcpt_t up_irqbutton2(xcpt_t irqhandler)
{
+#ifdef CONFIG_AVR32DEV_BUTTON2_IRQ
xcpt_t oldhandler;
- irqstate_t flags;
- /* Disable interrupts until we are done */
+ /* Attach the handler */
- flags = irqsave();
+ gpio_irqattach(GPIO_BUTTON2_IRQ, irqhandler, &oldhandler);
- /* Get the old button interrupt handler and save the new one */
+ /* Enable/disable the interrupt */
- oldhandler = g_irqbutton2;
- g_irqbutton2 = irqhandler;
-
- /* Configure and enable the interrupt */
-
-#warning "Missing Logic"
-
- irqrestore(flags);
+ if (irqhandler)
+ {
+ gpio_irqenable(GPIO_BUTTON2_IRQ);
+ }
+ else
+ {
+ gpio_irqdisable(GPIO_BUTTON2_IRQ);
+ }
/* Return the old button handler (so that it can be restored) */
return oldhandler;
+#else
+ return NULL;
+#endif
}
#endif