mbed SDK library sources

Fork of mbed-src by mbed official

Development branch of the mbed library sources. This library is kept in synch with the latest changes from the mbed SDK and it is not guaranteed to work.

If you are looking for a stable and tested release, please import one of the official mbed library releases:

Import librarymbed

The official Mbed 2 C/C++ SDK provides the software platform and libraries to build your applications.

Committer:
mbed_official
Date:
Tue Feb 11 15:00:06 2014 +0000
Revision:
89:9655231f5786
Parent:
13:0645d8841f51
Synchronized with git revision 17499c34d273f02497e0706d3abc516b12f3fc62

Full URL: https://github.com/mbedmicro/mbed/commit/17499c34d273f02497e0706d3abc516b12f3fc62/

Who changed what in which revision?

UserRevisionLine numberNew contents of line
bogdanm 13:0645d8841f51 1 /* mbed Microcontroller Library
bogdanm 13:0645d8841f51 2 * Copyright (c) 2006-2013 ARM Limited
bogdanm 13:0645d8841f51 3 *
bogdanm 13:0645d8841f51 4 * Licensed under the Apache License, Version 2.0 (the "License");
bogdanm 13:0645d8841f51 5 * you may not use this file except in compliance with the License.
bogdanm 13:0645d8841f51 6 * You may obtain a copy of the License at
bogdanm 13:0645d8841f51 7 *
bogdanm 13:0645d8841f51 8 * http://www.apache.org/licenses/LICENSE-2.0
bogdanm 13:0645d8841f51 9 *
bogdanm 13:0645d8841f51 10 * Unless required by applicable law or agreed to in writing, software
bogdanm 13:0645d8841f51 11 * distributed under the License is distributed on an "AS IS" BASIS,
bogdanm 13:0645d8841f51 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
bogdanm 13:0645d8841f51 13 * See the License for the specific language governing permissions and
bogdanm 13:0645d8841f51 14 * limitations under the License.
bogdanm 13:0645d8841f51 15 */
bogdanm 13:0645d8841f51 16 #ifndef MBED_I2C_H
bogdanm 13:0645d8841f51 17 #define MBED_I2C_H
bogdanm 13:0645d8841f51 18
bogdanm 13:0645d8841f51 19 #include "platform.h"
bogdanm 13:0645d8841f51 20
bogdanm 13:0645d8841f51 21 #if DEVICE_I2C
bogdanm 13:0645d8841f51 22
bogdanm 13:0645d8841f51 23 #include "i2c_api.h"
bogdanm 13:0645d8841f51 24
bogdanm 13:0645d8841f51 25 namespace mbed {
bogdanm 13:0645d8841f51 26
bogdanm 13:0645d8841f51 27 /** An I2C Master, used for communicating with I2C slave devices
bogdanm 13:0645d8841f51 28 *
bogdanm 13:0645d8841f51 29 * Example:
bogdanm 13:0645d8841f51 30 * @code
bogdanm 13:0645d8841f51 31 * // Read from I2C slave at address 0x62
bogdanm 13:0645d8841f51 32 *
bogdanm 13:0645d8841f51 33 * #include "mbed.h"
bogdanm 13:0645d8841f51 34 *
bogdanm 13:0645d8841f51 35 * I2C i2c(p28, p27);
bogdanm 13:0645d8841f51 36 *
bogdanm 13:0645d8841f51 37 * int main() {
bogdanm 13:0645d8841f51 38 * int address = 0x62;
bogdanm 13:0645d8841f51 39 * char data[2];
bogdanm 13:0645d8841f51 40 * i2c.read(address, data, 2);
bogdanm 13:0645d8841f51 41 * }
bogdanm 13:0645d8841f51 42 * @endcode
bogdanm 13:0645d8841f51 43 */
bogdanm 13:0645d8841f51 44 class I2C {
bogdanm 13:0645d8841f51 45
bogdanm 13:0645d8841f51 46 public:
bogdanm 13:0645d8841f51 47 enum RxStatus {
bogdanm 13:0645d8841f51 48 NoData,
bogdanm 13:0645d8841f51 49 MasterGeneralCall,
bogdanm 13:0645d8841f51 50 MasterWrite,
bogdanm 13:0645d8841f51 51 MasterRead
bogdanm 13:0645d8841f51 52 };
bogdanm 13:0645d8841f51 53
bogdanm 13:0645d8841f51 54 enum Acknowledge {
bogdanm 13:0645d8841f51 55 NoACK = 0,
bogdanm 13:0645d8841f51 56 ACK = 1
bogdanm 13:0645d8841f51 57 };
bogdanm 13:0645d8841f51 58
bogdanm 13:0645d8841f51 59 /** Create an I2C Master interface, connected to the specified pins
bogdanm 13:0645d8841f51 60 *
bogdanm 13:0645d8841f51 61 * @param sda I2C data line pin
bogdanm 13:0645d8841f51 62 * @param scl I2C clock line pin
bogdanm 13:0645d8841f51 63 */
bogdanm 13:0645d8841f51 64 I2C(PinName sda, PinName scl);
bogdanm 13:0645d8841f51 65
bogdanm 13:0645d8841f51 66 /** Set the frequency of the I2C interface
bogdanm 13:0645d8841f51 67 *
bogdanm 13:0645d8841f51 68 * @param hz The bus frequency in hertz
bogdanm 13:0645d8841f51 69 */
bogdanm 13:0645d8841f51 70 void frequency(int hz);
bogdanm 13:0645d8841f51 71
bogdanm 13:0645d8841f51 72 /** Read from an I2C slave
bogdanm 13:0645d8841f51 73 *
bogdanm 13:0645d8841f51 74 * Performs a complete read transaction. The bottom bit of
bogdanm 13:0645d8841f51 75 * the address is forced to 1 to indicate a read.
bogdanm 13:0645d8841f51 76 *
bogdanm 13:0645d8841f51 77 * @param address 8-bit I2C slave address [ addr | 1 ]
bogdanm 13:0645d8841f51 78 * @param data Pointer to the byte-array to read data in to
bogdanm 13:0645d8841f51 79 * @param length Number of bytes to read
bogdanm 13:0645d8841f51 80 * @param repeated Repeated start, true - don't send stop at end
bogdanm 13:0645d8841f51 81 *
bogdanm 13:0645d8841f51 82 * @returns
bogdanm 13:0645d8841f51 83 * 0 on success (ack),
bogdanm 13:0645d8841f51 84 * non-0 on failure (nack)
bogdanm 13:0645d8841f51 85 */
bogdanm 13:0645d8841f51 86 int read(int address, char *data, int length, bool repeated = false);
bogdanm 13:0645d8841f51 87
bogdanm 13:0645d8841f51 88 /** Read a single byte from the I2C bus
bogdanm 13:0645d8841f51 89 *
bogdanm 13:0645d8841f51 90 * @param ack indicates if the byte is to be acknowledged (1 = acknowledge)
bogdanm 13:0645d8841f51 91 *
bogdanm 13:0645d8841f51 92 * @returns
bogdanm 13:0645d8841f51 93 * the byte read
bogdanm 13:0645d8841f51 94 */
bogdanm 13:0645d8841f51 95 int read(int ack);
bogdanm 13:0645d8841f51 96
bogdanm 13:0645d8841f51 97 /** Write to an I2C slave
bogdanm 13:0645d8841f51 98 *
bogdanm 13:0645d8841f51 99 * Performs a complete write transaction. The bottom bit of
bogdanm 13:0645d8841f51 100 * the address is forced to 0 to indicate a write.
bogdanm 13:0645d8841f51 101 *
bogdanm 13:0645d8841f51 102 * @param address 8-bit I2C slave address [ addr | 0 ]
bogdanm 13:0645d8841f51 103 * @param data Pointer to the byte-array data to send
bogdanm 13:0645d8841f51 104 * @param length Number of bytes to send
bogdanm 13:0645d8841f51 105 * @param repeated Repeated start, true - do not send stop at end
bogdanm 13:0645d8841f51 106 *
bogdanm 13:0645d8841f51 107 * @returns
bogdanm 13:0645d8841f51 108 * 0 on success (ack),
bogdanm 13:0645d8841f51 109 * non-0 on failure (nack)
bogdanm 13:0645d8841f51 110 */
bogdanm 13:0645d8841f51 111 int write(int address, const char *data, int length, bool repeated = false);
bogdanm 13:0645d8841f51 112
bogdanm 13:0645d8841f51 113 /** Write single byte out on the I2C bus
bogdanm 13:0645d8841f51 114 *
bogdanm 13:0645d8841f51 115 * @param data data to write out on bus
bogdanm 13:0645d8841f51 116 *
bogdanm 13:0645d8841f51 117 * @returns
bogdanm 13:0645d8841f51 118 * '1' if an ACK was received,
bogdanm 13:0645d8841f51 119 * '0' otherwise
bogdanm 13:0645d8841f51 120 */
bogdanm 13:0645d8841f51 121 int write(int data);
bogdanm 13:0645d8841f51 122
bogdanm 13:0645d8841f51 123 /** Creates a start condition on the I2C bus
bogdanm 13:0645d8841f51 124 */
bogdanm 13:0645d8841f51 125
bogdanm 13:0645d8841f51 126 void start(void);
bogdanm 13:0645d8841f51 127
bogdanm 13:0645d8841f51 128 /** Creates a stop condition on the I2C bus
bogdanm 13:0645d8841f51 129 */
bogdanm 13:0645d8841f51 130 void stop(void);
bogdanm 13:0645d8841f51 131
bogdanm 13:0645d8841f51 132 protected:
bogdanm 13:0645d8841f51 133 void aquire();
bogdanm 13:0645d8841f51 134
bogdanm 13:0645d8841f51 135 i2c_t _i2c;
bogdanm 13:0645d8841f51 136 static I2C *_owner;
bogdanm 13:0645d8841f51 137 int _hz;
bogdanm 13:0645d8841f51 138 };
bogdanm 13:0645d8841f51 139
bogdanm 13:0645d8841f51 140 } // namespace mbed
bogdanm 13:0645d8841f51 141
bogdanm 13:0645d8841f51 142 #endif
bogdanm 13:0645d8841f51 143
bogdanm 13:0645d8841f51 144 #endif