Christian Weiß / Mbed 2 deprecated Diplomarbeit_MW_CW

Dependencies:   mbed

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers I2C.h Source File

I2C.h

00001 /* mbed Microcontroller Library
00002  * Copyright (c) 2006-2013 ARM Limited
00003  *
00004  * Permission is hereby granted, free of charge, to any person obtaining a copy
00005  * of this software and associated documentation files (the "Software"), to deal
00006  * in the Software without restriction, including without limitation the rights
00007  * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
00008  * copies of the Software, and to permit persons to whom the Software is
00009  * furnished to do so, subject to the following conditions:
00010  *
00011  * The above copyright notice and this permission notice shall be included in
00012  * all copies or substantial portions of the Software.
00013  *
00014  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
00015  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
00016  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
00017  * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
00018  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
00019  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
00020  * SOFTWARE.
00021  */
00022 #ifndef MBED_I2C_H
00023 #define MBED_I2C_H
00024 
00025 #include "platform.h"
00026 
00027 #if DEVICE_I2C
00028 
00029 #include "i2c_api.h"
00030 
00031 namespace mbed {
00032 
00033 /** An I2C Master, used for communicating with I2C slave devices
00034  *
00035  * Example:
00036  * @code
00037  * // Read from I2C slave at address 0x62
00038  *
00039  * #include "mbed.h"
00040  *
00041  * I2C i2c(p28, p27);
00042  *
00043  * int main() {
00044  *     int address = 0x62;
00045  *     char data[2];
00046  *     i2c.read(address, data, 2);
00047  * }
00048  * @endcode
00049  */
00050 class I2C {
00051 
00052 public:
00053     enum RxStatus {
00054         NoData,
00055         MasterGeneralCall,
00056         MasterWrite,
00057         MasterRead
00058     };
00059 
00060     enum Acknowledge {
00061         NoACK = 0,
00062         ACK   = 1
00063     };
00064 
00065     /** Create an I2C Master interface, connected to the specified pins
00066      *
00067      *  @param sda I2C data line pin
00068      *  @param scl I2C clock line pin
00069      */
00070     I2C(PinName sda, PinName scl);
00071 
00072     /** Set the frequency of the I2C interface
00073      *
00074      *  @param hz The bus frequency in hertz
00075      */
00076     void frequency(int hz);
00077 
00078     /** Read from an I2C slave
00079      *
00080      * Performs a complete read transaction. The bottom bit of
00081      * the address is forced to 1 to indicate a read.
00082      *
00083      *  @param address 8-bit I2C slave address [ addr | 1 ]
00084      *  @param data Pointer to the byte-array to read data in to
00085      *  @param length Number of bytes to read
00086      *  @param repeated Repeated start, true - don't send stop at end
00087      *
00088      *  @returns
00089      *       0 on success (ack),
00090      *   non-0 on failure (nack)
00091      */
00092     int read(int address, char *data, int length, bool repeated = false);
00093 
00094     /** Read a single byte from the I2C bus
00095      *
00096      *  @param ack indicates if the byte is to be acknowledged (1 = acknowledge)
00097      *
00098      *  @returns
00099      *    the byte read
00100      */
00101     int read(int ack);
00102 
00103     /** Write to an I2C slave
00104      *
00105      * Performs a complete write transaction. The bottom bit of
00106      * the address is forced to 0 to indicate a write.
00107      *
00108      *  @param address 8-bit I2C slave address [ addr | 0 ]
00109      *  @param data Pointer to the byte-array data to send
00110      *  @param length Number of bytes to send
00111      *  @param repeated Repeated start, true - do not send stop at end
00112      *
00113      *  @returns
00114      *       0 on success (ack),
00115      *   non-0 on failure (nack)
00116      */
00117     int write(int address, const char *data, int length, bool repeated = false);
00118 
00119     /** Write single byte out on the I2C bus
00120      *
00121      *  @param data data to write out on bus
00122      *
00123      *  @returns
00124      *    '1' if an ACK was received,
00125      *    '0' otherwise
00126      */
00127     int write(int data);
00128 
00129     /** Creates a start condition on the I2C bus
00130      */
00131 
00132     void start(void);
00133 
00134     /** Creates a stop condition on the I2C bus
00135      */
00136     void stop(void);
00137 
00138 protected:
00139     void aquire();
00140 
00141     i2c_t _i2c;
00142     static I2C  *_owner;
00143     int         _hz;
00144 };
00145 
00146 } // namespace mbed
00147 
00148 #endif
00149 
00150 #endif
00151