Skip to content

Commit

Permalink
Revert "I2C slave support cleanups."
Browse files Browse the repository at this point in the history
This reverts commit 39cd07a.

Reverting pull request leaflabs#54, which breaks examples/i2c-mcp4725-dac.cpp.

Signed-off-by: Marti Bolivar <[email protected]>
  • Loading branch information
Marti Bolivar committed Jan 10, 2014
1 parent 32df297 commit 219a980
Show file tree
Hide file tree
Showing 3 changed files with 9 additions and 46 deletions.
40 changes: 5 additions & 35 deletions libmaple/i2c.c
Original file line number Diff line number Diff line change
Expand Up @@ -28,11 +28,9 @@
/**
* @file libmaple/i2c.c
* @author Perry Hung <[email protected]>
* @author Barry Carter <[email protected]>
* @brief Inter-Integrated Circuit (I2C) support.
*
* Master and Slave supported
* Slave code added Barry Carter 2012
* Currently, only master mode is supported.
*/

#include "i2c_private.h"
Expand Down Expand Up @@ -220,26 +218,6 @@ void i2c_master_enable(i2c_dev *dev, uint32 flags) {
dev->state = I2C_STATE_IDLE;
}

/**
* @brief Initialize an I2C device as slave (and master)
* @param dev Device to enable
* @param flags Bitwise or of the following I2C options:
* I2C_FAST_MODE: 400 khz operation,
* I2C_DUTY_16_9: 16/9 Tlow/Thigh duty cycle (only applicable for
* fast mode),
* I2C_BUS_RESET: Reset the bus and clock out any hung slaves on
* initialization,
* I2C_10BIT_ADDRESSING: Enable 10-bit addressing,
* I2C_REMAP: (deprecated, STM32F1 only) Remap I2C1 to SCL/PB8
* SDA/PB9.
* I2C_SLAVE_DUAL_ADDRESS: Slave can respond on 2 i2C addresses
* I2C_SLAVE_GENERAL_CALL: SLA+W broadcast to all general call
* listeners on bus. Addr 0x00
* I2C_SLAVE_USE_RX_BUFFER: Use a buffer to receive the incoming
* data. Callback at end of recv
* I2C_SLAVE_USE_TX_BUFFER: Use a buffer to transmit data.
* Callback will be called before tx
*/
void i2c_slave_enable(i2c_dev *dev, uint32 flags) {
i2c_disable(dev);
i2c_master_enable(dev, dev->config_flags | flags);
Expand Down Expand Up @@ -344,10 +322,11 @@ void _i2c_irq_handler(i2c_dev *dev) {
*/
dev->timestamp = systick_uptime();

/*
* Add Slave support
/* Add Slave support
* Barry Carter 2012
* [email protected]
*/

/* Check to see if MSL master slave bit is set */
if ((sr2 & I2C_SR2_MSL) != I2C_SR2_MSL) { /* 0 = slave mode 1 = master */

Expand Down Expand Up @@ -480,15 +459,6 @@ void _i2c_irq_handler(i2c_dev *dev) {
/* The callback with the data will happen on a NACK of the last data byte.
* This is handled in the error IRQ (AF bit)
*/
/* Handle the case where the master misbehaves by sending no NACK */
if (dev->state != I2C_STATE_IDLE) {
if (dev->state == I2C_STATE_SL_RX) {
if (dev->i2c_slave_recv_callback != NULL) (*(dev->i2c_slave_recv_callback))(dev->i2c_slave_msg);
}
else {
if (dev->i2c_slave_transmit_callback != NULL) (*(dev->i2c_slave_transmit_callback))(dev->i2c_slave_msg);
}
}
}

sr1 = sr2 = 0;
Expand Down
13 changes: 3 additions & 10 deletions libmaple/include/libmaple/i2c.h
Original file line number Diff line number Diff line change
Expand Up @@ -29,19 +29,12 @@
* @file libmaple/include/libmaple/i2c.h
* @brief Inter-Integrated Circuit (I2C) peripheral support
*
* Supports Master and Slave.
* Master Usage notes:
* Currently master-only. 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_
Expand Down Expand Up @@ -208,7 +201,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 general call on address 0x00
#define I2C_SLAVE_GENERAL_CALL 0x80 // Enable the dual slave address scheme
void i2c_master_enable(i2c_dev *dev, uint32 flags);

#define I2C_ERROR_PROTOCOL (-1)
Expand Down Expand Up @@ -418,7 +411,7 @@ static inline void i2c_set_trise(i2c_dev *dev, uint32 trise) {
dev->regs->TRISE = trise;
}

/*
/* Barry Carter
* Slave support
*/

Expand Down
2 changes: 1 addition & 1 deletion libmaple/include/libmaple/i2c_common.h
Original file line number Diff line number Diff line change
Expand Up @@ -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
*/
Expand Down

0 comments on commit 219a980

Please sign in to comment.