mbed libraries for KL25Z

Dependents:   FRDM_RGBLED

Committer:
emilmont
Date:
Fri Nov 09 11:33:53 2012 +0000
Revision:
8:c14af7958ef5
Parent:
0:8024c367e29f
Child:
9:663789d7729f
SPI driver; ADC driver; DAC driver; microlib support; general bugfixing

Who changed what in which revision?

UserRevisionLine numberNew contents of line
emilmont 0:8024c367e29f 1 /* mbed Microcontroller Library - I2C
emilmont 0:8024c367e29f 2 * Copyright (c) 2007-2011 ARM Limited. All rights reserved.
emilmont 8:c14af7958ef5 3 */
emilmont 0:8024c367e29f 4 #ifndef MBED_I2C_H
emilmont 0:8024c367e29f 5 #define MBED_I2C_H
emilmont 0:8024c367e29f 6
emilmont 8:c14af7958ef5 7 #include "platform.h"
emilmont 0:8024c367e29f 8
emilmont 0:8024c367e29f 9 #if DEVICE_I2C
emilmont 0:8024c367e29f 10
emilmont 0:8024c367e29f 11 namespace mbed {
emilmont 0:8024c367e29f 12
emilmont 8:c14af7958ef5 13 /** An I2C Master, used for communicating with I2C slave devices
emilmont 0:8024c367e29f 14 *
emilmont 0:8024c367e29f 15 * Example:
emilmont 8:c14af7958ef5 16 * @code
emilmont 8:c14af7958ef5 17 * // Read from I2C slave at address 0x62
emilmont 8:c14af7958ef5 18 *
emilmont 8:c14af7958ef5 19 * #include "mbed.h"
emilmont 8:c14af7958ef5 20 *
emilmont 8:c14af7958ef5 21 * I2C i2c(p28, p27);
emilmont 8:c14af7958ef5 22 *
emilmont 8:c14af7958ef5 23 * int main() {
emilmont 8:c14af7958ef5 24 * int address = 0x62;
emilmont 8:c14af7958ef5 25 * char data[2];
emilmont 8:c14af7958ef5 26 * i2c.read(address, data, 2);
emilmont 8:c14af7958ef5 27 * }
emilmont 8:c14af7958ef5 28 * @endcode
emilmont 0:8024c367e29f 29 */
emilmont 8:c14af7958ef5 30 class I2C {
emilmont 0:8024c367e29f 31
emilmont 0:8024c367e29f 32 public:
emilmont 0:8024c367e29f 33 enum RxStatus {
emilmont 8:c14af7958ef5 34 NoData,
emilmont 8:c14af7958ef5 35 MasterGeneralCall,
emilmont 8:c14af7958ef5 36 MasterWrite,
emilmont 8:c14af7958ef5 37 MasterRead
emilmont 0:8024c367e29f 38 };
emilmont 0:8024c367e29f 39
emilmont 0:8024c367e29f 40 enum Acknowledge {
emilmont 8:c14af7958ef5 41 NoACK = 0,
emilmont 8:c14af7958ef5 42 ACK = 1
emilmont 0:8024c367e29f 43 };
emilmont 0:8024c367e29f 44
emilmont 8:c14af7958ef5 45 /** Create an I2C Master interface, connected to the specified pins
emilmont 0:8024c367e29f 46 *
emilmont 8:c14af7958ef5 47 * @param sda I2C data line pin
emilmont 8:c14af7958ef5 48 * @param scl I2C clock line pin
emilmont 0:8024c367e29f 49 */
emilmont 8:c14af7958ef5 50 I2C(PinName sda, PinName scl);
emilmont 0:8024c367e29f 51
emilmont 8:c14af7958ef5 52 /** Set the frequency of the I2C interface
emilmont 0:8024c367e29f 53 *
emilmont 8:c14af7958ef5 54 * @param hz The bus frequency in hertz
emilmont 0:8024c367e29f 55 */
emilmont 0:8024c367e29f 56 void frequency(int hz);
emilmont 0:8024c367e29f 57
emilmont 8:c14af7958ef5 58 /** Read from an I2C slave
emilmont 0:8024c367e29f 59 *
emilmont 0:8024c367e29f 60 * Performs a complete read transaction. The bottom bit of
emilmont 0:8024c367e29f 61 * the address is forced to 1 to indicate a read.
emilmont 0:8024c367e29f 62 *
emilmont 8:c14af7958ef5 63 * @param address 8-bit I2C slave address [ addr | 1 ]
emilmont 8:c14af7958ef5 64 * @param data Pointer to the byte-array to read data in to
emilmont 8:c14af7958ef5 65 * @param length Number of bytes to read
emilmont 8:c14af7958ef5 66 * @param repeated Repeated start, true - don't send stop at end
emilmont 8:c14af7958ef5 67 *
emilmont 8:c14af7958ef5 68 * @returns
emilmont 8:c14af7958ef5 69 * 0 on success (ack),
emilmont 8:c14af7958ef5 70 * non-0 on failure (nack)
emilmont 0:8024c367e29f 71 */
emilmont 8:c14af7958ef5 72 int read(int address, char *data, int length, bool repeated = false);
emilmont 0:8024c367e29f 73
emilmont 8:c14af7958ef5 74 /** Read a single byte from the I2C bus
emilmont 0:8024c367e29f 75 *
emilmont 8:c14af7958ef5 76 * @param ack indicates if the byte is to be acknowledged (1 = acknowledge)
emilmont 8:c14af7958ef5 77 *
emilmont 8:c14af7958ef5 78 * @returns
emilmont 8:c14af7958ef5 79 * the byte read
emilmont 0:8024c367e29f 80 */
emilmont 0:8024c367e29f 81 int read(int ack);
emilmont 0:8024c367e29f 82
emilmont 8:c14af7958ef5 83 /** Write to an I2C slave
emilmont 0:8024c367e29f 84 *
emilmont 0:8024c367e29f 85 * Performs a complete write transaction. The bottom bit of
emilmont 0:8024c367e29f 86 * the address is forced to 0 to indicate a write.
emilmont 0:8024c367e29f 87 *
emilmont 8:c14af7958ef5 88 * @param address 8-bit I2C slave address [ addr | 0 ]
emilmont 8:c14af7958ef5 89 * @param data Pointer to the byte-array data to send
emilmont 8:c14af7958ef5 90 * @param length Number of bytes to send
emilmont 8:c14af7958ef5 91 * @param repeated Repeated start, true - do not send stop at end
emilmont 8:c14af7958ef5 92 *
emilmont 8:c14af7958ef5 93 * @returns
emilmont 8:c14af7958ef5 94 * 0 on success (ack),
emilmont 8:c14af7958ef5 95 * non-0 on failure (nack)
emilmont 0:8024c367e29f 96 */
emilmont 0:8024c367e29f 97 int write(int address, const char *data, int length, bool repeated = false);
emilmont 0:8024c367e29f 98
emilmont 8:c14af7958ef5 99 /** Write single byte out on the I2C bus
emilmont 8:c14af7958ef5 100 *
emilmont 8:c14af7958ef5 101 * @param data data to write out on bus
emilmont 0:8024c367e29f 102 *
emilmont 8:c14af7958ef5 103 * @returns
emilmont 8:c14af7958ef5 104 * '1' if an ACK was received,
emilmont 8:c14af7958ef5 105 * '0' otherwise
emilmont 0:8024c367e29f 106 */
emilmont 0:8024c367e29f 107 int write(int data);
emilmont 0:8024c367e29f 108
emilmont 8:c14af7958ef5 109 /** Creates a start condition on the I2C bus
emilmont 0:8024c367e29f 110 */
emilmont 0:8024c367e29f 111
emilmont 0:8024c367e29f 112 void start(void);
emilmont 0:8024c367e29f 113
emilmont 8:c14af7958ef5 114 /** Creates a stop condition on the I2C bus
emilmont 0:8024c367e29f 115 */
emilmont 0:8024c367e29f 116 void stop(void);
emilmont 0:8024c367e29f 117
emilmont 0:8024c367e29f 118 protected:
emilmont 0:8024c367e29f 119 void aquire();
emilmont 8:c14af7958ef5 120
emilmont 0:8024c367e29f 121 I2CName _i2c;
emilmont 0:8024c367e29f 122 static I2C *_owner;
emilmont 0:8024c367e29f 123 int _hz;
emilmont 0:8024c367e29f 124 };
emilmont 0:8024c367e29f 125
emilmont 0:8024c367e29f 126 } // namespace mbed
emilmont 0:8024c367e29f 127
emilmont 0:8024c367e29f 128 #endif
emilmont 0:8024c367e29f 129
emilmont 0:8024c367e29f 130 #endif