projects
/
pub
/
USBasp.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Add start of a SDP service table, which will be linked to the Bluetooth SDP code.
[pub/USBasp.git]
/
LUFA
/
Drivers
/
Peripheral
/
TWI.c
diff --git
a/LUFA/Drivers/Peripheral/TWI.c
b/LUFA/Drivers/Peripheral/TWI.c
index
6028bba
..
9e0c20d
100644
(file)
--- a/
LUFA/Drivers/Peripheral/TWI.c
+++ b/
LUFA/Drivers/Peripheral/TWI.c
@@
-7,39
+7,58
@@
\r
#include "TWI.h"
\r
\r
\r
#include "TWI.h"
\r
\r
-bool TWI_StartTransmission(uint8_t SlaveAddress)
\r
+bool TWI_StartTransmission(uint8_t SlaveAddress
, uint8_t TimeoutMS
)
\r
{
\r
for (;;)
\r
{
\r
{
\r
for (;;)
\r
{
\r
-
uint8_t IterationsRemaining = 50
;
\r
-
bool BusCaptured = false
;
\r
+
bool BusCaptured = false
;
\r
+
uint16_t TimeoutRemaining
;
\r
\r
\r
- while (IterationsRemaining-- && !BusCaptured)
\r
+ TWCR = ((1 << TWINT) | (1 << TWSTA) | (1 << TWEN));
\r
+
\r
+ TimeoutRemaining = (TimeoutMS * 100);
\r
+ while (TimeoutRemaining-- && !(BusCaptured))
\r
{
\r
{
\r
- TWCR = ((1 << TWINT) | (1 << TWSTA) | (1 << TWEN));
\r
- while (!(TWCR & (1 << TWINT)));
\r
-
\r
- switch (TWSR & TW_STATUS_MASK)
\r
+ if (TWCR & (1 << TWINT))
\r
{
\r
{
\r
- case TW_START:
\r
- case TW_REP_START:
\r
- BusCaptured = true;
\r
- break;
\r
- case TW_MT_ARB_LOST:
\r
- continue;
\r
- default:
\r
- return false;
\r
+ switch (TWSR & TW_STATUS_MASK)
\r
+ {
\r
+ case TW_START:
\r
+ case TW_REP_START:
\r
+ BusCaptured = true;
\r
+ break;
\r
+ case TW_MT_ARB_LOST:
\r
+ TWCR = ((1 << TWINT) | (1 << TWSTA) | (1 << TWEN));
\r
+ continue;
\r
+ default:
\r
+ TWCR = (1 << TWEN);
\r
+ return false;
\r
+ }
\r
}
\r
}
\r
+
\r
+ _delay_us(10);
\r
}
\r
\r
if (!(BusCaptured))
\r
}
\r
\r
if (!(BusCaptured))
\r
- return false;
\r
-
\r
+ {
\r
+ TWCR = (1 << TWEN);
\r
+ return false;
\r
+ }
\r
+
\r
TWDR = SlaveAddress;
\r
TWCR = ((1 << TWINT) | (1 << TWEN));
\r
TWDR = SlaveAddress;
\r
TWCR = ((1 << TWINT) | (1 << TWEN));
\r
- while (!(TWCR & (1 << TWINT)));
\r
\r
\r
- GPIOR0 = (TWSR & TW_STATUS_MASK);
\r
+ TimeoutRemaining = (TimeoutMS * 100);
\r
+ while (TimeoutRemaining--)
\r
+ {
\r
+ if (TWCR & (1 << TWINT))
\r
+ break;
\r
+
\r
+ _delay_us(10);
\r
+ }
\r
+
\r
+ if (!(TimeoutRemaining))
\r
+ return false;
\r
\r
switch (TWSR & TW_STATUS_MASK)
\r
{
\r
\r
switch (TWSR & TW_STATUS_MASK)
\r
{
\r
@@
-47,8
+66,8
@@
bool TWI_StartTransmission(uint8_t SlaveAddress)
case TW_MR_SLA_ACK:
\r
return true;
\r
default:
\r
case TW_MR_SLA_ACK:
\r
return true;
\r
default:
\r
- TW
I_StopTransmission(
);
\r
-
break
;
\r
- }
\r
+ TW
CR = ((1 << TWINT) | (1 << TWSTO) | (1 << TWEN)
);
\r
+
return false
;
\r
+ }
\r
}
\r
}
\r
}
\r
}
\r