diff --git a/configs/nucleo-f4x1re/README.txt b/configs/nucleo-f4x1re/README.txt index ac40c152ea..0b89bf32b8 100644 --- a/configs/nucleo-f4x1re/README.txt +++ b/configs/nucleo-f4x1re/README.txt @@ -529,8 +529,8 @@ Shields D7 Button A Output PA8 D8 Button F Output PA9 D9 Button G Output PC7 - A0 Joystick Y Output PA0 ADC_IN0 - A1 Joystick X Output PA1 ADC_IN1 + A0 Joystick Y Output PA0 ADC1_0 + A1 Joystick X Output PA1 ADC1_1 --------- ----------------- --------------------------------- 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 but with CONFIG_NUCLEO_F401RE_AJOY_MINBUTTONS to eliminate the 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 ============== diff --git a/configs/nucleo-f4x1re/src/nucleo-f4x1re.h b/configs/nucleo-f4x1re/src/nucleo-f4x1re.h index f96fa4cc79..3a92a8763b 100644 --- a/configs/nucleo-f4x1re/src/nucleo-f4x1re.h +++ b/configs/nucleo-f4x1re/src/nucleo-f4x1re.h @@ -51,7 +51,8 @@ /* Configuration ********************************************************************/ #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 #endif @@ -102,49 +103,67 @@ */ #ifdef CONFIG_WL_CC3000 -# define GPIO_WIFI_INT (GPIO_PORTB | GPIO_PIN3 | GPIO_INPUT | GPIO_PULLUP | GPIO_EXTI) -# define GPIO_WIFI_EN (GPIO_PORTB | GPIO_PIN4 | GPIO_OUTPUT_CLEAR | GPIO_OUTPUT | GPIO_PULLUP | GPIO_SPEED_50MHz) -# define GPIO_WIFI_CS (GPIO_PORTB | GPIO_PIN6 | GPIO_OUTPUT_SET | GPIO_OUTPUT | GPIO_PULLUP | GPIO_SPEED_50MHz) -# define GPIO_D14 (GPIO_PORTB | GPIO_PIN9 | GPIO_OUTPUT_CLEAR | 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_D0 (GPIO_PORTA | GPIO_PIN3 | 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 ) +# define GPIO_WIFI_INT (GPIO_PORTB | GPIO_PIN3 | GPIO_INPUT | \ + GPIO_PULLUP | GPIO_EXTI) +# define GPIO_WIFI_EN (GPIO_PORTB | GPIO_PIN4 | GPIO_OUTPUT_CLEAR | \ + GPIO_OUTPUT | GPIO_PULLUP | GPIO_SPEED_50MHz) +# define GPIO_WIFI_CS (GPIO_PORTB | GPIO_PIN6 | GPIO_OUTPUT_SET | \ + GPIO_OUTPUT | GPIO_PULLUP | GPIO_SPEED_50MHz) +# define GPIO_D14 (GPIO_PORTB | GPIO_PIN9 | GPIO_OUTPUT_CLEAR | \ + 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_D0 (GPIO_PORTA | GPIO_PIN3 | 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 /* SPI1 off */ -#define GPIO_SPI1_MOSI_OFF (GPIO_INPUT|GPIO_PULLDOWN|GPIO_PORTA|GPIO_PIN7) -#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) +#define GPIO_SPI1_MOSI_OFF (GPIO_INPUT | GPIO_PULLDOWN | \ + GPIO_PORTA | GPIO_PIN7) +#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 */ #ifdef CONFIG_WL_CC3000 # 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 #ifdef HAVE_MMCSD # 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 /* SPI chip selects */ #ifdef CONFIG_WL_CC3000 # 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 #ifdef HAVE_MMCSD # 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 /* Devices on the onboard bus. @@ -162,13 +181,15 @@ #ifdef CONFIG_WL_CC3000 # define GPIO_GPIO0_INPUT \ - (GPIO_INPUT|GPIO_PULLUP|GPIO_PORTB|GPIO_PIN8) + (GPIO_INPUT | GPIO_PULLUP | GPIO_PORTB | GPIO_PIN8) # define GPIO_GPIO1_INPUT \ - (GPIO_INPUT|GPIO_PULLUP|GPIO_PORTB|GPIO_PIN9) + (GPIO_INPUT | GPIO_PULLUP | GPIO_PORTB | GPIO_PIN9) # 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 \ - (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 /* Itead Joystick Shield @@ -187,8 +208,8 @@ * D7 Button A Output PA8 * D8 Button F Output PA9 * D9 Button G Output PC7 - * A0 Joystick Y Output PA0 ADC_IN0 - * A1 Joystick X Output PA1 ADC_IN1 + * A0 Joystick Y Output PA0 ADC1_0 + * A1 Joystick X Output PA1 ADC1_1 * --------- ----------------- --------------------------------- * * 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 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 \ - (GPIO_INPUT | GPIO_FLOAT |GPIO_EXTI | GPIO_PORTB | GPIO_PIN10) + (GPIO_INPUT | GPIO_PULLUP |GPIO_EXTI | GPIO_PORTB | GPIO_PIN10) #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 \ - (GPIO_INPUT | GPIO_FLOAT |GPIO_EXTI | GPIO_PORTB | GPIO_PIN5) + (GPIO_INPUT | GPIO_PULLUP |GPIO_EXTI | GPIO_PORTB | GPIO_PIN5) #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 \ - (GPIO_INPUT | GPIO_FLOAT |GPIO_EXTI | GPIO_PORTA | GPIO_PIN9) + (GPIO_INPUT | GPIO_PULLUP |GPIO_EXTI | GPIO_PORTA | GPIO_PIN9) #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: * diff --git a/configs/nucleo-f4x1re/src/stm32_ajoystick.c b/configs/nucleo-f4x1re/src/stm32_ajoystick.c index 47e44b2439..17b01193e2 100644 --- a/configs/nucleo-f4x1re/src/stm32_ajoystick.c +++ b/configs/nucleo-f4x1re/src/stm32_ajoystick.c @@ -282,7 +282,7 @@ static int ajoy_sample(FAR const struct ajoy_lowerhalf_s *lower, /* Sample the discrete button inputs */ sample->as_buttons = ajoy_buttons(lower); - ivdbg("Returning: %02x\n", AJOY_SUPPORTED); + ivdbg("Returning: %02x\n", sample->as_buttons); return OK; } @@ -426,6 +426,7 @@ static void ajoy_disable(void) static int ajoy_interrupt(int irq, FAR void *context) { DEBUGASSERT(g_ajoyhandler); + if (g_ajoyhandler) { g_ajoyhandler(&g_ajoylower, g_ajoyarg);