Skip to content

Commit d302091

Browse files
authored
Changed pinMode() default interrupt type DISABLED to previously set (espressif#6695)
* Changed in pinMode() default intr_type pins default configuration has intr_type = GPIO_INTR_DISABLE With this implementation, it will set the intr_type to previously set intr_type. It will no longer disable interrupt, when pinmode is called multiple times on same pin with interrupt enabled.
1 parent 5dc4226 commit d302091

File tree

1 file changed

+27
-23
lines changed

1 file changed

+27
-23
lines changed

Diff for: cores/esp32/esp32-hal-gpio.c

+27-23
Original file line numberDiff line numberDiff line change
@@ -91,30 +91,34 @@ static InterruptHandle_t __pinInterruptHandlers[SOC_GPIO_PIN_COUNT] = {0,};
9191

9292
extern void ARDUINO_ISR_ATTR __pinMode(uint8_t pin, uint8_t mode)
9393
{
94-
if (!GPIO_IS_VALID_GPIO(pin)) {
94+
if (!GPIO_IS_VALID_GPIO(pin)) {
9595
log_e("Invalid pin selected");
96-
return;
97-
}
98-
gpio_config_t conf = {
99-
.pin_bit_mask = (1ULL<<pin), /*!< GPIO pin: set with bit mask, each bit maps to a GPIO */
100-
.mode = GPIO_MODE_DISABLE, /*!< GPIO mode: set input/output mode */
101-
.pull_up_en = GPIO_PULLUP_DISABLE, /*!< GPIO pull-up */
102-
.pull_down_en = GPIO_PULLDOWN_DISABLE, /*!< GPIO pull-down */
103-
.intr_type = GPIO_INTR_DISABLE /*!< GPIO interrupt type */
104-
};
105-
if (mode < 0x20) {//io
106-
conf.mode = mode & (INPUT | OUTPUT);
107-
if (mode & OPEN_DRAIN) {
108-
conf.mode |= GPIO_MODE_DEF_OD;
109-
}
110-
if (mode & PULLUP) {
111-
conf.pull_up_en = GPIO_PULLUP_ENABLE;
112-
}
113-
if (mode & PULLDOWN) {
114-
conf.pull_down_en = GPIO_PULLDOWN_ENABLE;
115-
}
116-
}
117-
if(gpio_config(&conf) != ESP_OK)
96+
return;
97+
}
98+
99+
gpio_hal_context_t gpiohal;
100+
gpiohal.dev = GPIO_LL_GET_HW(GPIO_PORT_0);
101+
102+
gpio_config_t conf = {
103+
.pin_bit_mask = (1ULL<<pin), /*!< GPIO pin: set with bit mask, each bit maps to a GPIO */
104+
.mode = GPIO_MODE_DISABLE, /*!< GPIO mode: set input/output mode */
105+
.pull_up_en = GPIO_PULLUP_DISABLE, /*!< GPIO pull-up */
106+
.pull_down_en = GPIO_PULLDOWN_DISABLE, /*!< GPIO pull-down */
107+
.intr_type = gpiohal.dev->pin[pin].int_type /*!< GPIO interrupt type - previously set */
108+
};
109+
if (mode < 0x20) {//io
110+
conf.mode = mode & (INPUT | OUTPUT);
111+
if (mode & OPEN_DRAIN) {
112+
conf.mode |= GPIO_MODE_DEF_OD;
113+
}
114+
if (mode & PULLUP) {
115+
conf.pull_up_en = GPIO_PULLUP_ENABLE;
116+
}
117+
if (mode & PULLDOWN) {
118+
conf.pull_down_en = GPIO_PULLDOWN_ENABLE;
119+
}
120+
}
121+
if(gpio_config(&conf) != ESP_OK)
118122
{
119123
log_e("GPIO config failed");
120124
return;

0 commit comments

Comments
 (0)