
159
ATmega8A [DATASHEET]
8159E–AVR–02/2013
Figure 21-9. Arbitration Between Two Masters
Note that arbitration is not allowed between:
A REPEATED START condition and a data bit.
A STOP condition and a data bit.
A REPEATED START and a STOP condition.
It is the user software’s responsibility to ensure that these illegal arbitration conditions never occur. This implies
that in multi-master systems, all data transfers must use the same composition of SLA+R/W and data packets. In
other words: All transmissions must contain the same number of data packets, otherwise the result of the arbitra-
tion is undefined.
21.6
Using the TWI
The AVR TWI is byte-oriented and interrupt based. Interrupts are issued after all bus events, like reception of a
byte or transmission of a START condition. Because the TWI is interrupt-based, the application software is free to
carry on other operations during a TWI byte transfer. Note that the TWI Interrupt Enable (TWIE) bit in TWCR
together with the Global Interrupt Enable bit in SREG allow the application to decide whether or not assertion of the
TWINT Flag should generate an interrupt request. If the TWIE bit is cleared, the application must poll the TWINT
Flag in order to detect actions on the TWI bus.
When the TWINT Flag is asserted, the TWI has finished an operation and awaits application response. In this
case, the TWI Status Register (TWSR) contains a value indicating the current state of the TWI bus. The application
software can then decide how the TWI should behave in the next TWI bus cycle by manipulating the TWCR and
TWDR Registers.
Figure 21-10 is a simple example of how the application can interface to the TWI hardware. In this example, a Mas-
ter wishes to transmit a single data byte to a Slave. This description is quite abstract, a more detailed explanation
follows later in this section. A simple code example implementing the desired behavior is also presented.
SDA from
Master A
SDA from
Master B
SDA Line
Synchronized
SCL Line
START
Master A Loses
Arbitration, SDA
A
SDA