#define USISIF 7 #define USIPF 5 #define USIOIF 6 #define USIDC 4 #define USICNT1 1 #define USICNT0 0 #define TRUE 1 #define FALSE 0 // 1,2,4,8,16,32,64,128 or 256 bytes are allowed buffer sizes #define TWI_RX_BUFFER_SIZE (8) #define TWI_RX_BUFFER_MASK ( TWI_RX_BUFFER_SIZE - 1 ) #if ( TWI_RX_BUFFER_SIZE & TWI_RX_BUFFER_MASK ) #error TWI RX buffer size is not a power of 2 #endif // 1,2,4,8,16,32,64,128 or 256 bytes are allowed buffer sizes #define TWI_TX_BUFFER_SIZE (8) #define TWI_TX_BUFFER_MASK ( TWI_TX_BUFFER_SIZE - 1 ) #if ( TWI_TX_BUFFER_SIZE & TWI_TX_BUFFER_MASK ) #error TWI TX buffer size is not a power of 2 #endif // Sample TWI transmission commands #define TWI_CMD_MASTER_WRITE 0x10 #define TWI_CMD_MASTER_READ 0x20 #define TWI_CMD_MASTER_WRITE_ALOT 0x30 #define USI_SLAVE_CHECK_ADDRESS (0x10) #define USI_SLAVE_SEND_DATA (0x01) #define USI_SLAVE_REQUEST_REPLY_FROM_SEND_DATA (0x02) #define USI_SLAVE_CHECK_REPLY_FROM_SEND_DATA (0x03) #define USI_SLAVE_REQUEST_DATA (0x04) #define USI_SLAVE_GET_DATA_AND_SEND_ACK (0x05) //! Device dependent defines #define DDR_USI DDRB #define PORT_USI PORTB #define PIN_USI PINB #define PORT_USI_SDA 0 #define PORT_USI_SCL 2 #define PIN_USI_SDA 0 #define PIN_USI_SCL 2 #define USI_START_COND_INT USISIF //! Functions implemented as macros #define SET_USI_TO_SEND_ACK() \ { \ USIDR = 0; /* Prepare ACK */ \ DDR_USI |= (1< TWI_RX_BUFFER_SIZE ) return (FALSE); // if ( msgSize > TWI_RxBufCount ) return (FALSE); if(USISR.5 == 0) return (FALSE); //stop condition for ( i=0; i TWI_TX_BUFFER_SIZE ) return (FALSE); for ( i=0; i>1 ) == TWI_slaveAddress)) { TWI_RxBufCount=0; TWI_TxBufCountTmp=0; if(TWI_RxBufCount