1 #ifndef EAGLE_EBOARD_HELPLIB_TWI 2 #define EAGLE_EBOARD_HELPLIB_TWI 17 #define TWI_FREQ 100000L 23 #define TWI_FREQ 100000L 26 #ifndef TWI_BUFFER_LENGTH 27 #define TWI_BUFFER_LENGTH 32 40 uint8_t
twi_readFrom(uint8_t, uint8_t*, uint8_t, uint8_t);
41 uint8_t
twi_writeTo(uint8_t, uint8_t*, uint8_t, uint8_t, uint8_t);
49 #ifndef TWI_BUFFER_LENGTH 50 #define TWI_BUFFER_LENGTH 32 61 #include <avr/interrupt.h> 62 #include <compat/twi.h> 65 #define cbi(sfr, bit) (_SFR_BYTE(sfr) &= ~_BV(bit)) 69 #define sbi(sfr, bit) (_SFR_BYTE(sfr) |= _BV(bit)) 72 #include "pins_arduino.h" 106 digitalWrite(SDA, 1);
107 digitalWrite(SCL, 1);
111 TWBR = ((F_CPU /
TWI_FREQ) - 16) / 2;
113 TWCR = _BV(TWEN) | _BV(TWIE) | _BV(TWEA);
116 uint8_t
twi_readFrom(uint8_t address, uint8_t* data, uint8_t length, uint8_t sendStop) {
136 TWCR = _BV(TWINT) | _BV(TWEA) | _BV(TWEN) | _BV(TWIE);
139 TWCR = _BV(TWEN) | _BV(TWIE) | _BV(TWEA) | _BV(TWINT) | _BV(TWSTA);
151 uint8_t
twi_writeTo(uint8_t address, uint8_t* data, uint8_t length, uint8_t wait, uint8_t sendStop) {
173 TWCR = _BV(TWINT) | _BV(TWEA) | _BV(TWEN) | _BV(TWIE);
176 TWCR = _BV(TWINT) | _BV(TWEA) | _BV(TWEN) | _BV(TWIE) | _BV(TWSTA);
181 else if (
twi_error == TW_MT_SLA_NACK)
return 2;
182 else if (
twi_error == TW_MT_DATA_NACK)
return 3;
186 uint8_t
twi_transmit(
const uint8_t* data, uint8_t length) {
209 TWCR = _BV(TWEN) | _BV(TWIE) | _BV(TWINT) | _BV(TWEA);
211 TWCR = _BV(TWEN) | _BV(TWIE) | _BV(TWINT);
217 TWCR = _BV(TWEN) | _BV(TWIE) | _BV(TWEA) | _BV(TWINT) | _BV(TWSTO);
219 while(TWCR & _BV(TWSTO))
continue;
225 TWCR = _BV(TWEN) | _BV(TWIE) | _BV(TWEA) | _BV(TWINT);
246 TWCR = _BV(TWINT) | _BV(TWSTA)| _BV(TWEN) ;
257 case TW_MT_DATA_NACK:
274 case TW_MR_DATA_NACK:
279 TWCR = _BV(TWINT) | _BV(TWSTA)| _BV(TWEN) ;
289 case TW_SR_GCALL_ACK:
290 case TW_SR_ARB_LOST_SLA_ACK:
291 case TW_SR_ARB_LOST_GCALL_ACK:
298 case TW_SR_GCALL_DATA_ACK:
314 case TW_SR_DATA_NACK:
315 case TW_SR_GCALL_DATA_NACK:
320 case TW_ST_ARB_LOST_SLA_ACK:
335 case TW_ST_DATA_NACK:
336 case TW_ST_LAST_DATA:
void twi_releaseBus(void)
void twi_setAddress(uint8_t)
static volatile uint8_t twi_error
static void(* twi_onSlaveReceive)(uint8_t *, int)
static volatile uint8_t twi_slarw
uint8_t twi_transmit(const uint8_t *, uint8_t)
static volatile uint8_t twi_txBufferLength
uint8_t twi_readFrom(uint8_t, uint8_t *, uint8_t, uint8_t)
static uint8_t twi_rxBuffer[32]
void twi_setFrequency(uint32_t)
uint8_t twi_writeTo(uint8_t, uint8_t *, uint8_t, uint8_t, uint8_t)
static uint8_t twi_txBuffer[32]
#define TWI_BUFFER_LENGTH
static volatile uint8_t twi_masterBufferLength
static volatile uint8_t twi_state
static volatile uint8_t twi_masterBufferIndex
static volatile uint8_t twi_inRepStart
void twi_attachSlaveRxEvent(void(*)(uint8_t *, int))
static uint8_t twi_masterBuffer[32]
static volatile uint8_t twi_rxBufferIndex
static void(* twi_onSlaveTransmit)(void)
static volatile uint8_t twi_txBufferIndex
void twi_attachSlaveTxEvent(void(*)(void))
static volatile uint8_t twi_sendStop