mbed library sources

Fork of mbed-src by mbed official

Committer:
bogdanm
Date:
Mon Aug 05 14:12:34 2013 +0300
Revision:
13:0645d8841f51
Parent:
10:3bc89ef62ce7
Update mbed sources to revision 64

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