Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
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
Generated on Wed Jul 13 2022 02:59:11 by
