From d6f77c1ef14cc6b4636fde34d2025e5f23bc9e36 Mon Sep 17 00:00:00 2001 From: barthess Date: Sat, 5 Feb 2011 18:22:45 +0000 Subject: I2C. After comparing of two drivers decided to start of importing features from Alberto driver to mine. git-svn-id: svn://svn.code.sf.net/p/chibios/svn/branches/i2c_dev@2712 35acf78f-673a-0410-8e92-d51de3d6d3f4 --- os/hal/include/i2c.h | 146 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 146 insertions(+) create mode 100644 os/hal/include/i2c.h (limited to 'os/hal/include') diff --git a/os/hal/include/i2c.h b/os/hal/include/i2c.h new file mode 100644 index 000000000..64816186b --- /dev/null +++ b/os/hal/include/i2c.h @@ -0,0 +1,146 @@ +/* + ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. + + This file is part of ChibiOS/RT. + + ChibiOS/RT is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + ChibiOS/RT is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . +*/ + +/** + * @file i2c.h + * @brief I2C Driver macros and structures. + * + * @addtogroup I2C + * @{ + */ + +#ifndef _I2C_H_ +#define _I2C_H_ + +#if HAL_USE_I2C || defined(__DOXYGEN__) + +/*===========================================================================*/ +/* Driver constants. */ +/*===========================================================================*/ + + +/*===========================================================================*/ +/* Driver pre-compile time settings. */ +/*===========================================================================*/ + +/** + * @brief Enables the mutual exclusion APIs on the I2C bus. + */ +#if !defined(I2C_USE_MUTUAL_EXCLUSION) || defined(__DOXYGEN__) +#define I2C_USE_MUTUAL_EXCLUSION TRUE +#endif + +/*===========================================================================*/ +/* Derived constants and error checks. */ +/*===========================================================================*/ + +/*===========================================================================*/ +/* Driver data structures and types. */ +/*===========================================================================*/ + +/** + * @brief Driver state machine possible states. + */ +typedef enum { + I2C_UNINIT = 0, /**< Not initialized. */ + I2C_STOP = 1, /**< Stopped. */ + I2C_READY = 2, /**< Ready. */ + I2C_MACTIVE = 3, /**< START condition sent. */ + I2C_MTRANSMIT = 4, /**< Master transmitting. */ + I2C_MRECEIVE = 5, /**< Master receiving. */ + I2C_MWAIT_TF = 6, /**< Master wait Transmission Finished */ + I2C_MERROR = 7 /**< Error condition. */ +} i2cstate_t; + +#include "i2c_lld.h" + +/*===========================================================================*/ +/* Driver macros. */ +/*===========================================================================*/ + +/** + * @brief Read mode. + */ +#define I2C_READ 1 + +/** + * @brief Write mode. + */ +#define I2C_WRITE 0 + +/** + * @brief Seven bits addresses header builder. + * + * @param[in] addr seven bits address value + * @param[in] rw read/write flag + * + * @return A 16 bit value representing the header, the most + * significant byte is always zero. + */ +#define I2C_ADDR7(addr, rw) (uint16_t)((addr) << 1 | (rw)) + + +/** + * @brief Ten bits addresses header builder. + * + * @param[in] addr ten bits address value + * @param[in] rw read/write flag + * + * @return A 16 bit value representing the header, the most + * significant byte is the first one to be transmitted. + */ +#define I2C_ADDR10(addr, rw) \ + (uint16_t)(0xF000 | \ + (((addr) & 0x0300) << 1) | \ + (((rw) << 8)) | \ + ((addr) & 0x00FF)) + +/*===========================================================================*/ +/* External declarations. */ +/*===========================================================================*/ +#ifdef __cplusplus +extern "C" { +#endif + void i2cInit(void); + void i2cObjectInit(I2CDriver *i2cp); + void i2cStart(I2CDriver *i2cp, I2CConfig *config); + void i2cStop(I2CDriver *i2cp); + void i2cMasterTransmit(I2CDriver *i2cp, I2CSlaveConfig *i2cscfg); + void i2cMasterReceive(I2CDriver *i2cp, I2CSlaveConfig *i2cscfg); + + + + void i2cMasterStartI(I2CDriver *i2cp,uint16_t header); + void i2cMasterStopI(I2CDriver *i2cp); + void i2cMasterRestartI(I2CDriver *i2cp); + void i2cMasterTransmitI(I2CDriver *i2cp, size_t n, const uint8_t *txbuf); + void i2cMasterReceiveI(I2CDriver *i2cp, size_t n, uint8_t *rxbuf); +#if I2C_USE_MUTUAL_EXCLUSION + void i2cAcquireBus(I2CDriver *i2cp); + void i2cReleaseBus(I2CDriver *i2cp); +#endif /* I2C_USE_MUTUAL_EXCLUSION */ +#ifdef __cplusplus +} +#endif + +#endif /* HAL_USE_I2C */ + +#endif /* _I2C_H_ */ + +/** @} */ -- cgit v1.2.3