EasyManuals Logo

Atmel AVR AT90CAN32 User Manual

Atmel AVR AT90CAN32
428 pages
To Next Page IconTo Next Page
To Next Page IconTo Next Page
To Previous Page IconTo Previous Page
To Previous Page IconTo Previous Page
Page #217 background imageLoading...
Page #217 background image
217
7679H–CAN–08/08
AT90CAN32/64/128
• When the TWINT flag is set, the user must update all TWI Registers with the value relevant
for the next TWI bus cycle. As an example, TWDR must be loaded with the value to be
transmitted in the next bus cycle.
• After all TWI Register updates and other pending application software tasks have been
completed, TWCR is written. When writing TWCR, the TWINT bit should be set. Writing a
one to TWINT clears the flag. The TWI will then commence executing whatever operation
was specified by the TWCR setting.
In the following an assembly and C implementation of the example is given. Note that the code
below assumes that several definitions have been made for example by using include-files.
Assembly Code Example C Example Comments
1
ldi r16, (1<<TWINT)|
(1<<TWSTA)|
(1<<TWEN)
sts TWCR, r16
TWCR = (1<<TWINT)|
(1<<TWSTA)|
(1<<TWEN)
Send START condition
2
wait1:
lds r16,TWCR
sbrs r16,TWINT
rjmp wait1
while (!(TWCR & (1<<TWINT)));
Wait for TWINT flag set. This indicates that
the START condition has been transmitted
3
lds r16,TWSR
andi r16, 0xF8
cpi r16, START
brne ERROR
if ((TWSR & 0xF8)!= START)
ERROR();
Check value of TWI Status Register. Mask
prescaler bits. If status different from START
go to ERROR
ldi r16, SLA_W
sts TWDR, r16
ldi r16, (1<<TWINT)|
(1<<TWEN)
sts TWCR, r16
TWDR = SLA_W;
TWCR = (1<<TWINT)|(1<<TWEN);
Load SLA_W into TWDR Register. Clear
TWINT bit in TWCR to start transmission of
address
4
wait2:
lds 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.
5
lds 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
ldi r16, DATA
sts TWDR, r16
ldi r16, (1<<TWINT)|
(1<<TWEN)
sts 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:
lds 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.
7
lds 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
ldi r16, (1<<TWINT)|
(1<<TWEN) |
(1<<TWSTO)
sts TWCR, r16
TWCR = (1<<TWINT)|
(1<<TWEN) |
(1<<TWSTO);
Transmit STOP condition

Table of Contents

Questions and Answers:

Question and Answer IconNeed help?

Do you have a question about the Atmel AVR AT90CAN32 and is the answer not in the manual?

Atmel AVR AT90CAN32 Specifications

General IconGeneral
BrandAtmel
ModelAVR AT90CAN32
CategoryMicrocontrollers
LanguageEnglish

Related product manuals