summaryrefslogtreecommitdiff
path: root/digital/avr
diff options
context:
space:
mode:
authorNicolas Schodet2010-11-29 23:08:10 +0100
committerNicolas Schodet2010-11-29 23:08:10 +0100
commit0c020cbe52aab0c79c4ccb33d219e54ad916f864 (patch)
treeeeb9f27235c89e960fcd476be09a1ebde3b8ac5b /digital/avr
parent349c9264c9ffbc81d620000486050173ef424acc (diff)
digital/avr/modules/twi: merge several similar states code, refs #29
Diffstat (limited to 'digital/avr')
-rw-r--r--digital/avr/modules/twi/twi_hard.avr.c29
1 files changed, 7 insertions, 22 deletions
diff --git a/digital/avr/modules/twi/twi_hard.avr.c b/digital/avr/modules/twi/twi_hard.avr.c
index 9a36d85a..d93deace 100644
--- a/digital/avr/modules/twi/twi_hard.avr.c
+++ b/digital/avr/modules/twi/twi_hard.avr.c
@@ -286,7 +286,6 @@ SIGNAL (SIG_2WIRE_SERIAL)
/* Arbitration lost, same as TW_MR_ARB_LOST. */
/* TODO */
break;
- /*** Master transmitter mode. ***/
case TW_MT_DATA_ACK:
case TW_MT_SLA_ACK:
/* Address or data acknowledged, send more data or stop. */
@@ -303,22 +302,23 @@ SIGNAL (SIG_2WIRE_SERIAL)
TWI_MASTER_DONE ();
}
break;
+ case TW_MR_DATA_NACK:
+ /* Data not acknowledged, last byte, stop transfer. */
+ ctx.master_transfer_buffer[index++] = TWDR;
+ /* no break; */
+ case TW_MR_SLA_NACK:
+ /* Address not acknowledged, stop. */
case TW_MT_SLA_NACK:
/* Address not acknowledged, stop. */
- TWCR = TWCR_OK | _BV (TWSTO);
- ctx.master_current_status = TWI_MASTER_ERROR;
- /* Call master done callback. */
- TWI_MASTER_DONE ();
- break;
case TW_MT_DATA_NACK:
/* Data not acknowledged, there is no more room in slave device,
* stop. */
+ /* Same code, index is 0 for SLA + NACK. */
TWCR = TWCR_OK | _BV (TWSTO);
ctx.master_current_status = index;
/* Call master done callback. */
TWI_MASTER_DONE ();
break;
- /*** Master receiver mode. ***/
case TW_MR_SLA_ACK:
/* Address acknowledged, receive first data. */
if (ctx.master_transfer_buffer_size <= 1)
@@ -326,13 +326,6 @@ SIGNAL (SIG_2WIRE_SERIAL)
else
TWCR = TWCR_OK | _BV (TWEA);
break;
- case TW_MR_SLA_NACK:
- /* Address not acknowledged, stop. */
- TWCR = TWCR_OK | _BV (TWSTO);
- ctx.master_current_status = TWI_MASTER_ERROR;
- /* Call master done callback. */
- TWI_MASTER_DONE ();
- break;
case TW_MR_DATA_ACK:
/* Data acknowledged, receive next data. */
ctx.master_transfer_buffer[index++] = TWDR;
@@ -341,14 +334,6 @@ SIGNAL (SIG_2WIRE_SERIAL)
else
TWCR = TWCR_OK | _BV (TWEA);
break;
- case TW_MR_DATA_NACK:
- /* Data not acknowledged, last byte, stop transfer. */
- ctx.master_transfer_buffer[index++] = TWDR;
- TWCR = TWCR_OK | _BV (TWSTO);
- ctx.master_current_status = index;
- /* Call master done callback. */
- TWI_MASTER_DONE ();
- break;
# endif/* AC_TWI_MASTER_ENABLE */
}
}