mbed library sources

Dependents:   Encrypted my_mbed lklk CyaSSL_DTLS_Cellular ... more

Superseded

This library was superseded by mbed-dev - https://os.mbed.com/users/mbed_official/code/mbed-dev/.

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:
Wed Sep 30 17:00:09 2015 +0100
Revision:
635:a11c0372f0ba
Parent:
564:24a7119bd73a
Synchronized with git revision d29c98dae61be0946ddf3a3c641c7726056f9452

Full URL: https://github.com/mbedmicro/mbed/commit/d29c98dae61be0946ddf3a3c641c7726056f9452/

Added support for SAMW25

Who changed what in which revision?

UserRevisionLine numberNew contents of line
bogdanm 13:0645d8841f51 1 /* mbed Microcontroller Library
mbed_official 525:c320967f86b9 2 * Copyright (c) 2006-2015 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
mbed_official 525:c320967f86b9 25 #if DEVICE_I2C_ASYNCH
mbed_official 525:c320967f86b9 26 #include "CThunk.h"
mbed_official 525:c320967f86b9 27 #include "dma_api.h"
mbed_official 525:c320967f86b9 28 #include "FunctionPointer.h"
mbed_official 525:c320967f86b9 29 #endif
mbed_official 525:c320967f86b9 30
bogdanm 13:0645d8841f51 31 namespace mbed {
bogdanm 13:0645d8841f51 32
bogdanm 13:0645d8841f51 33 /** An I2C Master, used for communicating with I2C slave devices
bogdanm 13:0645d8841f51 34 *
bogdanm 13:0645d8841f51 35 * Example:
bogdanm 13:0645d8841f51 36 * @code
bogdanm 13:0645d8841f51 37 * // Read from I2C slave at address 0x62
bogdanm 13:0645d8841f51 38 *
bogdanm 13:0645d8841f51 39 * #include "mbed.h"
bogdanm 13:0645d8841f51 40 *
bogdanm 13:0645d8841f51 41 * I2C i2c(p28, p27);
bogdanm 13:0645d8841f51 42 *
bogdanm 13:0645d8841f51 43 * int main() {
bogdanm 13:0645d8841f51 44 * int address = 0x62;
bogdanm 13:0645d8841f51 45 * char data[2];
bogdanm 13:0645d8841f51 46 * i2c.read(address, data, 2);
bogdanm 13:0645d8841f51 47 * }
bogdanm 13:0645d8841f51 48 * @endcode
bogdanm 13:0645d8841f51 49 */
bogdanm 13:0645d8841f51 50 class I2C {
bogdanm 13:0645d8841f51 51
bogdanm 13:0645d8841f51 52 public:
bogdanm 13:0645d8841f51 53 enum RxStatus {
bogdanm 13:0645d8841f51 54 NoData,
bogdanm 13:0645d8841f51 55 MasterGeneralCall,
bogdanm 13:0645d8841f51 56 MasterWrite,
bogdanm 13:0645d8841f51 57 MasterRead
bogdanm 13:0645d8841f51 58 };
bogdanm 13:0645d8841f51 59
bogdanm 13:0645d8841f51 60 enum Acknowledge {
bogdanm 13:0645d8841f51 61 NoACK = 0,
bogdanm 13:0645d8841f51 62 ACK = 1
bogdanm 13:0645d8841f51 63 };
bogdanm 13:0645d8841f51 64
bogdanm 13:0645d8841f51 65 /** Create an I2C Master interface, connected to the specified pins
bogdanm 13:0645d8841f51 66 *
bogdanm 13:0645d8841f51 67 * @param sda I2C data line pin
bogdanm 13:0645d8841f51 68 * @param scl I2C clock line pin
bogdanm 13:0645d8841f51 69 */
bogdanm 13:0645d8841f51 70 I2C(PinName sda, PinName scl);
bogdanm 13:0645d8841f51 71
bogdanm 13:0645d8841f51 72 /** Set the frequency of the I2C interface
bogdanm 13:0645d8841f51 73 *
bogdanm 13:0645d8841f51 74 * @param hz The bus frequency in hertz
bogdanm 13:0645d8841f51 75 */
bogdanm 13:0645d8841f51 76 void frequency(int hz);
bogdanm 13:0645d8841f51 77
bogdanm 13:0645d8841f51 78 /** Read from an I2C slave
bogdanm 13:0645d8841f51 79 *
bogdanm 13:0645d8841f51 80 * Performs a complete read transaction. The bottom bit of
bogdanm 13:0645d8841f51 81 * the address is forced to 1 to indicate a read.
bogdanm 13:0645d8841f51 82 *
bogdanm 13:0645d8841f51 83 * @param address 8-bit I2C slave address [ addr | 1 ]
bogdanm 13:0645d8841f51 84 * @param data Pointer to the byte-array to read data in to
bogdanm 13:0645d8841f51 85 * @param length Number of bytes to read
bogdanm 13:0645d8841f51 86 * @param repeated Repeated start, true - don't send stop at end
bogdanm 13:0645d8841f51 87 *
bogdanm 13:0645d8841f51 88 * @returns
bogdanm 13:0645d8841f51 89 * 0 on success (ack),
bogdanm 13:0645d8841f51 90 * non-0 on failure (nack)
bogdanm 13:0645d8841f51 91 */
bogdanm 13:0645d8841f51 92 int read(int address, char *data, int length, bool repeated = false);
bogdanm 13:0645d8841f51 93
bogdanm 13:0645d8841f51 94 /** Read a single byte from the I2C bus
bogdanm 13:0645d8841f51 95 *
bogdanm 13:0645d8841f51 96 * @param ack indicates if the byte is to be acknowledged (1 = acknowledge)
bogdanm 13:0645d8841f51 97 *
bogdanm 13:0645d8841f51 98 * @returns
bogdanm 13:0645d8841f51 99 * the byte read
bogdanm 13:0645d8841f51 100 */
bogdanm 13:0645d8841f51 101 int read(int ack);
bogdanm 13:0645d8841f51 102
bogdanm 13:0645d8841f51 103 /** Write to an I2C slave
bogdanm 13:0645d8841f51 104 *
bogdanm 13:0645d8841f51 105 * Performs a complete write transaction. The bottom bit of
bogdanm 13:0645d8841f51 106 * the address is forced to 0 to indicate a write.
bogdanm 13:0645d8841f51 107 *
bogdanm 13:0645d8841f51 108 * @param address 8-bit I2C slave address [ addr | 0 ]
bogdanm 13:0645d8841f51 109 * @param data Pointer to the byte-array data to send
bogdanm 13:0645d8841f51 110 * @param length Number of bytes to send
bogdanm 13:0645d8841f51 111 * @param repeated Repeated start, true - do not send stop at end
bogdanm 13:0645d8841f51 112 *
bogdanm 13:0645d8841f51 113 * @returns
bogdanm 13:0645d8841f51 114 * 0 on success (ack),
bogdanm 13:0645d8841f51 115 * non-0 on failure (nack)
bogdanm 13:0645d8841f51 116 */
bogdanm 13:0645d8841f51 117 int write(int address, const char *data, int length, bool repeated = false);
bogdanm 13:0645d8841f51 118
bogdanm 13:0645d8841f51 119 /** Write single byte out on the I2C bus
bogdanm 13:0645d8841f51 120 *
bogdanm 13:0645d8841f51 121 * @param data data to write out on bus
bogdanm 13:0645d8841f51 122 *
bogdanm 13:0645d8841f51 123 * @returns
bogdanm 13:0645d8841f51 124 * '1' if an ACK was received,
bogdanm 13:0645d8841f51 125 * '0' otherwise
bogdanm 13:0645d8841f51 126 */
bogdanm 13:0645d8841f51 127 int write(int data);
bogdanm 13:0645d8841f51 128
bogdanm 13:0645d8841f51 129 /** Creates a start condition on the I2C bus
bogdanm 13:0645d8841f51 130 */
bogdanm 13:0645d8841f51 131
bogdanm 13:0645d8841f51 132 void start(void);
bogdanm 13:0645d8841f51 133
bogdanm 13:0645d8841f51 134 /** Creates a stop condition on the I2C bus
bogdanm 13:0645d8841f51 135 */
bogdanm 13:0645d8841f51 136 void stop(void);
bogdanm 13:0645d8841f51 137
mbed_official 525:c320967f86b9 138 #if DEVICE_I2C_ASYNCH
mbed_official 525:c320967f86b9 139
mbed_official 525:c320967f86b9 140 /** Start non-blocking I2C transfer.
mbed_official 525:c320967f86b9 141 *
mbed_official 525:c320967f86b9 142 * @param address 8/10 bit I2c slave address
mbed_official 525:c320967f86b9 143 * @param tx_buffer The TX buffer with data to be transfered
mbed_official 564:24a7119bd73a 144 * @param tx_length The length of TX buffer in bytes
mbed_official 525:c320967f86b9 145 * @param rx_buffer The RX buffer which is used for received data
mbed_official 564:24a7119bd73a 146 * @param rx_length The length of RX buffer in bytes
mbed_official 525:c320967f86b9 147 * @param event The logical OR of events to modify
mbed_official 525:c320967f86b9 148 * @param callback The event callback function
mbed_official 525:c320967f86b9 149 * @param repeated Repeated start, true - do not send stop at end
mbed_official 525:c320967f86b9 150 * @return Zero if the transfer has started, or -1 if I2C peripheral is busy
mbed_official 525:c320967f86b9 151 */
mbed_official 563:536c9fb088a0 152 int transfer(int address, const char *tx_buffer, int tx_length, char *rx_buffer, int rx_length, const event_callback_t& callback, int event = I2C_EVENT_TRANSFER_COMPLETE, bool repeated = false);
mbed_official 525:c320967f86b9 153
mbed_official 525:c320967f86b9 154 /** Abort the on-going I2C transfer
mbed_official 525:c320967f86b9 155 */
mbed_official 525:c320967f86b9 156 void abort_transfer();
mbed_official 525:c320967f86b9 157 protected:
mbed_official 525:c320967f86b9 158 void irq_handler_asynch(void);
mbed_official 525:c320967f86b9 159 event_callback_t _callback;
mbed_official 525:c320967f86b9 160 CThunk<I2C> _irq;
mbed_official 525:c320967f86b9 161 DMAUsage _usage;
mbed_official 525:c320967f86b9 162 #endif
mbed_official 525:c320967f86b9 163
bogdanm 13:0645d8841f51 164 protected:
bogdanm 13:0645d8841f51 165 void aquire();
bogdanm 13:0645d8841f51 166
bogdanm 13:0645d8841f51 167 i2c_t _i2c;
bogdanm 13:0645d8841f51 168 static I2C *_owner;
bogdanm 13:0645d8841f51 169 int _hz;
bogdanm 13:0645d8841f51 170 };
bogdanm 13:0645d8841f51 171
bogdanm 13:0645d8841f51 172 } // namespace mbed
bogdanm 13:0645d8841f51 173
bogdanm 13:0645d8841f51 174 #endif
bogdanm 13:0645d8841f51 175
bogdanm 13:0645d8841f51 176 #endif