Revision e92b8d00
Changed twi_run() loop to smb_poll() in a loop
scout_avr/bom/bootloader.c | ||
---|---|---|
64 | 64 |
} |
65 | 65 |
} |
66 | 66 |
|
67 |
static void timer_init(void) { |
|
68 |
TCNT0 = 0; |
|
69 |
|
|
70 |
OCR0A = 200; |
|
71 |
|
|
72 |
// clear on compare match A |
|
73 |
TCCR0A |= _BV(WGM01); |
|
74 |
// 1024 prescaler |
|
75 |
TCCR0B |= _BV(CS02) | _BV(CS00); |
|
76 |
} |
|
77 |
|
|
67 | 78 |
int main() { |
68 | 79 |
smb_init(slave_rx); |
69 | 80 |
smb_set_address(3); // TODO parameterize address |
70 |
twi_run(); |
|
71 |
// TODO timeout |
|
81 |
while (1) { |
|
82 |
smb_poll(); |
|
83 |
} |
|
72 | 84 |
return 0; |
73 | 85 |
} |
scout_avr/bom/tiny-twi-sync.c | ||
---|---|---|
168 | 168 |
} |
169 | 169 |
} |
170 | 170 |
|
171 |
void twi_run(void) { |
|
172 |
while (1) { |
|
173 |
if (USISR & _BV(USISIF)) { |
|
174 |
twi_start(); |
|
175 |
USISR |= _BV(USISIF); |
|
176 |
} |
|
177 |
if (USISR & _BV(USIOIF)) { |
|
178 |
twi_on_overflow(); |
|
179 |
USISR |= _BV(USIOIF); |
|
180 |
} |
|
181 |
if (USISR & _BV(USIPF)) { |
|
182 |
twi_on_stop(); |
|
183 |
USISR |= _BV(USIPF); |
|
184 |
} |
|
171 |
void smb_poll(void) { |
|
172 |
if (USISR & _BV(USISIF)) { |
|
173 |
twi_start(); |
|
174 |
USISR |= _BV(USISIF); |
|
175 |
} |
|
176 |
if (USISR & _BV(USIOIF)) { |
|
177 |
twi_on_overflow(); |
|
178 |
USISR |= _BV(USIOIF); |
|
179 |
} |
|
180 |
if (USISR & _BV(USIPF)) { |
|
181 |
twi_on_stop(); |
|
182 |
USISR |= _BV(USIPF); |
|
185 | 183 |
} |
186 | 184 |
} |
scout_avr/bom/tiny-twi-sync.h | ||
---|---|---|
10 | 10 |
void smb_init(slave_rx_t slave_rx); |
11 | 11 |
void smb_set_address(uint8_t addr); |
12 | 12 |
void smb_send_data(uint8_t* data, uint8_t length); |
13 |
void twi_run(void);
|
|
13 |
void smb_poll(void);
|
|
14 | 14 |
|
15 | 15 |
#endif |
Also available in: Unified diff