Nucleo-f4x1re: Add pull-ups to joystick button GPIOs

This commit is contained in:
Gregory Nutt 2014-12-04 13:20:47 -06:00
parent 3cc6bee189
commit 6ea9af3736
3 changed files with 61 additions and 38 deletions

View File

@ -529,8 +529,8 @@ Shields
D7 Button A Output PA8 D7 Button A Output PA8
D8 Button F Output PA9 D8 Button F Output PA9
D9 Button G Output PC7 D9 Button G Output PC7
A0 Joystick Y Output PA0 ADC_IN0 A0 Joystick Y Output PA0 ADC1_0
A1 Joystick X Output PA1 ADC_IN1 A1 Joystick X Output PA1 ADC1_1
--------- ----------------- --------------------------------- --------- ----------------- ---------------------------------
All buttons are pulled on the shield. A sensed low value indicates All buttons are pulled on the shield. A sensed low value indicates
@ -584,7 +584,8 @@ Shields
default USART1 configuration. I am currently running with USART1 default USART1 configuration. I am currently running with USART1
but with CONFIG_NUCLEO_F401RE_AJOY_MINBUTTONS to eliminate the but with CONFIG_NUCLEO_F401RE_AJOY_MINBUTTONS to eliminate the
conflict. conflict.
- Current showstopper: I am not getting joystick button interrupts. - Current showstopper: I appear to be getting infinite interrupts as
soon as joystick button interrupts are enabled.
Configurations Configurations
============== ==============

View File

@ -51,7 +51,8 @@
/* Configuration ********************************************************************/ /* Configuration ********************************************************************/
#define HAVE_MMCSD 1 #define HAVE_MMCSD 1
#if !defined(CONFIG_STM32_SDIO) || !defined(CONFIG_MMCSD) || !defined(CONFIG_MMCSD_SDIO) #if !defined(CONFIG_STM32_SDIO) || !defined(CONFIG_MMCSD) || \
!defined(CONFIG_MMCSD_SDIO)
# undef HAVE_MMCSD # undef HAVE_MMCSD
#endif #endif
@ -102,49 +103,67 @@
*/ */
#ifdef CONFIG_WL_CC3000 #ifdef CONFIG_WL_CC3000
# define GPIO_WIFI_INT (GPIO_PORTB | GPIO_PIN3 | GPIO_INPUT | GPIO_PULLUP | GPIO_EXTI) # define GPIO_WIFI_INT (GPIO_PORTB | GPIO_PIN3 | GPIO_INPUT | \
# define GPIO_WIFI_EN (GPIO_PORTB | GPIO_PIN4 | GPIO_OUTPUT_CLEAR | GPIO_OUTPUT | GPIO_PULLUP | GPIO_SPEED_50MHz) GPIO_PULLUP | GPIO_EXTI)
# define GPIO_WIFI_CS (GPIO_PORTB | GPIO_PIN6 | GPIO_OUTPUT_SET | GPIO_OUTPUT | GPIO_PULLUP | GPIO_SPEED_50MHz) # define GPIO_WIFI_EN (GPIO_PORTB | GPIO_PIN4 | GPIO_OUTPUT_CLEAR | \
# define GPIO_D14 (GPIO_PORTB | GPIO_PIN9 | GPIO_OUTPUT_CLEAR | GPIO_OUTPUT | GPIO_PULLUP | GPIO_SPEED_50MHz) GPIO_OUTPUT | GPIO_PULLUP | GPIO_SPEED_50MHz)
# define GPIO_D15 (GPIO_PORTB | GPIO_PIN8 | GPIO_OUTPUT_CLEAR | GPIO_OUTPUT | GPIO_PULLUP | GPIO_SPEED_50MHz) # define GPIO_WIFI_CS (GPIO_PORTB | GPIO_PIN6 | GPIO_OUTPUT_SET | \
# define GPIO_D0 (GPIO_PORTA | GPIO_PIN3 | GPIO_INPUT | GPIO_PULLUP ) GPIO_OUTPUT | GPIO_PULLUP | GPIO_SPEED_50MHz)
# define GPIO_D1 (GPIO_PORTA | GPIO_PIN2 | GPIO_OUTPUT_CLEAR | GPIO_PULLUP ) # define GPIO_D14 (GPIO_PORTB | GPIO_PIN9 | GPIO_OUTPUT_CLEAR | \
# define GPIO_D2 (GPIO_PORTA | GPIO_PIN10 | GPIO_OUTPUT_CLEAR | GPIO_OUTPUT | GPIO_PULLUP | GPIO_SPEED_50MHz) GPIO_OUTPUT | GPIO_PULLUP | GPIO_SPEED_50MHz)
# define GPIO_D15 (GPIO_PORTB | GPIO_PIN8 | GPIO_OUTPUT_CLEAR | \
# define GPIO_A0 (GPIO_PORTA | GPIO_PIN0 | GPIO_OUTPUT_SET | GPIO_OUTPUT | GPIO_PULLUP | GPIO_SPEED_50MHz) GPIO_OUTPUT | GPIO_PULLUP | GPIO_SPEED_50MHz)
# define GPIO_A1 (GPIO_PORTA | GPIO_PIN1 | GPIO_OUTPUT_SET | GPIO_OUTPUT | GPIO_PULLUP | GPIO_SPEED_50MHz) # define GPIO_D0 (GPIO_PORTA | GPIO_PIN3 | GPIO_INPUT | \
# define GPIO_A2 (GPIO_PORTA | GPIO_PIN4 | GPIO_INPUT | GPIO_PULLUP ) GPIO_PULLUP)
# define GPIO_A3 (GPIO_PORTB | GPIO_PIN0 | GPIO_INPUT | GPIO_PULLUP ) # define GPIO_D1 (GPIO_PORTA | GPIO_PIN2 | GPIO_OUTPUT_CLEAR | \
GPIO_PULLUP)
# define GPIO_D2 (GPIO_PORTA | GPIO_PIN10 | GPIO_OUTPUT_CLEAR | \
GPIO_OUTPUT | GPIO_PULLUP | GPIO_SPEED_50MHz)
# define GPIO_A0 (GPIO_PORTA | GPIO_PIN0 | GPIO_OUTPUT_SET | \
GPIO_OUTPUT | GPIO_PULLUP | GPIO_SPEED_50MHz)
# define GPIO_A1 (GPIO_PORTA | GPIO_PIN1 | GPIO_OUTPUT_SET | \
GPIO_OUTPUT | GPIO_PULLUP | GPIO_SPEED_50MHz)
# define GPIO_A2 (GPIO_PORTA | GPIO_PIN4 | GPIO_INPUT | \
GPIO_PULLUP)
# define GPIO_A3 (GPIO_PORTB | GPIO_PIN0 | GPIO_INPUT | \
GPIO_PULLUP)
#endif #endif
/* SPI1 off */ /* SPI1 off */
#define GPIO_SPI1_MOSI_OFF (GPIO_INPUT|GPIO_PULLDOWN|GPIO_PORTA|GPIO_PIN7) #define GPIO_SPI1_MOSI_OFF (GPIO_INPUT | GPIO_PULLDOWN | \
#define GPIO_SPI1_MISO_OFF (GPIO_INPUT|GPIO_PULLDOWN|GPIO_PORTA|GPIO_PIN6) GPIO_PORTA | GPIO_PIN7)
#define GPIO_SPI1_SCK_OFF (GPIO_INPUT|GPIO_PULLDOWN|GPIO_PORTA|GPIO_PIN5) #define GPIO_SPI1_MISO_OFF (GPIO_INPUT | GPIO_PULLDOWN | \
GPIO_PORTA | GPIO_PIN6)
#define GPIO_SPI1_SCK_OFF (GPIO_INPUT | GPIO_PULLDOWN | \
GPIO_PORTA | GPIO_PIN5)
/* SPI1 chip selects off */ /* SPI1 chip selects off */
#ifdef CONFIG_WL_CC3000 #ifdef CONFIG_WL_CC3000
# define GPIO_SPI_CS_WIFI_OFF \ # define GPIO_SPI_CS_WIFI_OFF \
(GPIO_INPUT|GPIO_PULLDOWN|GPIO_SPEED_2MHz|GPIO_PORTB|GPIO_PIN6) (GPIO_INPUT | GPIO_PULLDOWN | GPIO_SPEED_2MHz | \
GPIO_PORTB | GPIO_PIN6)
#endif #endif
#ifdef HAVE_MMCSD #ifdef HAVE_MMCSD
# define GPIO_SPI_CS_SD_CARD_OFF \ # define GPIO_SPI_CS_SD_CARD_OFF \
(GPIO_INPUT|GPIO_PULLDOWN|GPIO_SPEED_2MHz|GPIO_PORTB|GPIO_PIN5) (GPIO_INPUT | GPIO_PULLDOWN | GPIO_SPEED_2MHz | \
GPIO_PORTB | GPIO_PIN5)
#endif #endif
/* SPI chip selects */ /* SPI chip selects */
#ifdef CONFIG_WL_CC3000 #ifdef CONFIG_WL_CC3000
# define GPIO_SPI_CS_WIFI \ # define GPIO_SPI_CS_WIFI \
(GPIO_OUTPUT|GPIO_PUSHPULL|GPIO_SPEED_2MHz|GPIO_OUTPUT_SET|GPIO_PORTB|GPIO_PIN6) (GPIO_OUTPUT | GPIO_PUSHPULL | GPIO_SPEED_2MHz | \
GPIO_OUTPUT_SET | GPIO_PORTB | GPIO_PIN6)
#endif #endif
#ifdef HAVE_MMCSD #ifdef HAVE_MMCSD
# define GPIO_SPI_CS_SD_CARD \ # define GPIO_SPI_CS_SD_CARD \
(GPIO_OUTPUT|GPIO_PUSHPULL|GPIO_SPEED_2MHz|GPIO_OUTPUT_SET|GPIO_PORTB|GPIO_PIN5) (GPIO_OUTPUT | GPIO_PUSHPULL | GPIO_SPEED_2MHz | \
GPIO_OUTPUT_SET | GPIO_PORTB | GPIO_PIN5)
#endif #endif
/* Devices on the onboard bus. /* Devices on the onboard bus.
@ -162,13 +181,15 @@
#ifdef CONFIG_WL_CC3000 #ifdef CONFIG_WL_CC3000
# define GPIO_GPIO0_INPUT \ # define GPIO_GPIO0_INPUT \
(GPIO_INPUT|GPIO_PULLUP|GPIO_PORTB|GPIO_PIN8) (GPIO_INPUT | GPIO_PULLUP | GPIO_PORTB | GPIO_PIN8)
# define GPIO_GPIO1_INPUT \ # define GPIO_GPIO1_INPUT \
(GPIO_INPUT|GPIO_PULLUP|GPIO_PORTB|GPIO_PIN9) (GPIO_INPUT | GPIO_PULLUP | GPIO_PORTB | GPIO_PIN9)
# define GPIO_GPIO0_OUTPUT \ # define GPIO_GPIO0_OUTPUT \
(GPIO_OUTPUT|GPIO_PUSHPULL|GPIO_SPEED_2MHz|GPIO_OUTPUT_CLEAR|GPIO_PORTB|GPIO_PIN8) (GPIO_OUTPUT | GPIO_PUSHPULL | GPIO_SPEED_2MHz | \
GPIO_OUTPUT_CLEAR | GPIO_PORTB | GPIO_PIN8)
# define GPIO_GPIO1_OUTPUT \ # define GPIO_GPIO1_OUTPUT \
(GPIO_OUTPUT|GPIO_PUSHPULL|GPIO_SPEED_2MHz|GPIO_OUTPUT_CLEAR|GPIO_PORTB|GPIO_PIN9) (GPIO_OUTPUT | GPIO_PUSHPULL | GPIO_SPEED_2MHz | \
GPIO_OUTPUT_CLEAR | GPIO_PORTB | GPIO_PIN9)
#endif #endif
/* Itead Joystick Shield /* Itead Joystick Shield
@ -187,8 +208,8 @@
* D7 Button A Output PA8 * D7 Button A Output PA8
* D8 Button F Output PA9 * D8 Button F Output PA9
* D9 Button G Output PC7 * D9 Button G Output PC7
* A0 Joystick Y Output PA0 ADC_IN0 * A0 Joystick Y Output PA0 ADC1_0
* A1 Joystick X Output PA1 ADC_IN1 * A1 Joystick X Output PA1 ADC1_1
* --------- ----------------- --------------------------------- * --------- ----------------- ---------------------------------
* *
* All buttons are pulled on the shield. A sensed low value indicates * All buttons are pulled on the shield. A sensed low value indicates
@ -205,19 +226,19 @@
#define ADC_YOUPUT 0 /* Y output is on ADC channel 0 */ #define ADC_YOUPUT 0 /* Y output is on ADC channel 0 */
#define GPIO_BUTTON_A \ #define GPIO_BUTTON_A \
(GPIO_INPUT | GPIO_FLOAT |GPIO_EXTI | GPIO_PORTA | GPIO_PIN8) (GPIO_INPUT | GPIO_PULLUP |GPIO_EXTI | GPIO_PORTA | GPIO_PIN8)
#define GPIO_BUTTON_B \ #define GPIO_BUTTON_B \
(GPIO_INPUT | GPIO_FLOAT |GPIO_EXTI | GPIO_PORTB | GPIO_PIN10) (GPIO_INPUT | GPIO_PULLUP |GPIO_EXTI | GPIO_PORTB | GPIO_PIN10)
#define GPIO_BUTTON_C \ #define GPIO_BUTTON_C \
(GPIO_INPUT | GPIO_FLOAT |GPIO_EXTI | GPIO_PORTB | GPIO_PIN4) (GPIO_INPUT | GPIO_PULLUP |GPIO_EXTI | GPIO_PORTB | GPIO_PIN4)
#define GPIO_BUTTON_D \ #define GPIO_BUTTON_D \
(GPIO_INPUT | GPIO_FLOAT |GPIO_EXTI | GPIO_PORTB | GPIO_PIN5) (GPIO_INPUT | GPIO_PULLUP |GPIO_EXTI | GPIO_PORTB | GPIO_PIN5)
#define GPIO_BUTTON_E \ #define GPIO_BUTTON_E \
(GPIO_INPUT | GPIO_FLOAT |GPIO_EXTI | GPIO_PORTB | GPIO_PIN3) (GPIO_INPUT | GPIO_PULLUP |GPIO_EXTI | GPIO_PORTB | GPIO_PIN3)
#define GPIO_BUTTON_F \ #define GPIO_BUTTON_F \
(GPIO_INPUT | GPIO_FLOAT |GPIO_EXTI | GPIO_PORTA | GPIO_PIN9) (GPIO_INPUT | GPIO_PULLUP |GPIO_EXTI | GPIO_PORTA | GPIO_PIN9)
#define GPIO_BUTTON_G \ #define GPIO_BUTTON_G \
(GPIO_INPUT | GPIO_FLOAT |GPIO_EXTI | GPIO_PORTC | GPIO_PIN7) (GPIO_INPUT | GPIO_PULLUP |GPIO_EXTI | GPIO_PORTC | GPIO_PIN7)
/* Itead Joystick Signal interpretation: /* Itead Joystick Signal interpretation:
* *

View File

@ -282,7 +282,7 @@ static int ajoy_sample(FAR const struct ajoy_lowerhalf_s *lower,
/* Sample the discrete button inputs */ /* Sample the discrete button inputs */
sample->as_buttons = ajoy_buttons(lower); sample->as_buttons = ajoy_buttons(lower);
ivdbg("Returning: %02x\n", AJOY_SUPPORTED); ivdbg("Returning: %02x\n", sample->as_buttons);
return OK; return OK;
} }
@ -426,6 +426,7 @@ static void ajoy_disable(void)
static int ajoy_interrupt(int irq, FAR void *context) static int ajoy_interrupt(int irq, FAR void *context)
{ {
DEBUGASSERT(g_ajoyhandler); DEBUGASSERT(g_ajoyhandler);
if (g_ajoyhandler) if (g_ajoyhandler)
{ {
g_ajoyhandler(&g_ajoylower, g_ajoyarg); g_ajoyhandler(&g_ajoylower, g_ajoyarg);