From 79159729cd621b97e3e1de2478f45697f242a661 Mon Sep 17 00:00:00 2001 From: Mark Sikora Date: Sun, 23 Apr 2017 20:12:22 -0400 Subject: [PATCH] Update I2C library --- keyboard/ergodox/i2cmaster.h | 22 +++++++++++----------- keyboard/ergodox/twimaster.c | 20 +++++++------------- 2 files changed, 18 insertions(+), 24 deletions(-) diff --git a/keyboard/ergodox/i2cmaster.h b/keyboard/ergodox/i2cmaster.h index 3917b9e6..8e5d1462 100644 --- a/keyboard/ergodox/i2cmaster.h +++ b/keyboard/ergodox/i2cmaster.h @@ -1,17 +1,17 @@ #ifndef _I2CMASTER_H -#define _I2CMASTER_H 1 +#define _I2CMASTER_H /************************************************************************* * Title: C include file for the I2C master interface * (i2cmaster.S or twimaster.c) -* Author: Peter Fleury http://jump.to/fleury -* File: $Id: i2cmaster.h,v 1.10 2005/03/06 22:39:57 Peter Exp $ -* Software: AVR-GCC 3.4.3 / avr-libc 1.2.3 +* Author: Peter Fleury +* File: $Id: i2cmaster.h,v 1.12 2015/09/16 09:27:58 peter Exp $ +* Software: AVR-GCC 4.x * Target: any AVR device * Usage: see Doxygen manual **************************************************************************/ -#ifdef DOXYGEN /** + @file @defgroup pfleury_ic2master I2C Master library @code #include @endcode @@ -38,8 +38,9 @@ Replaced the incorrect quarter period delays found in AVR300 with half period delays. - @author Peter Fleury pfleury@gmx.ch http://jump.to/fleury - + @author Peter Fleury pfleury@gmx.ch http://tinyurl.com/peterfleury + @copyright (C) 2015 Peter Fleury, GNU General Public License Version 3 + @par API Usage Example The following code shows typical usage of this library, see example test_i2cmaster.c @@ -77,7 +78,7 @@ @endcode */ -#endif /* DOXYGEN */ + /**@{*/ @@ -96,7 +97,6 @@ /** @brief initialize the I2C master interace. Need to be called only once - @param void @return none */ extern void i2c_init(void); @@ -104,7 +104,6 @@ extern void i2c_init(void); /** @brief Terminates the data transfer and releases the I2C bus - @param void @return none */ extern void i2c_stop(void); @@ -164,7 +163,7 @@ extern unsigned char i2c_readNak(void); /** @brief read one byte from the I2C device - Implemented as a macro, which calls either i2c_readAck or i2c_readNak + Implemented as a macro, which calls either @ref i2c_readAck or @ref i2c_readNak @param ack 1 send ack, request more data from device
0 send nak, read is followed by a stop condition @@ -174,5 +173,6 @@ extern unsigned char i2c_read(unsigned char ack); #define i2c_read(ack) (ack) ? i2c_readAck() : i2c_readNak(); + /**@}*/ #endif diff --git a/keyboard/ergodox/twimaster.c b/keyboard/ergodox/twimaster.c index f91c08e6..3f9ccb3c 100644 --- a/keyboard/ergodox/twimaster.c +++ b/keyboard/ergodox/twimaster.c @@ -1,7 +1,7 @@ /************************************************************************* * Title: I2C master library using hardware TWI interface * Author: Peter Fleury http://jump.to/fleury -* File: $Id: twimaster.c,v 1.3 2005/07/02 11:14:21 Peter Exp $ +* File: $Id: twimaster.c,v 1.4 2015/01/17 12:16:05 peter Exp $ * Software: AVR-GCC 3.4.3 / avr-libc 1.2.3 * Target: any AVR device with hardware TWI * Usage: API compatible with I2C Software Library i2cmaster.h @@ -12,13 +12,13 @@ #include -/* define CPU frequency in Mhz here if not defined in Makefile */ +/* define CPU frequency in hz here if not defined in Makefile */ #ifndef F_CPU -#define F_CPU 16000000UL +#define F_CPU 4000000UL #endif /* I2C clock in Hz */ -#define SCL_CLOCK 400000L +#define SCL_CLOCK 100000L /************************************************************************* @@ -26,16 +26,10 @@ *************************************************************************/ void i2c_init(void) { - /* initialize TWI clock - * minimal values in Bit Rate Register (TWBR) and minimal Prescaler - * bits in the TWI Status Register should give us maximal possible - * I2C bus speed - about 444 kHz - * - * for more details, see 20.5.2 in ATmega16/32 secification - */ + /* initialize TWI clock: 100 kHz clock, TWPS = 0 => prescaler = 1 */ - TWSR = 0; /* no prescaler */ - TWBR = 10; /* must be >= 10 for stable operation */ + TWSR = 0; /* no prescaler */ + TWBR = ((F_CPU/SCL_CLOCK)-16)/2; /* must be > 10 for stable operation */ }/* i2c_init */ -- 2.46.2