7 transmission modes, Atmega128rfa1 – Rainbow Electronics ATmega128RFA1 User Manual
Page 387
387
8266A-MCU Wireless-12/09
ATmega128RFA1
Assembly Code Example
C Example
Comments
4 wait2:
in r16,TWCR
sbrs r16,TWINT
rjmp wait2
while (!(TWCR & (1<<TWINT)));
Wait for TWINT Flag set. This
indicates that the SLA+W has been
transmitted, and ACK/NACK has
been received.
in r16,TWSR
andi r16, 0xF8
cpi r16, MT_SLA_ACK
brne ERROR
if ((TWSR & 0xF8) != MT_SLA_ACK)
ERROR();
Check value of TWI Status Register.
Mask prescaler bits. If status different
from MT_SLA_ACK go to ERROR
5
ldi r16, DATA
out TWDR, r16
ldi r16, (1<<TWINT)|(1<<TWEN)
out TWCR, r16
TWDR = DATA;
TWCR = (1<<TWINT) | (1<<TWEN);
Load DATA into TWDR Register.
Clear TWINT bit in TWCR to start
transmission of data
6 wait3:
in r16,TWCR
sbrs r16,TWINT
rjmp wait3
while (!(TWCR & (1<<TWINT)));
Wait for TWINT Flag set. This
indicates that the DATA has been
transmitted, and ACK/NACK has
been received.
in r16,TWSR
andi r16, 0xF8
cpi r16, MT_DATA_ACK
brne ERROR
if ((TWSR & 0xF8) != MT_DATA_ACK)
ERROR();
Check value of TWI Status Register.
Mask prescaler bits. If status different
from MT_DATA_ACK go to ERROR
7
ldi r16,(1<<TWINT)|(1<<TWEN)|
(1<<TWSTO)
out TWCR, r16
TWCR = (1<<TWINT)|(1<<TWEN)|
(1<<TWSTO);
Transmit STOP condition
25.7 Transmission Modes
The TWI can operate in one of four major modes. These are named Master Transmitter
(MT), Master Receiver (MR), Slave Transmitter (ST) and Slave Receiver (SR). Several
of these modes can be used in the same application. As an example, the TWI can use
MT mode to write data into a TWI EEPROM, MR mode to read the data back from the
EEPROM. If other masters are present in the system, some of these might transmit
data to the TWI, and then SR mode would be used. It is the application software that
decides which modes are legal.
The following sections describe each of these modes. Possible status codes are
described along with figures detailing data transmission in each of the modes. These
figures contain the following abbreviations:
S:
START condition
Rs:
REPEATED START condition
R:
Read bit (high level at SDA)
W:
Write bit (low level at SDA)
Data: 8-bit data byte
P:
STOP condition
SLA: Slave Address
A:
Acknowledge bit (low level at SDA)
A
_
:
Not acknowledge bit (high level at SDA)
page 389 to
page 399 circles are used to indicate
that the TWINT Flag is set. The numbers in the circles show the status code held in
TWSR, with the prescaler bits masked to zero. At these points, actions must be taken
by the application to continue or complete the TWI transfer. The TWI transfer is
suspended until the TWINT Flag is cleared by software.
When the TWINT Flag is set, the status code in TWSR is used to determine the
appropriate software action. For each status code, the required software action and