25
25
#include <avr/io.h>
26
26
#include <avr/interrupt.h>
27
27
#include <compat/twi.h>
28
- #include "Arduino.h" // for digitalWrite and millis
28
+ #include "Arduino.h" // for digitalWrite and micros
29
29
30
30
#ifndef cbi
31
31
#define cbi (sfr , bit ) (_SFR_BYTE(sfr) &= ~_BV(bit))
@@ -42,7 +42,7 @@ static volatile uint8_t twi_state;
42
42
static volatile uint8_t twi_slarw ;
43
43
static volatile uint8_t twi_sendStop ; // should the transaction end with a stop
44
44
static volatile uint8_t twi_inRepStart ; // in the middle of a repeated start
45
- static volatile uint8_t twi_timeout_ms = 0 ;
45
+ static volatile uint16_t twi_timeout_us = 0 ;
46
46
47
47
static void (* twi_onSlaveTransmit )(void );
48
48
static void (* twi_onSlaveReceive )(uint8_t * , int );
@@ -155,9 +155,9 @@ uint8_t twi_readFrom(uint8_t address, uint8_t* data, uint8_t length, uint8_t sen
155
155
}
156
156
157
157
// wait until twi is ready, become master receiver
158
- uint32_t startMillis = millis ();
158
+ uint32_t startMicros = micros ();
159
159
while (TWI_READY != twi_state ){
160
- if ((twi_timeout_ms > 0 ) && (millis () - startMillis > twi_timeout_ms )) {
160
+ if ((twi_timeout_us > 0 ) && (micros () - startMicros > twi_timeout_us )) {
161
161
twi_handleTimeout ();
162
162
return 0 ;
163
163
}
@@ -199,9 +199,9 @@ uint8_t twi_readFrom(uint8_t address, uint8_t* data, uint8_t length, uint8_t sen
199
199
TWCR = _BV (TWEN ) | _BV (TWIE ) | _BV (TWEA ) | _BV (TWINT ) | _BV (TWSTA );
200
200
201
201
// wait for read operation to complete
202
- startMillis = millis ();
202
+ startMicros = micros ();
203
203
while (TWI_MRX == twi_state ){
204
- if ((twi_timeout_ms > 0 ) && (millis () - startMillis > twi_timeout_ms )) {
204
+ if ((twi_timeout_us > 0 ) && (micros () - startMicros > twi_timeout_us )) {
205
205
twi_handleTimeout ();
206
206
return 0 ;
207
207
}
@@ -244,9 +244,9 @@ uint8_t twi_writeTo(uint8_t address, uint8_t* data, uint8_t length, uint8_t wait
244
244
}
245
245
246
246
// wait until twi is ready, become master transmitter
247
- uint32_t startMillis = millis ();
247
+ uint32_t startMicros = micros ();
248
248
while (TWI_READY != twi_state ){
249
- if ((twi_timeout_ms > 0 ) && (millis () - startMillis > twi_timeout_ms )) {
249
+ if ((twi_timeout_us > 0 ) && (micros () - startMicros > twi_timeout_us )) {
250
250
twi_handleTimeout ();
251
251
return 4 ;
252
252
}
@@ -291,9 +291,9 @@ uint8_t twi_writeTo(uint8_t address, uint8_t* data, uint8_t length, uint8_t wait
291
291
TWCR = _BV (TWINT ) | _BV (TWEA ) | _BV (TWEN ) | _BV (TWIE ) | _BV (TWSTA ); // enable INTs
292
292
293
293
// wait for write operation to complete
294
- startMillis = millis ();
294
+ startMicros = micros ();
295
295
while (wait && (TWI_MTX == twi_state )){
296
- if ((twi_timeout_ms > 0 ) && (millis () - startMillis > twi_timeout_ms )) {
296
+ if ((twi_timeout_us > 0 ) && (micros () - startMicros > twi_timeout_us )) {
297
297
twi_handleTimeout ();
298
298
return 4 ;
299
299
}
@@ -397,7 +397,7 @@ void twi_stop(void)
397
397
uint32_t counter = 0 ;
398
398
while (TWCR & _BV (TWSTO )){
399
399
counter ++ ;
400
- if ((twi_timeout_ms > 0 ) && (counter >= 25000 )) {
400
+ if ((twi_timeout_us > 0 ) && (counter >= 25000 )) {
401
401
twi_handleTimeout ();
402
402
return ;
403
403
}
@@ -425,19 +425,19 @@ void twi_releaseBus(void)
425
425
}
426
426
427
427
/*
428
- * Function twi_setTimeoutInMillis
428
+ * Function twi_setTimeoutInMicros
429
429
* Desc set a global timeout for while loops that we might get stuck in
430
- * Input timeout value in milliseconds
430
+ * Input timeout value in microseconds
431
431
* Output none
432
432
*/
433
- void twi_setTimeoutInMillis ( uint8_t timeout )
433
+ void twi_setTimeoutInMicros ( uint16_t timeout )
434
434
{
435
- twi_timeout_ms = timeout ;
435
+ twi_timeout_us = timeout ;
436
436
}
437
437
438
438
/*
439
439
* Function twi_handleTimeout
440
- * Desc do this stuff when a while loop here has run for longer than twi_timeout_ms milliseconds
440
+ * Desc do this stuff when a while loop here has run for longer than twi_timeout_us microseconds
441
441
* Input none
442
442
* Output none
443
443
*/
0 commit comments