Review and update some board configurations

git-svn-id: svn://svn.code.sf.net/p/nuttx/code/trunk@4991 42af7a65-404d-4744-a932-0658087f49c3
This commit is contained in:
patacongo
2012-07-29 18:30:48 +00:00
parent 54d3b68da7
commit 029c2336cb
35 changed files with 237 additions and 254 deletions
+7
View File
@@ -16,5 +16,12 @@ config ARCH_BUTTONS
---help---
"Support interfaces to use buttons provided by the board."
config ARCH_IRQBUTTONS
bool "Button interrupt support"
default n
depends on ARCH_BUTTONS
---help---
"Support interrupts on button presses and releases."
endif
+7
View File
@@ -16,4 +16,11 @@ config ARCH_BUTTONS
---help---
"Support interfaces to use buttons provided by the board."
config ARCH_IRQBUTTONS
bool "Button interrupt support"
default n
depends on ARCH_BUTTONS
---help---
"Support EXTI interrupts on button presses and releases."
endif
+7
View File
@@ -16,4 +16,11 @@ config ARCH_BUTTONS
---help---
"Support interfaces to use buttons provided by the board."
config ARCH_IRQBUTTONS
bool "Button interrupt support"
default n
depends on ARCH_BUTTONS
---help---
"Support interrupts on button presses and releases."
endif
+7
View File
@@ -16,4 +16,11 @@ config ARCH_BUTTONS
---help---
"Support interfaces to use buttons provided by the board."
config ARCH_IRQBUTTONS
bool "Button interrupt support"
default n
depends on ARCH_BUTTONS
---help---
"Support interrupts on button presses and releases."
endif
+82
View File
@@ -18,6 +18,13 @@ config ARCH_BUTTONS
---help---
"Support interfaces to use buttons provided by the board."
config ARCH_IRQBUTTONS
bool "Button interrupt support"
default n
depends on ARCH_BUTTONS
---help---
"Support EXTI interrupts on button presses and releases."
config STM3210E_LCD
bool "Select support for the STM3210E-EVAL LCD"
default y
@@ -105,4 +112,79 @@ config STM32_R61580_DISABLE
endif
config PM_BUTTONS
bool "PM Button support"
default n
depends on PM && ARCH_IRQBUTTONS
---help---
Enable PM button EXTI interrupts to support PM testing
config PM_BUTTONS_MIN
int "Minimum button number"
default 0
depends on PM_BUTTONS
---help---
The lowest button code to use for PM testing (see board.h)
config PM_BUTTONS_MAX
int "Maximum button number"
default 7
depends on PM_BUTTONS
---help---
The highest button code to use for PM testing (see board.h)
config PM_IRQBUTTONS_MIN
int "Minimum interrupting button number"
default 0
depends on PM_BUTTONS
---help---
The lowest interrupting button code to use for PM testing (see board.h)
config PM_IRQBUTTONS_MAX
int "Maximum interrupting button number"
default 7
depends on PM_BUTTONS
---help---
The highest interrupting button code to use for PM testing (see board.h)
config PM_BUTTON_ACTIVITY
int "Button PM activity weight"
default 10
depends on PM_BUTTONS
---help---
The activity weight to report to the power management subsystem when a button is pressed.
config PM_ALARM_SEC
int "PM_STANDBY delay (seconds)"
default 15
depends on PM && RTC_ALARM
--help---
Number of seconds to wait in PM_STANDBY before going to PM_STANDBY mode.
config PM_ALARM_NSEC
int "PM_STANDBY delay (nanoseconds)"
default 0
depends on PM && RTC_ALARM
--help---
Number of additional nanoseconds to wait in PM_STANDBY before going to PM_STANDBY mode.
config PM_SLEEP_WAKEUP
bool "PM_SLEEP wake-up alarm"
default n
depends on PM && RTC_ALARM
--help---
Wake-up of PM_SLEEP mode after a delay and resume normal operation.
config PM_SLEEP_WAKEUP_SEC
int "PM_SLEEP delay (seconds)"
default 10
depends on PM && RTC_ALARM
--help---
Number of seconds to wait in PM_SLEEP before going to PM_STANDBY mode.
config PM_SLEEP_WAKEUP_NSEC
int "PM_SLEEP delay (nanoseconds)"
default 0
depends on PM && RTC_ALARM
--help---
Number of additional nanoseconds to wait in PM_SLEEP before going to PM_STANDBY mode.
+16 -83
View File
@@ -64,31 +64,6 @@
# error "CONFIG_ARCH_BUTTONS is not defined in the configuration"
#endif
#ifndef CONFIG_PM_BUTTONS_NAME0
# define CONFIG_PM_BUTTONS_NAME0 "BUTTON0"
#endif
#ifndef CONFIG_PM_BUTTONS_NAME1
# define CONFIG_PM_BUTTONS_NAME1 "BUTTON1"
#endif
#ifndef CONFIG_PM_BUTTONS_NAME2
# define CONFIG_PM_BUTTONS_NAME2 "BUTTON2"
#endif
#ifndef CONFIG_PM_BUTTONS_NAME3
# define CONFIG_PM_BUTTONS_NAME3 "BUTTON3"
#endif
#ifndef CONFIG_PM_BUTTONS_NAME4
# define CONFIG_PM_BUTTONS_NAME4 "BUTTON4"
#endif
#ifndef CONFIG_PM_BUTTONS_NAME5
# define CONFIG_PM_BUTTONS_NAME5 "BUTTON5"
#endif
#ifndef CONFIG_PM_BUTTONS_NAME6
# define CONFIG_PM_BUTTONS_NAME6 "BUTTON6"
#endif
#ifndef CONFIG_PM_BUTTONS_NAME7
# define CONFIG_PM_BUTTONS_NAME7 "BUTTON7"
#endif
#define BUTTON_MIN 0
#define BUTTON_MAX 7
@@ -106,6 +81,10 @@
# error "CONFIG_PM_BUTTONS_MAX > 7"
#endif
#ifndef CONFIG_ARCH_IRQBUTTONS
# warning "CONFIG_ARCH_IRQBUTTONS is not defined in the configuration"
#endif
#ifndef CONFIG_PM_IRQBUTTONS_MIN
# define CONFIG_PM_IRQBUTTONS_MIN CONFIG_PM_BUTTONS_MIN
#endif
@@ -143,14 +122,6 @@
* Private Types
****************************************************************************/
struct button_info_s
{
FAR const char *name; /* Name for the button */
#ifdef CONFIG_ARCH_IRQBUTTONS
xcpt_t handler; /* Button interrupt handler */
#endif
};
/****************************************************************************
* Private Function Prototypes
****************************************************************************/
@@ -188,72 +159,34 @@ static int button7_handler(int irq, FAR void *context);
* Private Data
****************************************************************************/
/* Button Names */
/* Button interrupt handlers */
static const struct button_info_s g_buttoninfo[NUM_PMBUTTONS] =
#ifdef CONFIG_ARCH_IRQBUTTONS
static const xcpt_t g_buttonhandlers[NUM_PMBUTTONS] =
{
#if MIN_BUTTON < 1
{
CONFIG_PM_BUTTONS_NAME0,
#ifdef CONFIG_ARCH_IRQBUTTONS
button0_handler
#endif
},
button0_handler,
#endif
#if MIN_BUTTON < 2 && MAX_BUTTON > 0
{
CONFIG_PM_BUTTONS_NAME1,
#ifdef CONFIG_ARCH_IRQBUTTONS
button1_handler
#endif
},
button1_handler,
#endif
#if MIN_BUTTON < 3 && MAX_BUTTON > 1
{
CONFIG_PM_BUTTONS_NAME2,
#ifdef CONFIG_ARCH_IRQBUTTONS
button2_handler
#endif
},
button2_handler,
#endif
#if MIN_BUTTON < 4 && MAX_BUTTON > 2
{
CONFIG_PM_BUTTONS_NAME3,
#ifdef CONFIG_ARCH_IRQBUTTONS
button3_handler
#endif
},
button3_handler,
#endif
#if MIN_BUTTON < 5 && MAX_BUTTON > 3
{
CONFIG_PM_BUTTONS_NAME4,
#ifdef CONFIG_ARCH_IRQBUTTONS
button4_handler
#endif
},
button4_handler,
#endif
#if MIN_BUTTON < 6 && MAX_BUTTON > 4
{
CONFIG_PM_BUTTONS_NAME5,
#ifdef CONFIG_ARCH_IRQBUTTONS
button5_handler
#endif
},
button5_handler,
#endif
#if MIN_BUTTON < 7 && MAX_BUTTON > 5
{
CONFIG_PM_BUTTONS_NAME6,
#ifdef CONFIG_ARCH_IRQBUTTONS
button6_handler
#endif
},
button6_handler,
#endif
#if MAX_BUTTON > 6
{
CONFIG_PM_BUTTONS_NAME7,
#ifdef CONFIG_ARCH_IRQBUTTONS
button7_handler
#endif
button7_handler,
}
#endif
};
@@ -371,7 +304,7 @@ void up_pmbuttons(void)
int i;
for (i = CONFIG_PM_IRQBUTTONS_MIN; i <= CONFIG_PM_IRQBUTTONS_MAX; i++)
{
xcpt_t oldhandler = up_irqbutton(i, g_buttoninfo[BUTTON_INDEX(i)].handler);
xcpt_t oldhandler = up_irqbutton(i, g_buttonhandlers[BUTTON_INDEX(i)]);
if (oldhandler != NULL)
{
+7
View File
@@ -16,6 +16,13 @@ config ARCH_BUTTONS
---help---
"Support interfaces to use buttons provided by the board."
config ARCH_IRQBUTTONS
bool "Button interrupt support"
default n
depends on ARCH_BUTTONS
---help---
"Support EXTI interrupts on button presses and releases."
config STM3220G_LCD
bool "Select support for the STM3210E-EVAL LCD"
default y
-6
View File
@@ -573,12 +573,6 @@ STM3220G-EVAL-specific Configuration Options
CONFIG_STM32_TIM10
CONFIG_STM32_TIM11
Timer and I2C devices may need to the following to force power to be applied
unconditionally at power up. (Otherwise, the device is powered when it is
initialized).
CONFIG_STM32_FORCEPOWER
Timer devices may be used for different purposes. One special purpose is
to generate modulated outputs for such things as motor control. If CONFIG_STM32_TIMn
is defined (as above) then the following may also be defined to indicate that
-5
View File
@@ -191,11 +191,6 @@ CONFIG_STM32_TIM9=n
CONFIG_STM32_TIM10=n
CONFIG_STM32_TIM11=n
#
# Timer and I2C devices may need to the following to force power to be applied:
#
#CONFIG_STM32_FORCEPOWER=y
#
# STM32F20xxx specific serial device driver settings
#
-5
View File
@@ -191,11 +191,6 @@ CONFIG_STM32_TIM9=n
CONFIG_STM32_TIM10=n
CONFIG_STM32_TIM11=n
#
# Timer and I2C devices may need to the following to force power to be applied:
#
#CONFIG_STM32_FORCEPOWER=y
#
# STM32F20xxx specific serial device driver settings
#
-5
View File
@@ -191,11 +191,6 @@ CONFIG_STM32_TIM9=n
CONFIG_STM32_TIM10=n
CONFIG_STM32_TIM11=n
#
# Timer and I2C devices may need to the following to force power to be applied:
#
#CONFIG_STM32_FORCEPOWER=y
#
# STM32F20xxx specific serial device driver settings
#
-5
View File
@@ -192,11 +192,6 @@ CONFIG_STM32_TIM9=n
CONFIG_STM32_TIM10=n
CONFIG_STM32_TIM11=n
#
# Timer and I2C devices may need to the following to force power to be applied:
#
#CONFIG_STM32_FORCEPOWER=y
#
# STM32F20xxx specific serial device driver settings
#
-5
View File
@@ -191,11 +191,6 @@ CONFIG_STM32_TIM9=n
CONFIG_STM32_TIM10=n
CONFIG_STM32_TIM11=n
#
# Timer and I2C devices may need to the following to force power to be applied:
#
#CONFIG_STM32_FORCEPOWER=y
#
# STM32F20xxx specific serial device driver settings
#
-5
View File
@@ -191,11 +191,6 @@ CONFIG_STM32_TIM9=n
CONFIG_STM32_TIM10=n
CONFIG_STM32_TIM11=n
#
# Timer and I2C devices may need to the following to force power to be applied:
#
#CONFIG_STM32_FORCEPOWER=y
#
# STM32F20xxx specific serial device driver settings
#
-5
View File
@@ -191,11 +191,6 @@ CONFIG_STM32_TIM9=n
CONFIG_STM32_TIM10=n
CONFIG_STM32_TIM11=n
#
# Timer and I2C devices may need to the following to force power to be applied:
#
#CONFIG_STM32_FORCEPOWER=y
#
# STM32F20xxx specific serial device driver settings
#
+7
View File
@@ -16,6 +16,13 @@ config ARCH_BUTTONS
---help---
"Support interfaces to use buttons provided by the board."
config ARCH_IRQBUTTONS
bool "Button interrupt support"
default n
depends on ARCH_BUTTONS
---help---
"Support EXTI interrupts on button presses and releases."
config STM3240G_LCD
bool "Select support for the STM3210E-EVAL LCD"
default y
-6
View File
@@ -694,12 +694,6 @@ STM3240G-EVAL-specific Configuration Options
CONFIG_STM32_TIM10
CONFIG_STM32_TIM11
Timer and I2C devices may need to the following to force power to be applied
unconditionally at power up. (Otherwise, the device is powered when it is
initialized).
CONFIG_STM32_FORCEPOWER
Timer devices may be used for different purposes. One special purpose is
to generate modulated outputs for such things as motor control. If CONFIG_STM32_TIMn
is defined (as above) then the following may also be defined to indicate that
-5
View File
@@ -203,11 +203,6 @@ CONFIG_STM32_TIM9=n
CONFIG_STM32_TIM10=n
CONFIG_STM32_TIM11=n
#
# Timer and I2C devices may need to the following to force power to be applied:
#
#CONFIG_STM32_FORCEPOWER=y
#
# STM32F40xxx specific serial device driver settings
#
-5
View File
@@ -203,11 +203,6 @@ CONFIG_STM32_TIM9=n
CONFIG_STM32_TIM10=n
CONFIG_STM32_TIM11=n
#
# Timer and I2C devices may need to the following to force power to be applied:
#
#CONFIG_STM32_FORCEPOWER=y
#
# STM32F40xxx specific serial device driver settings
#
-5
View File
@@ -203,11 +203,6 @@ CONFIG_STM32_TIM9=n
CONFIG_STM32_TIM10=n
CONFIG_STM32_TIM11=n
#
# Timer and I2C devices may need to the following to force power to be applied:
#
#CONFIG_STM32_FORCEPOWER=y
#
# STM32F40xxx specific serial device driver settings
#
-5
View File
@@ -204,11 +204,6 @@ CONFIG_STM32_TIM9=n
CONFIG_STM32_TIM10=n
CONFIG_STM32_TIM11=n
#
# Timer and I2C devices may need to the following to force power to be applied:
#
#CONFIG_STM32_FORCEPOWER=y
#
# STM32F40xxx specific serial device driver settings
#
@@ -203,11 +203,6 @@ CONFIG_STM32_TIM9=n
CONFIG_STM32_TIM10=n
CONFIG_STM32_TIM11=n
#
# Timer and I2C devices may need to the following to force power to be applied:
#
#CONFIG_STM32_FORCEPOWER=y
#
# STM32F40xxx specific serial device driver settings
#
-5
View File
@@ -203,11 +203,6 @@ CONFIG_STM32_TIM9=n
CONFIG_STM32_TIM10=n
CONFIG_STM32_TIM11=n
#
# Timer and I2C devices may need to the following to force power to be applied:
#
#CONFIG_STM32_FORCEPOWER=y
#
# STM32F40xxx specific serial device driver settings
#
-5
View File
@@ -203,11 +203,6 @@ CONFIG_STM32_TIM9=n
CONFIG_STM32_TIM10=n
CONFIG_STM32_TIM11=n
#
# Timer and I2C devices may need to the following to force power to be applied:
#
#CONFIG_STM32_FORCEPOWER=y
#
# STM3240xxx specific serial device driver settings
#
-5
View File
@@ -203,11 +203,6 @@ CONFIG_STM32_TIM9=n
CONFIG_STM32_TIM10=n
CONFIG_STM32_TIM11=n
#
# Timer and I2C devices may need to the following to force power to be applied:
#
#CONFIG_STM32_FORCEPOWER=y
#
# STM32F40xxx specific serial device driver settings
#
+56
View File
@@ -16,4 +16,60 @@ config ARCH_BUTTONS
---help---
"Support interfaces to use buttons provided by the board."
config ARCH_IRQBUTTONS
bool "Button interrupt support"
default n
depends on ARCH_BUTTONS
---help---
"Support EXTI interrupts on button presses and releases."
config PM_BUTTONS
bool "PM Button support"
default n
depends on PM && ARCH_IRQBUTTONS
---help---
Enable PM button EXTI interrupts to support PM testing
config PM_BUTTON_ACTIVITY
int "Button PM activity weight"
default 10
depends on PM_BUTTONS
---help---
The activity weight to report to the power management subsystem when a button is pressed.
config PM_ALARM_SEC
int "PM_STANDBY delay (seconds)"
default 15
depends on PM && RTC_ALARM
--help---
Number of seconds to wait in PM_STANDBY before going to PM_STANDBY mode.
config PM_ALARM_NSEC
int "PM_STANDBY delay (nanoseconds)"
default 0
depends on PM && RTC_ALARM
--help---
Number of additional nanoseconds to wait in PM_STANDBY before going to PM_STANDBY mode.
config PM_SLEEP_WAKEUP
bool "PM_SLEEP wake-up alarm"
default n
depends on PM && RTC_ALARM
--help---
Wake-up of PM_SLEEP mode after a delay and resume normal operation.
config PM_SLEEP_WAKEUP_SEC
int "PM_SLEEP delay (seconds)"
default 10
depends on PM && RTC_ALARM
--help---
Number of seconds to wait in PM_SLEEP before going to PM_STANDBY mode.
config PM_SLEEP_WAKEUP_NSEC
int "PM_SLEEP delay (nanoseconds)"
default 0
depends on PM && RTC_ALARM
--help---
Number of additional nanoseconds to wait in PM_SLEEP before going to PM_STANDBY mode.
endif
-6
View File
@@ -807,12 +807,6 @@ STM32F4Discovery-specific Configuration Options
CONFIG_STM32_TIM10
CONFIG_STM32_TIM11
Timer and I2C devices may need to the following to force power to be applied
unconditionally at power up. (Otherwise, the device is powered when it is
initialized).
CONFIG_STM32_FORCEPOWER
Timer devices may be used for different purposes. One special purpose is
to generate modulated outputs for such things as motor control. If CONFIG_STM32_TIMn
is defined (as above) then the following may also be defined to indicate that
-5
View File
@@ -180,11 +180,6 @@ CONFIG_STM32_TIM9=n
CONFIG_STM32_TIM10=n
CONFIG_STM32_TIM11=n
#
# Timer and I2C devices may need to the following to force power to be applied:
#
#CONFIG_STM32_FORCEPOWER=y
#
# STM32F40xxx specific serial device driver settings
#
@@ -180,11 +180,6 @@ CONFIG_STM32_TIM9=n
CONFIG_STM32_TIM10=n
CONFIG_STM32_TIM11=n
#
# Timer and I2C devices may need to the following to force power to be applied:
#
#CONFIG_STM32_FORCEPOWER=y
#
# STM32F40xxx specific serial device driver settings
#
@@ -180,11 +180,6 @@ CONFIG_STM32_TIM9=n
CONFIG_STM32_TIM10=n
CONFIG_STM32_TIM11=n
#
# Timer and I2C devices may need to the following to force power to be applied:
#
#CONFIG_STM32_FORCEPOWER=y
#
# STM32F4Discovery specific serial device driver settings
#
-5
View File
@@ -181,11 +181,6 @@ CONFIG_STM32_TIM9=n
CONFIG_STM32_TIM10=n
CONFIG_STM32_TIM11=n
#
# Timer and I2C devices may need to the following to force power to be applied:
#
#CONFIG_STM32_FORCEPOWER=y
#
# STM32F40xxx specific serial device driver settings
#
+5 -58
View File
@@ -64,12 +64,8 @@
# error "CONFIG_ARCH_BUTTONS is not defined in the configuration"
#endif
#ifndef CONFIG_PM_BUTTONS_NAME0
# define CONFIG_PM_BUTTONS_NAME0 "BUTTON0"
#endif
#ifndef CONFIG_PM_IRQBUTTON
# define CONFIG_PM_IRQBUTTON 0
#ifndef CONFIG_ARCH_IRQBUTTONS
# warning "CONFIG_ARCH_IRQBUTTONS is not defined in the configuration"
#endif
#ifndef CONFIG_PM_BUTTON_ACTIVITY
@@ -80,61 +76,18 @@
* Private Types
****************************************************************************/
struct button_info_s
{
FAR const char *name; /* Name for the button */
#ifdef CONFIG_ARCH_IRQBUTTONS
xcpt_t handler; /* Button interrupt handler */
#endif
};
/****************************************************************************
* Private Function Prototypes
****************************************************************************/
#ifdef CONFIG_ARCH_IRQBUTTONS
static void button_handler(int id, int irq);
#if MIN_BUTTON < 1
static int button0_handler(int irq, FAR void *context);
#endif
#if MIN_BUTTON < 2 && MAX_BUTTON > 0
static int button1_handler(int irq, FAR void *context);
#endif
#if MIN_BUTTON < 3 && MAX_BUTTON > 1
static int button2_handler(int irq, FAR void *context);
#endif
#if MIN_BUTTON < 4 && MAX_BUTTON > 2
static int button3_handler(int irq, FAR void *context);
#endif
#if MIN_BUTTON < 5 && MAX_BUTTON > 3
static int button4_handler(int irq, FAR void *context);
#endif
#if MIN_BUTTON < 6 && MAX_BUTTON > 4
static int button5_handler(int irq, FAR void *context);
#endif
#if MIN_BUTTON < 7 && MAX_BUTTON > 5
static int button6_handler(int irq, FAR void *context);
#endif
#if MAX_BUTTON > 6
static int button7_handler(int irq, FAR void *context);
#endif
static int button_handler(int irq, FAR void *context);
#endif /* CONFIG_ARCH_IRQBUTTONS */
/****************************************************************************
* Private Data
****************************************************************************/
/* Button Names */
static const struct button_info_s g_buttoninfo =
{
CONFIG_PM_BUTTONS_NAME0,
#ifdef CONFIG_ARCH_IRQBUTTONS
button0_handler,
#endif
};
/****************************************************************************
* Private Functions
****************************************************************************/
@@ -148,7 +101,7 @@ static const struct button_info_s g_buttoninfo =
****************************************************************************/
#ifdef CONFIG_ARCH_IRQBUTTONS
static void button_handler(int id, int irq)
static int button_handler(int irq, FAR void *context)
{
/* At this point the MCU should have already awakened. The state
* change will be handled in the IDLE loop when the system is re-awakened
@@ -158,14 +111,8 @@ static void button_handler(int id, int irq)
*/
pm_activity(CONFIG_PM_BUTTON_ACTIVITY);
}
static int button0_handler(int irq, FAR void *context)
{
button_handler(0, irq);
return OK;
}
#endif /* CONFIG_ARCH_IRQBUTTONS */
/****************************************************************************
@@ -188,7 +135,7 @@ void up_pmbuttons(void)
up_buttoninit();
#ifdef CONFIG_ARCH_IRQBUTTONS
xcpt_t oldhandler = up_irqbutton(0, g_buttoninfo.handler);
xcpt_t oldhandler = up_irqbutton(0, button_handler);
if (oldhandler != NULL)
{
+7
View File
@@ -16,4 +16,11 @@ config ARCH_BUTTONS
---help---
"Support interfaces to use buttons provided by the board."
config ARCH_IRQBUTTONS
bool "Button interrupt support"
default n
depends on ARCH_BUTTONS
---help---
"Support interrupts on button presses and releases."
endif
+7
View File
@@ -16,4 +16,11 @@ config ARCH_BUTTONS
---help---
"Support interfaces to use buttons provided by the board."
config ARCH_IRQBUTTONS
bool "Button interrupt support"
default n
depends on ARCH_BUTTONS
---help---
"Support interrupts on button presses and releases."
endif
+22
View File
@@ -2,3 +2,25 @@
# For a description of the syntax of this configuration file,
# see misc/tools/kconfig-language.txt.
#
if ARCH_BOARD_UBW32
config ARCH_LEDS
bool "NuttX LED support"
default n
---help---
"Support control of board LEDs by NuttX to indicate system state"
config ARCH_BUTTONS
bool "Button support"
default n
---help---
"Support interfaces to use buttons provided by the board."
config ARCH_IRQBUTTONS
bool "Button interrupt support"
default n
depends on ARCH_BUTTONS
---help---
"Support interrupts on button presses and releases."
endif