summaryrefslogtreecommitdiff
path: root/digital/io/src
diff options
context:
space:
mode:
authorNicolas Schodet2010-11-29 23:07:46 +0100
committerNicolas Schodet2010-11-29 23:07:46 +0100
commitdb212811293f91e0f1147eb57e5f6d5df2db10ef (patch)
tree0d531fb2c2380734a90e949ed66e4978fa8007ef /digital/io/src
parent0f105f99e378bb596f2c305f64bdd7cf1bc87446 (diff)
digital/avr/modules/twi: cleanup TWI module, refs #29, closes #90
- use contexts - changed interface - merge test programs - share polling mechanism - prepare place for other drivers - add callback system - use english comments
Diffstat (limited to 'digital/io/src')
-rw-r--r--digital/io/src/avrconfig.h18
-rw-r--r--digital/io/src/twi_master.c16
2 files changed, 23 insertions, 11 deletions
diff --git a/digital/io/src/avrconfig.h b/digital/io/src/avrconfig.h
index a9be1f29..dd3f2e87 100644
--- a/digital/io/src/avrconfig.h
+++ b/digital/io/src/avrconfig.h
@@ -84,10 +84,22 @@
#define AC_PROTO_QUOTE 1
/* twi - TWI module. */
-/** Activate master part. */
-#define AC_TWI_MASTER_ENABLE 1
-/** Activate slave part. */
+/** Driver to implement TWI: HARD, SOFT, or USI. */
+#define AC_TWI_DRIVER HARD
+/** Do not use interrupts. */
+#define AC_TWI_NO_INTERRUPT 0
+/** TWI frequency, should really be 100 kHz. */
+#define AC_TWI_FREQ 100000
+/** Enable slave part. */
#define AC_TWI_SLAVE_ENABLE 0
+/** Enable master part. */
+#define AC_TWI_MASTER_ENABLE 1
+/** Master transfer completion callback, optionally defined by the user, called
+ * at end of master transfer. */
+#undef AC_TWI_MASTER_DONE
+/** Use internal pull up. */
+#define AC_TWI_PULL_UP 0
+
/* path - Path finding module. */
/** Report path found for debug. */
diff --git a/digital/io/src/twi_master.c b/digital/io/src/twi_master.c
index 194e0fa4..cb600da8 100644
--- a/digital/io/src/twi_master.c
+++ b/digital/io/src/twi_master.c
@@ -111,10 +111,9 @@ twi_master_send_head (void)
struct twi_master_command_t *c =
&twi_master.pending[twi_master.pending_head];
/* Send command. */
- twi_ms_send (twi_master_slaves[c->slave].address, c->command,
- c->length + 1);
- while (!twi_ms_is_finished ())
- ;
+ twi_master_send (twi_master_slaves[c->slave].address, c->command,
+ c->length + 1);
+ twi_master_wait ();
/* Reset retransmission counter. */
twi_master.retransmit_counter = TWI_MASTER_RETRANSMIT_INTERVAL;
}
@@ -126,10 +125,11 @@ twi_master_update_status (uint8_t slave, uint8_t init)
{
uint8_t buffer[TWI_MASTER_STATUS_PAYLOAD_MAX + 1];
/* Read status. */
- twi_ms_read (twi_master_slaves[slave].address, buffer,
- twi_master_slaves[slave].status_length + 1);
- while (!twi_ms_is_finished ())
- ;
+ twi_master_recv (twi_master_slaves[slave].address, buffer,
+ twi_master_slaves[slave].status_length + 1);
+ uint8_t ret = twi_master_wait ();
+ if (ret != twi_master_slaves[slave].status_length + 1)
+ return 0;
uint8_t crc = crc_compute (buffer + 1,
twi_master_slaves[slave].status_length);
if (crc != buffer[0])