diff options
Diffstat (limited to 'libraries/Wire')
| -rw-r--r-- | libraries/Wire/Wire.cpp | 5 | ||||
| -rw-r--r-- | libraries/Wire/Wire.h | 4 | ||||
| -rw-r--r-- | libraries/Wire/keywords.txt | 2 | ||||
| -rw-r--r-- | libraries/Wire/library.properties | 1 | ||||
| -rw-r--r-- | libraries/Wire/utility/twi.c | 30 | ||||
| -rw-r--r-- | libraries/Wire/utility/twi.h | 1 | 
6 files changed, 35 insertions, 8 deletions
diff --git a/libraries/Wire/Wire.cpp b/libraries/Wire/Wire.cpp index 835b794..2bd48ed 100644 --- a/libraries/Wire/Wire.cpp +++ b/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/libraries/Wire/Wire.h b/libraries/Wire/Wire.h index 7d00959..702f37d 100644 --- a/libraries/Wire/Wire.h +++ b/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/libraries/Wire/keywords.txt b/libraries/Wire/keywords.txt index ff31475..5e3d2b1 100644 --- a/libraries/Wire/keywords.txt +++ b/libraries/Wire/keywords.txt @@ -15,8 +15,6 @@ setClock	KEYWORD2  beginTransmission	KEYWORD2  endTransmission	KEYWORD2  requestFrom	KEYWORD2 -send	KEYWORD2 -receive	KEYWORD2  onReceive	KEYWORD2  onRequest	KEYWORD2 diff --git a/libraries/Wire/library.properties b/libraries/Wire/library.properties index 0805847..811527b 100644 --- a/libraries/Wire/library.properties +++ b/libraries/Wire/library.properties @@ -4,6 +4,7 @@ author=Arduino  maintainer=Arduino <info@arduino.cc>  sentence=Allows the communication between devices or sensors connected via Two Wire Interface Bus. For all Arduino boards, BUT Arduino DUE.   paragraph= +category=Communication  url=http://www.arduino.cc/en/Reference/Wire  architectures=avr diff --git a/libraries/Wire/utility/twi.c b/libraries/Wire/utility/twi.c index 201d7d1..2af0597 100644 --- a/libraries/Wire/utility/twi.c +++ b/libraries/Wire/utility/twi.c @@ -91,6 +91,22 @@ void twi_init(void)  }  /*  + * 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   * Input    none @@ -151,7 +167,9 @@ uint8_t twi_readFrom(uint8_t address, uint8_t* data, uint8_t length, uint8_t sen      // up. Also, don't enable the START interrupt. There may be one pending from the       // repeated start that we sent outselves, and that would really confuse things.      twi_inRepStart = false;			// remember, we're dealing with an ASYNC ISR -    TWDR = twi_slarw; +    do { +      TWDR = twi_slarw; +    } while(TWCR & _BV(TWWC));      TWCR = _BV(TWINT) | _BV(TWEA) | _BV(TWEN) | _BV(TWIE);	// enable INTs, but not START    }    else @@ -231,7 +249,9 @@ uint8_t twi_writeTo(uint8_t address, uint8_t* data, uint8_t length, uint8_t wait      // up. Also, don't enable the START interrupt. There may be one pending from the       // repeated start that we sent outselves, and that would really confuse things.      twi_inRepStart = false;			// remember, we're dealing with an ASYNC ISR -    TWDR = twi_slarw;				 +    do { +      TWDR = twi_slarw;				 +    } while(TWCR & _BV(TWWC));      TWCR = _BV(TWINT) | _BV(TWEA) | _BV(TWEN) | _BV(TWIE);	// enable INTs, but not START    }    else @@ -460,18 +480,16 @@ ISR(TWI_vect)        }        break;      case TW_SR_STOP: // stop or repeated start condition received +      // ack future responses and leave slave receiver state +      twi_releaseBus();        // put a null char after data if there's room        if(twi_rxBufferIndex < TWI_BUFFER_LENGTH){          twi_rxBuffer[twi_rxBufferIndex] = '\0';        } -      // sends ack and stops interface for clock stretching -      twi_stop();        // callback to user defined callback        twi_onSlaveReceive(twi_rxBuffer, twi_rxBufferIndex);        // since we submit rx buffer to "wire" library, we can reset it        twi_rxBufferIndex = 0; -      // ack future responses and leave slave receiver state -      twi_releaseBus();        break;      case TW_SR_DATA_NACK:       // data received, returned nack      case TW_SR_GCALL_DATA_NACK: // data received generally, returned nack diff --git a/libraries/Wire/utility/twi.h b/libraries/Wire/utility/twi.h index 6526593..4c52bc5 100644 --- a/libraries/Wire/utility/twi.h +++ b/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);  | 
