The code from https://github.com/vpcola/Nucleo

Committer:
sinrab
Date:
Wed Oct 08 11:00:24 2014 +0000
Revision:
0:5464d5e415e5
The code from https://github.com/vpcola/Nucleo

Who changed what in which revision?

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