From 60b28c97a62f39dcb90ce51401730917650324b3 Mon Sep 17 00:00:00 2001 From: batt Date: Mon, 6 Oct 2008 17:21:46 +0000 Subject: [PATCH] Merged from external project: ********** r22406 | batt | 2008-10-02 11:48:27 +0200 (Thu, 02 Oct 2008) | 1 line Rename and move code to comply to new i2c interface. ********** git-svn-id: https://src.develer.com/svnoss/bertos/trunk@1872 38d2e660-2303-0410-9eaa-f027e97ec537 --- bertos/cfg/cfg_i2c.h | 7 ++++ bertos/cpu/avr/drv/i2c_avr.c | 72 +++--------------------------------- bertos/cpu/avr/drv/i2c_avr.h | 55 --------------------------- bertos/drv/i2c.h | 4 +- 4 files changed, 15 insertions(+), 123 deletions(-) delete mode 100644 bertos/cpu/avr/drv/i2c_avr.h diff --git a/bertos/cfg/cfg_i2c.h b/bertos/cfg/cfg_i2c.h index 9ff37c4e..5db96e2f 100644 --- a/bertos/cfg/cfg_i2c.h +++ b/bertos/cfg/cfg_i2c.h @@ -43,6 +43,13 @@ /// Comunication frequency #define CONFIG_I2C_FREQ 100000UL +/** + * I2C start timeout: for how many milliseconds + * the twi_start should try to get an ACK before + * returning error. + */ +#define CONFIG_I2C_START_TIMEOUT 100 + #endif /* CFG_I2C_H */ diff --git a/bertos/cpu/avr/drv/i2c_avr.c b/bertos/cpu/avr/drv/i2c_avr.c index cd7a4ebf..fe3a4eb1 100644 --- a/bertos/cpu/avr/drv/i2c_avr.c +++ b/bertos/cpu/avr/drv/i2c_avr.c @@ -38,8 +38,6 @@ * \author Bernie Innocenti */ -#include "i2c_avr.h" - #include "hw/hw_cpu.h" /* CLOCK_FREQ */ #include "cfg/cfg_i2c.h" @@ -50,6 +48,7 @@ #include #include #include +#include #include @@ -57,9 +56,6 @@ /* Wait for TWINT flag set: bus is ready */ #define WAIT_TWI_READY do {} while (!(TWCR & BV(TWINT))) -#define READ_BIT BV(0) - - /** * Send START condition on the bus. * @@ -205,64 +201,6 @@ int i2c_get(bool ack) return (int)(uint8_t)TWDR; } - -/** - * Send a sequence of bytes in master transmitter mode - * to the selected slave device through the TWI bus. - * - * \return true on success, false on error. - */ -bool i2c_send(const void *_buf, size_t count) -{ - const uint8_t *buf = (const uint8_t *)_buf; - - while (count--) - { - if (!i2c_put(*buf++)) - return false; - } - return true; -} - - -/** - * Receive a sequence of one or more bytes from the - * selected slave device in master receive mode through - * the TWI bus. - * - * Received data is placed in \c buf. - * - * \note a NACK is automatically given on the last received - * byte. - * - * \return true on success, false on error - */ -bool i2c_recv(void *_buf, size_t count) -{ - uint8_t *buf = (uint8_t *)_buf; - - /* - * When reading the last byte the TWEA bit is not - * set, and the eeprom should answer with NACK - */ - while (count--) - { - /* - * The last byte read does not has an ACK - * to stop communication. - */ - int c = i2c_get(count); - - if (c == EOF) - return false; - else - *buf++ = c; - } - - return true; -} - - MOD_DEFINE(i2c); /** @@ -295,13 +233,13 @@ void i2c_init(void) * Set speed: * F = CLOCK_FREQ / (16 + 2*TWBR * 4^TWPS) */ - #ifndef CONFIG_TWI_FREQ - #warning Using default value of 300000L for CONFIG_TWI_FREQ - #define CONFIG_TWI_FREQ 300000L /* ~300 kHz */ + #ifndef CONFIG_I2C_FREQ + #warning Using default value of 300000L for CONFIG_I2C_FREQ + #define CONFIG_I2C_FREQ 300000L /* ~300 kHz */ #endif #define TWI_PRESC 1 /* 4 ^ TWPS */ - TWBR = (CLOCK_FREQ / (2 * CONFIG_TWI_FREQ * TWI_PRESC)) - (8 / TWI_PRESC); + TWBR = (CLOCK_FREQ / (2 * CONFIG_I2C_FREQ * TWI_PRESC)) - (8 / TWI_PRESC); TWSR = 0; TWCR = BV(TWEN); ); diff --git a/bertos/cpu/avr/drv/i2c_avr.h b/bertos/cpu/avr/drv/i2c_avr.h deleted file mode 100644 index 2d496df7..00000000 --- a/bertos/cpu/avr/drv/i2c_avr.h +++ /dev/null @@ -1,55 +0,0 @@ -/** - * \file - * - * - * \version $Id$ - * - * \author Stefano Fedrigo - * \author Bernie Innocenti - * - * \brief Driver for the AVR ATMega TWI (interface) - */ - -#ifndef DRV_I2C_H -#define DRV_I2C_H - -#include - -bool i2c_start_w(uint8_t id); -bool i2c_start_r(uint8_t id); -void i2c_stop(void); -bool i2c_put(const uint8_t data); -bool i2c_send(const void *_buf, size_t count); -int i2c_get(bool ack); -bool i2c_recv(void *_buf, size_t count); -void i2c_init(void); - -#endif /* DRV_I2C_H */ diff --git a/bertos/drv/i2c.h b/bertos/drv/i2c.h index 907a3214..b4098d0e 100644 --- a/bertos/drv/i2c.h +++ b/bertos/drv/i2c.h @@ -40,7 +40,9 @@ #include -bool i2c_init(void); +#define READ_BIT BV(0) + +void i2c_init(void); bool i2c_start_w(uint8_t id); bool i2c_start_r(uint8_t id); void i2c_stop(void); -- 2.25.1