aboutsummaryrefslogtreecommitdiffstats
path: root/libmaple/include
diff options
context:
space:
mode:
authorBarry Carter <barry.carter@robotfuzz.com>2012-09-04 22:24:25 +0100
committerBarry Carter <barry.carter@robotfuzz.com>2012-09-04 22:24:25 +0100
commit576457f5477597c3bc88f06cbae01c01a459c32e (patch)
tree1d06cf1099407f98ef243cf56d1bc40af29574e4 /libmaple/include
parentef5c4b9f30da2f4b9a0edd4231e95b3ef8a88d43 (diff)
downloadlibrambutan-576457f5477597c3bc88f06cbae01c01a459c32e.tar.gz
librambutan-576457f5477597c3bc88f06cbae01c01a459c32e.zip
I2C slave support cleanups.
Added fix for corner case where badly behaving master doesn't NACK and we don't get the callbacks fires. Removed my own name from several places and added attribution to the correct place. Updated include comments to reference the fact it now supports I2C slave Signed-off-by:- Barry Carter <barry.carter@gmail.com>
Diffstat (limited to 'libmaple/include')
-rw-r--r--libmaple/include/libmaple/i2c.h13
-rw-r--r--libmaple/include/libmaple/i2c_common.h2
2 files changed, 11 insertions, 4 deletions
diff --git a/libmaple/include/libmaple/i2c.h b/libmaple/include/libmaple/i2c.h
index d4eac61..5a9da58 100644
--- a/libmaple/include/libmaple/i2c.h
+++ b/libmaple/include/libmaple/i2c.h
@@ -29,12 +29,19 @@
* @file libmaple/include/libmaple/i2c.h
* @brief Inter-Integrated Circuit (I2C) peripheral support
*
- * Currently master-only. Usage notes:
+ * Supports Master and Slave.
+ * Master Usage notes:
*
* - Enable an I2C device with i2c_master_enable().
* - Initialize an array of struct i2c_msg to suit the bus
* transactions (reads/writes) you wish to perform.
* - Call i2c_master_xfer() to do the work.
+ *
+ * Slave Usage notes:
+ * - Enable I2C slave by calling i2c_slave_enable().
+ * Check flags for usage. Enabling master also enabled slave.
+ * - initialise the i2c_msg struct and the data buffer
+ * - initialise the callback functions
*/
#ifndef _LIBMAPLE_I2C_H_
@@ -201,7 +208,7 @@ typedef struct i2c_msg {
#define I2C_SLAVE_USE_RX_BUFFER 0x10 // Use a buffered message when doing a slave recv
#define I2C_SLAVE_USE_TX_BUFFER 0x20 // Use a buffered message when doing a slave transmit
#define I2C_SLAVE_DUAL_ADDRESS 0x40 // Enable the dual slave address scheme
-#define I2C_SLAVE_GENERAL_CALL 0x80 // Enable the dual slave address scheme
+#define I2C_SLAVE_GENERAL_CALL 0x80 // Enable the general call on address 0x00
void i2c_master_enable(i2c_dev *dev, uint32 flags);
#define I2C_ERROR_PROTOCOL (-1)
@@ -411,7 +418,7 @@ static inline void i2c_set_trise(i2c_dev *dev, uint32 trise) {
dev->regs->TRISE = trise;
}
-/* Barry Carter
+/*
* Slave support
*/
diff --git a/libmaple/include/libmaple/i2c_common.h b/libmaple/include/libmaple/i2c_common.h
index 5debcb8..93e17e2 100644
--- a/libmaple/include/libmaple/i2c_common.h
+++ b/libmaple/include/libmaple/i2c_common.h
@@ -93,7 +93,7 @@ typedef struct i2c_dev {
volatile i2c_state state; /**< Device state */
uint32 config_flags; /**< Configuration flags */
- /* Barry Carter
+ /*
* Slave implementation. Callback functions in this struct allow
* for a separate callback function for each I2C unit available onboard
*/