[beken-72xx] Fix CHANGE interrupt logic (#290)
* fix CHANGE interrupt for beken-72xx * Update cores/beken-72xx/arduino/src/wiring_irq.c --------- Co-authored-by: Kuba Szczodrzyński <kuba@szczodrzynski.pl>
This commit is contained in:
@@ -9,19 +9,19 @@ static void irqHandler(unsigned char gpio) {
|
|||||||
PinData *data = pinData(pin);
|
PinData *data = pinData(pin);
|
||||||
if (!data->irqHandler)
|
if (!data->irqHandler)
|
||||||
return;
|
return;
|
||||||
if (data->irqChange) {
|
|
||||||
if (data->gpioMode == INPUT_PULLDOWN) {
|
|
||||||
data->gpioMode = INPUT_PULLUP;
|
|
||||||
gpio_int_enable(pin->gpio, GPIO_INT_LEVEL_FALLING, irqHandler);
|
|
||||||
} else if (data->gpioMode == INPUT_PULLUP) {
|
|
||||||
data->gpioMode = INPUT_PULLDOWN;
|
|
||||||
gpio_int_enable(pin->gpio, GPIO_INT_LEVEL_RISING, irqHandler);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (!data->irqParam)
|
if (!data->irqParam)
|
||||||
((voidFuncPtr)data->irqHandler)();
|
((voidFuncPtr)data->irqHandler)();
|
||||||
else
|
else
|
||||||
((voidFuncPtrParam)data->irqHandler)(data->irqParam);
|
((voidFuncPtrParam)data->irqHandler)(data->irqParam);
|
||||||
|
if (data->irqChange) {
|
||||||
|
if (data->irqMode == RISING) {
|
||||||
|
data->irqMode = FALLING;
|
||||||
|
gpio_int_enable(pin->gpio, GPIO_INT_LEVEL_FALLING, irqHandler);
|
||||||
|
} else {
|
||||||
|
data->irqMode = RISING;
|
||||||
|
gpio_int_enable(pin->gpio, GPIO_INT_LEVEL_RISING, irqHandler);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void attachInterruptParam(pin_size_t interruptNumber, voidFuncPtrParam callback, PinStatus mode, void *param) {
|
void attachInterruptParam(pin_size_t interruptNumber, voidFuncPtrParam callback, PinStatus mode, void *param) {
|
||||||
@@ -52,7 +52,13 @@ void attachInterruptParam(pin_size_t interruptNumber, voidFuncPtrParam callback,
|
|||||||
event = GPIO_INT_LEVEL_RISING;
|
event = GPIO_INT_LEVEL_RISING;
|
||||||
break;
|
break;
|
||||||
case CHANGE:
|
case CHANGE:
|
||||||
event = GPIO_INT_LEVEL_FALLING;
|
if (gpio_input(pin->gpio)) {
|
||||||
|
event = GPIO_INT_LEVEL_FALLING;
|
||||||
|
mode = FALLING;
|
||||||
|
} else {
|
||||||
|
event = GPIO_INT_LEVEL_RISING;
|
||||||
|
mode = RISING;
|
||||||
|
}
|
||||||
change = true;
|
change = true;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
|
|||||||
Reference in New Issue
Block a user