You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@nuttx.apache.org by ac...@apache.org on 2022/11/28 20:25:06 UTC
[nuttx] 02/02: boards: Fix buttons GPIO IRQ on ESP boards
This is an automated email from the ASF dual-hosted git repository.
acassis pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/nuttx.git
commit a926445995a6d5d2beec41e9fd6cfd7f1fdb2bac
Author: Lucas Saavedra Vaz <lu...@espressif.com>
AuthorDate: Mon Nov 28 11:21:59 2022 -0300
boards: Fix buttons GPIO IRQ on ESP boards
---
.../xtensa/esp32/esp32-devkitc/src/esp32_buttons.c | 2 +-
.../esp32/esp32-ethernet-kit/src/esp32_buttons.c | 2 +-
.../xtensa/esp32/esp32-lyrat/src/esp32_buttons.c | 50 +++++++++++++++-------
.../esp32/esp32-sparrow-kit/src/esp32_buttons.c | 2 +-
.../esp32/esp32-wrover-kit/src/esp32_buttons.c | 2 +-
.../lilygo_tbeam_lora_gps/src/esp32_buttons.c | 2 +-
.../xtensa/esp32/ttgo_eink5_v2/src/esp32_buttons.c | 2 +-
.../esp32/ttgo_lora_esp32/src/esp32_buttons.c | 2 +-
.../esp32/ttgo_t_display_esp32/src/esp32_buttons.c | 2 +-
.../esp32s3/esp32s3-devkit/src/esp32s3_buttons.c | 2 +-
10 files changed, 44 insertions(+), 24 deletions(-)
diff --git a/boards/xtensa/esp32/esp32-devkitc/src/esp32_buttons.c b/boards/xtensa/esp32/esp32-devkitc/src/esp32_buttons.c
index 0bfc102c25..0a33fb9636 100644
--- a/boards/xtensa/esp32/esp32-devkitc/src/esp32_buttons.c
+++ b/boards/xtensa/esp32/esp32-devkitc/src/esp32_buttons.c
@@ -130,7 +130,7 @@ uint32_t board_buttons(void)
int board_button_irq(int id, xcpt_t irqhandler, void *arg)
{
int ret;
- DEBUGASSERT(id == BUTTON_BOOT);
+ DEBUGASSERT(id == 0);
int irq = ESP32_PIN2IRQ(BUTTON_BOOT);
diff --git a/boards/xtensa/esp32/esp32-ethernet-kit/src/esp32_buttons.c b/boards/xtensa/esp32/esp32-ethernet-kit/src/esp32_buttons.c
index 274d35c2c1..1966dd76be 100644
--- a/boards/xtensa/esp32/esp32-ethernet-kit/src/esp32_buttons.c
+++ b/boards/xtensa/esp32/esp32-ethernet-kit/src/esp32_buttons.c
@@ -130,7 +130,7 @@ uint32_t board_buttons(void)
int board_button_irq(int id, xcpt_t irqhandler, void *arg)
{
int ret;
- DEBUGASSERT(id == BUTTON_BOOT);
+ DEBUGASSERT(id == 0);
int irq = ESP32_PIN2IRQ(BUTTON_BOOT);
diff --git a/boards/xtensa/esp32/esp32-lyrat/src/esp32_buttons.c b/boards/xtensa/esp32/esp32-lyrat/src/esp32_buttons.c
index a37ed78d8c..b18fa98405 100644
--- a/boards/xtensa/esp32/esp32-lyrat/src/esp32_buttons.c
+++ b/boards/xtensa/esp32/esp32-lyrat/src/esp32_buttons.c
@@ -31,6 +31,7 @@
#include <stdio.h>
#include <nuttx/arch.h>
+#include <arch/board/board.h>
#include <nuttx/board.h>
#include <nuttx/irq.h>
#include <arch/irq.h>
@@ -39,6 +40,24 @@
#include "esp32-lyrat.h"
+/****************************************************************************
+ * Pre-processor Definitions
+ ****************************************************************************/
+
+#ifndef ARRAY_SIZE
+# define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0]))
+#endif
+
+/****************************************************************************
+ * Private Data
+ ****************************************************************************/
+
+static const int g_buttons[] =
+{
+ BUTTON_REC,
+ BUTTON_MODE
+};
+
/****************************************************************************
* Public Functions
****************************************************************************/
@@ -56,9 +75,11 @@
uint32_t board_button_initialize(void)
{
- esp32_configgpio(BUTTON_MODE, INPUT_FUNCTION_3 | PULLUP);
- esp32_configgpio(BUTTON_REC, INPUT_FUNCTION_3 | PULLUP);
- return 1;
+ /* GPIOs 36 and 39 do not support PULLUP/PULLDOWN */
+
+ esp32_configgpio(BUTTON_MODE, INPUT_FUNCTION_3);
+ esp32_configgpio(BUTTON_REC, INPUT_FUNCTION_3);
+ return NUM_BUTTONS;
}
/****************************************************************************
@@ -77,22 +98,18 @@ uint32_t board_buttons(void)
uint8_t ret = 0;
int n = 0;
- const uint8_t btn_id_arr[] =
- {
- BUTTON_REC,
- BUTTON_MODE
- };
-
- for (uint8_t btn_id = 0; btn_id < sizeof(btn_id_arr); btn_id++)
+ for (uint8_t btn_id = 0; btn_id < ARRAY_SIZE(g_buttons); btn_id++)
{
iinfo("Reading button %d\n", btn_id);
- bool b0 = esp32_gpioread(btn_id_arr[btn_id]);
+
+ const int button_gpio = g_buttons[btn_id];
+ bool b0 = esp32_gpioread(button_gpio);
for (int i = 0; i < 10; i++)
{
up_mdelay(1); /* TODO */
- bool b1 = esp32_gpioread(btn_id_arr[btn_id]);
+ bool b1 = esp32_gpioread(button_gpio);
if (b0 == b1)
{
@@ -139,8 +156,11 @@ uint32_t board_buttons(void)
#ifdef CONFIG_ARCH_IRQBUTTONS
int board_button_irq(int id, xcpt_t irqhandler, void *arg)
{
+ DEBUGASSERT(id < ARRAY_SIZE(g_buttons));
+
int ret;
- int irq = ESP32_PIN2IRQ(id);
+ int pin = g_buttons[id];
+ int irq = ESP32_PIN2IRQ(pin);
if (NULL != irqhandler)
{
@@ -155,7 +175,7 @@ int board_button_irq(int id, xcpt_t irqhandler, void *arg)
return ret;
}
- gpioinfo("Attach %p\n", irqhandler);
+ gpioinfo("Attach %p to pin %d\n", irqhandler, pin);
gpioinfo("Enabling the interrupt\n");
@@ -165,7 +185,7 @@ int board_button_irq(int id, xcpt_t irqhandler, void *arg)
}
else
{
- gpioinfo("Disable the interrupt\n");
+ gpioinfo("Disabled interrupts from pin %d\n", pin);
esp32_gpioirqdisable(irq);
}
diff --git a/boards/xtensa/esp32/esp32-sparrow-kit/src/esp32_buttons.c b/boards/xtensa/esp32/esp32-sparrow-kit/src/esp32_buttons.c
index 66096be619..9c4b25f2ed 100644
--- a/boards/xtensa/esp32/esp32-sparrow-kit/src/esp32_buttons.c
+++ b/boards/xtensa/esp32/esp32-sparrow-kit/src/esp32_buttons.c
@@ -130,7 +130,7 @@ uint32_t board_buttons(void)
int board_button_irq(int id, xcpt_t irqhandler, void *arg)
{
int ret;
- DEBUGASSERT(id == BUTTON_BOOT);
+ DEBUGASSERT(id == 0);
int irq = ESP32_PIN2IRQ(BUTTON_BOOT);
diff --git a/boards/xtensa/esp32/esp32-wrover-kit/src/esp32_buttons.c b/boards/xtensa/esp32/esp32-wrover-kit/src/esp32_buttons.c
index 0f028f6cc3..5d1fb4727c 100644
--- a/boards/xtensa/esp32/esp32-wrover-kit/src/esp32_buttons.c
+++ b/boards/xtensa/esp32/esp32-wrover-kit/src/esp32_buttons.c
@@ -130,7 +130,7 @@ uint32_t board_buttons(void)
int board_button_irq(int id, xcpt_t irqhandler, void *arg)
{
int ret;
- DEBUGASSERT(id == BUTTON_BOOT);
+ DEBUGASSERT(id == 0);
int irq = ESP32_PIN2IRQ(BUTTON_BOOT);
diff --git a/boards/xtensa/esp32/lilygo_tbeam_lora_gps/src/esp32_buttons.c b/boards/xtensa/esp32/lilygo_tbeam_lora_gps/src/esp32_buttons.c
index fce4b49d0e..e3aad8508f 100644
--- a/boards/xtensa/esp32/lilygo_tbeam_lora_gps/src/esp32_buttons.c
+++ b/boards/xtensa/esp32/lilygo_tbeam_lora_gps/src/esp32_buttons.c
@@ -130,7 +130,7 @@ uint32_t board_buttons(void)
int board_button_irq(int id, xcpt_t irqhandler, void *arg)
{
int ret;
- DEBUGASSERT(id == BUTTON_BOOT);
+ DEBUGASSERT(id == 0);
int irq = ESP32_PIN2IRQ(BUTTON_BOOT);
diff --git a/boards/xtensa/esp32/ttgo_eink5_v2/src/esp32_buttons.c b/boards/xtensa/esp32/ttgo_eink5_v2/src/esp32_buttons.c
index 7ba55fb747..baa74fd40e 100644
--- a/boards/xtensa/esp32/ttgo_eink5_v2/src/esp32_buttons.c
+++ b/boards/xtensa/esp32/ttgo_eink5_v2/src/esp32_buttons.c
@@ -132,7 +132,7 @@ uint32_t board_buttons(void)
int board_button_irq(int id, xcpt_t irqhandler, void *arg)
{
int ret;
- DEBUGASSERT(id == BUTTON_BOOT);
+ DEBUGASSERT(id == 0);
int irq = ESP32_PIN2IRQ(BUTTON_BOOT);
diff --git a/boards/xtensa/esp32/ttgo_lora_esp32/src/esp32_buttons.c b/boards/xtensa/esp32/ttgo_lora_esp32/src/esp32_buttons.c
index ae63ad80bf..374713d884 100644
--- a/boards/xtensa/esp32/ttgo_lora_esp32/src/esp32_buttons.c
+++ b/boards/xtensa/esp32/ttgo_lora_esp32/src/esp32_buttons.c
@@ -130,7 +130,7 @@ uint32_t board_buttons(void)
int board_button_irq(int id, xcpt_t irqhandler, void *arg)
{
int ret;
- DEBUGASSERT(id == BUTTON_BOOT);
+ DEBUGASSERT(id == 0);
int irq = ESP32_PIN2IRQ(BUTTON_BOOT);
diff --git a/boards/xtensa/esp32/ttgo_t_display_esp32/src/esp32_buttons.c b/boards/xtensa/esp32/ttgo_t_display_esp32/src/esp32_buttons.c
index 38922beacf..d46f4e37ca 100644
--- a/boards/xtensa/esp32/ttgo_t_display_esp32/src/esp32_buttons.c
+++ b/boards/xtensa/esp32/ttgo_t_display_esp32/src/esp32_buttons.c
@@ -130,7 +130,7 @@ uint32_t board_buttons(void)
int board_button_irq(int id, xcpt_t irqhandler, void *arg)
{
int ret;
- DEBUGASSERT(id == BUTTON_BOOT);
+ DEBUGASSERT(id == 0);
int irq = ESP32_PIN2IRQ(BUTTON_BOOT);
diff --git a/boards/xtensa/esp32s3/esp32s3-devkit/src/esp32s3_buttons.c b/boards/xtensa/esp32s3/esp32s3-devkit/src/esp32s3_buttons.c
index 9dabe6097c..ace06b60f6 100644
--- a/boards/xtensa/esp32s3/esp32s3-devkit/src/esp32s3_buttons.c
+++ b/boards/xtensa/esp32s3/esp32s3-devkit/src/esp32s3_buttons.c
@@ -128,7 +128,7 @@ uint32_t board_buttons(void)
int board_button_irq(int id, xcpt_t irqhandler, void *arg)
{
int ret;
- DEBUGASSERT(id == BUTTON_BOOT);
+ DEBUGASSERT(id == 0);
int irq = ESP32S3_PIN2IRQ(BUTTON_BOOT);