From d00a3ceba344f02d18ddea89fd969433f696d00e Mon Sep 17 00:00:00 2001 From: Sandeep Mistry Date: Tue, 25 Aug 2015 10:24:24 -0400 Subject: [PATCH] implement Wire.end() for AVR core --- hardware/arduino/avr/libraries/Wire/Wire.cpp | 5 +++++ hardware/arduino/avr/libraries/Wire/Wire.h | 4 ++++ .../arduino/avr/libraries/Wire/utility/twi.c | 16 ++++++++++++++++ .../arduino/avr/libraries/Wire/utility/twi.h | 1 + 4 files changed, 26 insertions(+) diff --git a/hardware/arduino/avr/libraries/Wire/Wire.cpp b/hardware/arduino/avr/libraries/Wire/Wire.cpp index 835b794d5..2bd48ed8a 100644 --- a/hardware/arduino/avr/libraries/Wire/Wire.cpp +++ b/hardware/arduino/avr/libraries/Wire/Wire.cpp @@ -75,6 +75,11 @@ void TwoWire::begin(int address) begin((uint8_t)address); } +void TwoWire::end(void) +{ + twi_disable(); +} + void TwoWire::setClock(uint32_t frequency) { TWBR = ((F_CPU / frequency) - 16) / 2; diff --git a/hardware/arduino/avr/libraries/Wire/Wire.h b/hardware/arduino/avr/libraries/Wire/Wire.h index 7d009598e..702f37d64 100644 --- a/hardware/arduino/avr/libraries/Wire/Wire.h +++ b/hardware/arduino/avr/libraries/Wire/Wire.h @@ -27,6 +27,9 @@ #define BUFFER_LENGTH 32 +// WIRE_HAS_END means Wire has end() +#define WIRE_HAS_END 1 + class TwoWire : public Stream { private: @@ -49,6 +52,7 @@ class TwoWire : public Stream void begin(); void begin(uint8_t); void begin(int); + void end(); void setClock(uint32_t); void beginTransmission(uint8_t); void beginTransmission(int); diff --git a/hardware/arduino/avr/libraries/Wire/utility/twi.c b/hardware/arduino/avr/libraries/Wire/utility/twi.c index 201d7d1bb..d7d72bcb7 100644 --- a/hardware/arduino/avr/libraries/Wire/utility/twi.c +++ b/hardware/arduino/avr/libraries/Wire/utility/twi.c @@ -90,6 +90,22 @@ void twi_init(void) TWCR = _BV(TWEN) | _BV(TWIE) | _BV(TWEA); } +/* + * Function twi_disable + * Desc disables twi pins + * Input none + * Output none + */ +void twi_disable(void) +{ + // disable twi module, acks, and twi interrupt + TWCR &= ~(_BV(TWEN) | _BV(TWIE) | _BV(TWEA)); + + // deactivate internal pullups for twi. + digitalWrite(SDA, 0); + digitalWrite(SCL, 0); +} + /* * Function twi_slaveInit * Desc sets slave address and enables interrupt diff --git a/hardware/arduino/avr/libraries/Wire/utility/twi.h b/hardware/arduino/avr/libraries/Wire/utility/twi.h index 652659339..4c52bc5a0 100644 --- a/hardware/arduino/avr/libraries/Wire/utility/twi.h +++ b/hardware/arduino/avr/libraries/Wire/utility/twi.h @@ -39,6 +39,7 @@ #define TWI_STX 4 void twi_init(void); + void twi_disable(void); void twi_setAddress(uint8_t); uint8_t twi_readFrom(uint8_t, uint8_t*, uint8_t, uint8_t); uint8_t twi_writeTo(uint8_t, uint8_t*, uint8_t, uint8_t, uint8_t);