Revision 16da2c8f
Added sink/release sda/scl
scout_avr/bom/tiny-twi.c | ||
---|---|---|
25 | 25 |
USISR |= n; |
26 | 26 |
} |
27 | 27 |
|
28 |
static void twi_release_scl() { |
|
29 |
DDRB &= ~_BV(DDB2); |
|
30 |
} |
|
31 |
|
|
32 |
static void twi_sink_sda() { |
|
33 |
DDRB |= _BV(DDB0); |
|
34 |
} |
|
35 |
|
|
36 |
static void twi_release_sda() { |
|
37 |
DDRB &= ~_BV(DDB0); |
|
38 |
} |
|
39 |
|
|
28 | 40 |
static void twi_ready() { |
29 | 41 |
|
30 | 42 |
// enable start condition interrupt |
... | ... | |
33 | 45 |
// disable counter overflow interrupt |
34 | 46 |
USICR &= ~_BV(USIOIE); |
35 | 47 |
|
36 |
// TODO somehow release SCL following the ovf interrupt |
|
37 |
|
|
38 | 48 |
state = IDLE; |
39 | 49 |
} |
40 | 50 |
|
... | ... | |
57 | 67 |
|
58 | 68 |
// set SDA low |
59 | 69 |
USIDR = 0; |
70 |
twi_sink_sda(); |
|
60 | 71 |
|
61 | 72 |
// set state |
62 | 73 |
state = is_read? SEND_READ_ACK : SEND_WRITE_ACK; |
... | ... | |
86 | 97 |
break; |
87 | 98 |
|
88 | 99 |
case SEND_WRITE_ACK: |
100 |
twi_release_sda(); |
|
89 | 101 |
state = RECV_DATA; |
90 | 102 |
break; |
91 | 103 |
|
... | ... | |
100 | 112 |
break; |
101 | 113 |
|
102 | 114 |
case SEND_READ_ACK: |
115 |
twi_release_sda(); |
|
103 | 116 |
// TODO write to USIDR |
104 | 117 |
state = SEND_DATA; |
105 | 118 |
break; |
... | ... | |
110 | 123 |
case RECV_ACK: |
111 | 124 |
break; |
112 | 125 |
} |
126 |
twi_release_scl(); |
|
113 | 127 |
} |
114 | 128 |
|
129 |
<<<<<<< HEAD |
|
115 | 130 |
void smb_init(slave_rx_t callback) { |
116 | 131 |
state = START; |
117 | 132 |
|
133 |
======= |
|
134 |
void smb_init() { |
|
135 |
>>>>>>> Added sink/release sda/scl |
|
118 | 136 |
// TODO do we want USICS0 (3)? |
119 | 137 |
USICR = _BV(USIWM1) | _BV(USIWM0) | _BV(USICS1); |
120 | 138 |
twi_ready(); |
Also available in: Unified diff