. , TWI TWI. , . .
TWI : , , (TWAR), TWINT ( , TWI). TWINT TWINT. TWI .
, TWINT , SCL . .
TWINT :
/
_ + / ( /)
TWI
( )
SCL SDA. . IIC. , 50 . , PORTD.0 (SCL), PORTD.1 (SDA). .
. SCL . SCL IIC (TWBR) TWI (TWSR). , CPU 16 SCL. , SCL, TWI. SCL :
FSCL= FCPU/[16+2(TWBR) 4TWPS],
TWBR - TWI;
|
|
TWPS - TWI.
. TWBR 10, TWI . TWBR 10, SDA SCL. +_+ / .
. (TWDR), / . TWDR , . 8-. TWDR , () . . TWI (TWCR). () . TWSR.
/ , . / , . .
TWI , , . TWI , , .
. , 7- TWAR. TWGCE TWAR, . , . TWCR TWI , . , , . TWI , .. , (, INT0), TWI (Idle). , , , (Power-down), .
TWI.
TWI TWBR.
7,,0. TWI. TWBR . - , SCL . .
TWI TWCR.
TWINT | TWEA | TWSTA | TWSTO | TWWC | TWEN | - | TWIE |
W/R | W/R | W/R | W/R | R | W/R | R | W/R |
|
|
TWCR TWI. TWI, , , TWDR. TWDR, .
7 TWINT. TWI. , TWI . I SREG TWIE TWCR , TWI. SCL , TWINT. TWINT 1. , . , TWI. , TWAR, TWSR TWDR.
6 TWEA. . TWEA . TWEA 1, TWI, :
1. .
2. , TWGCE TWAR.
3. .
0 TWEA . 1.
5 TWSTA. . . TWI , . , TWI , . TWSTA .
4 TWSTO. . TWSTO . , TWSTO . TWSTO . , TWI SCL SDA .
3 TWWC. . TWWC TWDR, TWINT . TWDR, TWINT=1.
2 TWEN. TWI. TWEN TWI TWI. TWEN , TWI - SCL SDA. . , TWI .
1 - . 0.
0 TWIE. TWI. 1 I SREG, TWI , TWINT.
TWI TWSR.
TWS7 | TWS6 | TWS5 | TWS4 | TWS3 | - | TWPS1 | TWPS0 | |
W/R | R | R | R | R | R | R | W/R | W/R |
7,,3 TWS. TWI. 5 TWI . . TWSR 5- 2- , . . .
|
|
2 - . 0.
1,0 TWPS. TWI. (/) ( 2.60).
2.60. TWI
TWPS1 | TWPS0 | |
. TWPS1..0 .
TWI TWDR.
TWD7 | TWD6 | TWD5 | TWD4 | TWD3 | TWD2 | TWD1 | TWD0 | |
W/R | W/R | W/R | W/R | W/R | W/R | W/R | W/R | W/R |
TWDR . TWDR . TWI . , TWINT. . TWDR TWINT. . TWDR , TWI. TWDR . , , . TWI, CPU .
7,...,0 TWD7-0. TWI. 8 , , .
TWI TWAR.
TWA6 | TWA5 | TWA4 | TWA3 | TWA2 | TWA1 | TWA0 | TWGCE | |
W/R | W/R | W/R | W/R | W/R | W/R | W/R | W/R | W/R |
TWI , , ( 7 TWAR). . TWAR , .
TWAR ($00). ( ) . , .
7,,1 TWA. TWI. TWI.
0 TWGCE. TWI. ,
|
|
TWI. TWI . , , . TWI . , TWINT , TWIE TWCR, SREG. TWIE , TWINT TWI.
TWINT TWI . TWI (TWSR) , TWI. TWI, TWCR TWDR.
. . , .
1. TWI .
TWCR :
TWCR | TWINT | TWEA | TWSTA | TWSTO | TWWC | TWEN | - | TWIE |
x | x | x |
TWEN. 1 TWSTA , 1 TWINT TWINT. TWI . INT, TWSR $08.
, , TWINT. 1 TWINT . TWI , TWINT TWCR. TWINT .
ldi r16, (1<<TWINT)|(1<<TWSTA)|(1<<TWEN);
out TWCR, r16;
2. TWINT TWCR, TWSR , .
; TWINT.
wait1:
in r16,TWCR
sbrs r16,TWINT
rjmp wait1
3. TWSR, , . TWSR , , , . , _+ TWDR. , TWDR , . TWDR _+ TWCR (. 2.61), _+, TWDR.
2.61. _+
TWCR | TWINT | TWEA | TWSTA | TWSTO | TWWC | TWEN | - | TWIE |
x | x | x |
, TWINT. 1 TWINT . TWI TWINT TWCR. TWINT .
in r16,TWSR; TWSR
andi r16, 0xF8; .
cpi r16, START; START
brne ERROR; START,
; ERROR
; _ + TWDR.
ldi r16, SLA_W
out TWDR, r16
; TWINT TWCR
ldi r16, (1<<TWINT) | (1<<TWEN)
out TWCR, r16
4. TWINT TWCR, TWSR , . , .
TWINT. _ + / (/_).
|
|
wait2:
in r16,TWCR
sbrs r16,TWINT
rjmp wait2
5. TWSR, . . TWSR , , , . , TWDR. TWCR , TWI , TWDR.
TWDR , TWINT 1. TWWC TWCR. TWDR TWINT ( 1) . TWCR:
TWCR | TWINT | TWEA | TWSTA | TWSTO | TWWC | TWEN | - | TWIE |
x | x | x |
, .
, TWINT. 1 TWINT . TWI , TWINT TWCR. TWINT .
in r16,TWSR; .
andi r16, 0xF8; .
; MT_SLA_ACK,
; ERROR
cpi r16, MT_SLA_ACK
brne ERROR
; TWDR. TWINT TWCR
;
ldi r16, DATA
out TWDR, r16
ldi r16, (1<<TWINT) | (1<<TWEN)
out TWCR, r16
6. TWINT TWCR, TWSR , . , .
TWINT. ,
; / .
wait3:
in r16,TWCR
sbrs r16,TWINT
rjmp wait3
7. TWSR, , . TWSR , , .. . , TWCR, TWI . , . , TWINT. TWINT . TWI , TWINT TWCR. TWINT . , TWINT .
; TWI.
in r16,TWSR
andi r16, 0xF8; .
cpi r16, MT_DATA_ACK;
; TWI.
; MT_DATA_ACK,
; ERROR.
brne ERROR
; .
ldi r16, (1<<TWINT)|(1<<TWEN)|(1<<TWSTO)
out TWCR, r16
, , TWI. :
TWI TWINT . , TWINT.
TWINT , TWI , TWI. , TWDR , .
TWI TWCR. TWCR , TWINT. 1 TWINT . TWI TWCR.