SAMV7-XULT: Integrate button support and apps/examples/buttons into the NSH configuration

This commit is contained in:
Gregory Nutt 2015-03-11 14:41:58 -06:00
parent fbee7812f3
commit 26ac9361e7
3 changed files with 92 additions and 14 deletions

View File

@ -279,10 +279,39 @@ Configuration sub-directories
3. NSH built-in applications are supported.
Binary Formats:
CONFIG_BUILTIN=y : Enable support for built-in programs
CONFIG_BUILTIN=y : Enable support for built-in programs
Application Configuration:
CONFIG_NSH_BUILTIN_APPS=y : Enable starting apps from NSH command line
CONFIG_NSH_BUILTIN_APPS=y : Enable starting apps from NSH command line
3. The button test at apps/examples/buttons is included in the
configuration. This configuration illustrates (1) use of the buttons
on the evaluation board, and (2) the use of PIO interrupts. Example
usage:
NuttShell (NSH) NuttX-7.8
nsh> help
help usage: help [-v] [<cmd>]
...
Builtin Apps:
buttons
nsh> buttons 3
maxbuttons: 3
Attached handler at 4078f7 to button 0 [SW0], oldhandler:0
Attached handler at 4078e9 to button 1 [SW1], oldhandler:0
IRQ:125 Button 1:SW1 SET:00:
SW1 released
IRQ:125 Button 1:SW1 SET:02:
SW1 depressed
IRQ:125 Button 1:SW1 SET:00:
SW1 released
IRQ:90 Button 0:SW0 SET:01:
SW0 depressed
IRQ:90 Button 0:SW0 SET:00:
SW0 released
IRQ:125 Button 1:SW1 SET:02:
SW1 depressed
nsh>
4. Performance-related Configuration settings:
@ -290,5 +319,6 @@ Configuration sub-directories
CONFIG_ARMV7M_DCACHE=y : Data cache is enabled
CONFIG_ARCH_FPU=y : H/W floating point support is enabled
CONFIG_ARCH_DPFPU=y : 64-bit H/W floating point support is enabled
# CONFIG_ARMV7M_ITCM is not set : Support not yet in place
# CONFIG_ARMV7M_DTCM is not set : Support not yet in place

View File

@ -225,7 +225,12 @@ CONFIG_SAMV7_UART3=y
# CONFIG_SAMV7_USART2 is not set
# CONFIG_SAMV7_WDT0 is not set
# CONFIG_SAMV7_WDT1 is not set
# CONFIG_SAMV7_GPIO_IRQ is not set
CONFIG_SAMV7_GPIO_IRQ=y
CONFIG_SAMV7_GPIOA_IRQ=y
CONFIG_SAMV7_GPIOB_IRQ=y
# CONFIG_SAMV7_GPIOC_IRQ is not set
# CONFIG_SAMV7_GPIOD_IRQ is not set
# CONFIG_SAMV7_GPIOE_IRQ is not set
#
# Architecture Options
@ -296,8 +301,9 @@ CONFIG_ARCH_BOARD="samv71-xult"
CONFIG_ARCH_HAVE_LEDS=y
CONFIG_ARCH_LEDS=y
CONFIG_ARCH_HAVE_BUTTONS=y
# CONFIG_ARCH_BUTTONS is not set
CONFIG_ARCH_BUTTONS=y
CONFIG_ARCH_HAVE_IRQBUTTONS=y
CONFIG_ARCH_IRQBUTTONS=y
CONFIG_NSH_MMCSDMINOR=0
#
@ -510,7 +516,6 @@ CONFIG_MCU_SERIAL=y
CONFIG_STANDARD_SERIAL=y
# CONFIG_SERIAL_IFLOWCONTROL is not set
# CONFIG_SERIAL_OFLOWCONTROL is not set
# CONFIG_SERIAL_TIOCSERGSTRUCT is not set
CONFIG_ARCH_HAVE_SERIAL_TERMIOS=y
# CONFIG_SERIAL_TERMIOS is not set
CONFIG_UART3_SERIAL_CONSOLE=y
@ -673,7 +678,19 @@ CONFIG_BUILTIN_PROXY_STACKSIZE=1024
#
# Examples
#
# CONFIG_EXAMPLES_BUTTONS is not set
CONFIG_EXAMPLES_BUTTONS=y
CONFIG_EXAMPLES_BUTTONS_MIN=0
CONFIG_EXAMPLES_BUTTONS_MAX=1
CONFIG_EXAMPLES_IRQBUTTONS_MIN=0
CONFIG_EXAMPLES_IRQBUTTONS_MAX=1
CONFIG_EXAMPLES_BUTTONS_NAME0="SW0"
CONFIG_EXAMPLES_BUTTONS_NAME1="SW1"
CONFIG_EXAMPLES_BUTTONS_NAME2="Button 2"
CONFIG_EXAMPLES_BUTTONS_NAME3="Button 3"
CONFIG_EXAMPLES_BUTTONS_NAME4="Button 4"
CONFIG_EXAMPLES_BUTTONS_NAME5="Button 5"
CONFIG_EXAMPLES_BUTTONS_NAME6="Button 6"
CONFIG_EXAMPLES_BUTTONS_NAME7="Button 7"
# CONFIG_EXAMPLES_CAN is not set
# CONFIG_EXAMPLES_CONFIGDATA is not set
# CONFIG_EXAMPLES_CPUHOG is not set

View File

@ -48,8 +48,10 @@
#include <arch/irq.h>
#include <arch/board/board.h>
#include "up_arch.h"
#include "sam_gpio.h"
#include "samv7i-xult.h"
#include "chip/sam_matrix.h"
#include "samv71-xult.h"
#ifdef CONFIG_ARCH_BUTTONS
@ -61,10 +63,19 @@
* Private Data
****************************************************************************/
#if defined(CONFIG_SAM34_GPIOA_IRQ) && defined(CONFIG_ARCH_IRQBUTTONS)
#define HAVE_IRQBUTTONS 1
#if !defined(CONFIG_SAMV7_GPIO1_IRQ) && !defined(CONFIG_SAMV7_GPIOB_IRQ)
# undef HAVE_IRQBUTTONS
#endif
#ifdef CONFIG_ARCH_IRQBUTTONS
#ifdef CONFIG_SAMV7_GPIOA_IRQ
static xcpt_t g_irq_sw0;
#endif
#ifdef CONFIG_SAMV7_GPIOB_IRQ
static xcpt_t g_irq_sw1;
#endif
#endif
/****************************************************************************
* Private Functions
@ -78,7 +89,7 @@ static xcpt_t g_irq_sw1;
*
****************************************************************************/
#if defined(CONFIG_SAM34_GPIOA_IRQ) && defined(CONFIG_ARCH_IRQBUTTONS)
#ifdef HAVE_IRQBUTTONS
static xcpt_t board_button_irqx(gpio_pinset_t pinset, int irq,
xcpt_t irqhandler, xcpt_t *store)
{
@ -139,10 +150,18 @@ static xcpt_t board_button_irqx(gpio_pinset_t pinset, int irq,
void board_button_initialize(void)
{
#warning Missing logic
* - PB12 is set up as a system flash ERASE pin when the firmware boots. To
* use the SW1, PB12 has to be configured as a normal regular I/O pin in
* the MATRIX module. For more information see the SAM V71 datasheet.
uint32_t regval;
/* PB12 is set up as a system flash ERASE pin when the firmware boots. To
* use the SW1, PB12 has to be configured as a normal regular I/O pin in
* the MATRIX module. For more information see the SAM V71 datasheet.
*/
regval = getreg32(SAM_MATRIX_CCFG_SYSIO);
regval |= MATRIX_CCFG_SYSIO_SYSIO12;
putreg32(regval, SAM_MATRIX_CCFG_SYSIO);
/* Configure button PIOs */
(void)sam_configgpio(GPIO_SW0);
(void)sam_configgpio(GPIO_SW1);
@ -187,20 +206,32 @@ uint8_t board_buttons(void)
*
****************************************************************************/
#if defined(CONFIG_SAM34_GPIOA_IRQ) && defined(CONFIG_ARCH_IRQBUTTONS)
#ifdef CONFIG_ARCH_IRQBUTTONS
xcpt_t board_button_irq(int id, xcpt_t irqhandler)
{
#ifdef HAVE_IRQBUTTONS
switch (id)
{
#ifdef CONFIG_SAMV7_GPIOA_IRQ
case BUTTON_SW0:
return board_button_irqx(GPIO_SW0, IRQ_SW0, irqhandler, &g_irq_sw0);
#endif
#ifdef CONFIG_SAMV7_GPIOB_IRQ
case BUTTON_SW1:
return board_button_irqx(GPIO_SW1, IRQ_SW1, irqhandler, &g_irq_sw1);
#endif
default:
return NULL;
}
#else
return NULL;
#endif
}
#endif