From c4623f42979e50ab62c119da1d4335ff3232f77d Mon Sep 17 00:00:00 2001 From: "Earle F. Philhower, III" Date: Fri, 10 Jun 2022 11:42:04 -0700 Subject: [PATCH] Disable Wire slave interrupt on ::end (#621) Fixes #620 --- libraries/Wire/src/Wire.cpp | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/libraries/Wire/src/Wire.cpp b/libraries/Wire/src/Wire.cpp index 40e2b89..4e0d1d4 100644 --- a/libraries/Wire/src/Wire.cpp +++ b/libraries/Wire/src/Wire.cpp @@ -132,7 +132,6 @@ void TwoWire::begin(uint8_t addr) { irq_set_exclusive_handler(irqNo, i2c_hw_index(_i2c) == 0 ? _handler0 : _handler1); irq_set_enabled(irqNo, true); - gpio_set_function(_sda, GPIO_FUNC_I2C); gpio_pull_up(_sda); gpio_set_function(_scl, GPIO_FUNC_I2C); @@ -192,7 +191,15 @@ void TwoWire::end() { // ERROR return; } + + if (_slave) { + int irqNo = I2C0_IRQ + i2c_hw_index(_i2c); + irq_remove_handler(irqNo, i2c_hw_index(_i2c) == 0 ? _handler0 : _handler1); + irq_set_enabled(irqNo, false); + } + i2c_deinit(_i2c); + pinMode(_sda, INPUT); pinMode(_scl, INPUT); _running = false;