temp

Dependencies:   mbed SDFileSystem MS5607 ADXL345_I2C FATFileSystem

Committer:
IKobayashi
Date:
Mon Mar 16 23:37:42 2020 +0900
Revision:
0:c88c3b616c00
copy

Who changed what in which revision?

UserRevisionLine numberNew contents of line
IKobayashi 0:c88c3b616c00 1 /* mbed Microcontroller Library
IKobayashi 0:c88c3b616c00 2 * Copyright (c) 2006-2013 ARM Limited
IKobayashi 0:c88c3b616c00 3 *
IKobayashi 0:c88c3b616c00 4 * Licensed under the Apache License, Version 2.0 (the "License");
IKobayashi 0:c88c3b616c00 5 * you may not use this file except in compliance with the License.
IKobayashi 0:c88c3b616c00 6 * You may obtain a copy of the License at
IKobayashi 0:c88c3b616c00 7 *
IKobayashi 0:c88c3b616c00 8 * http://www.apache.org/licenses/LICENSE-2.0
IKobayashi 0:c88c3b616c00 9 *
IKobayashi 0:c88c3b616c00 10 * Unless required by applicable law or agreed to in writing, software
IKobayashi 0:c88c3b616c00 11 * distributed under the License is distributed on an "AS IS" BASIS,
IKobayashi 0:c88c3b616c00 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
IKobayashi 0:c88c3b616c00 13 * See the License for the specific language governing permissions and
IKobayashi 0:c88c3b616c00 14 * limitations under the License.
IKobayashi 0:c88c3b616c00 15 */
IKobayashi 0:c88c3b616c00 16 #ifndef MBED_I2C_SLAVE_H
IKobayashi 0:c88c3b616c00 17 #define MBED_I2C_SLAVE_H
IKobayashi 0:c88c3b616c00 18
IKobayashi 0:c88c3b616c00 19 #include "platform/platform.h"
IKobayashi 0:c88c3b616c00 20
IKobayashi 0:c88c3b616c00 21 #if DEVICE_I2CSLAVE
IKobayashi 0:c88c3b616c00 22
IKobayashi 0:c88c3b616c00 23 #include "hal/i2c_api.h"
IKobayashi 0:c88c3b616c00 24
IKobayashi 0:c88c3b616c00 25 namespace mbed {
IKobayashi 0:c88c3b616c00 26 /** \addtogroup drivers */
IKobayashi 0:c88c3b616c00 27 /** @{*/
IKobayashi 0:c88c3b616c00 28
IKobayashi 0:c88c3b616c00 29 /** An I2C Slave, used for communicating with an I2C Master device
IKobayashi 0:c88c3b616c00 30 *
IKobayashi 0:c88c3b616c00 31 * @Note Synchronization level: Not protected
IKobayashi 0:c88c3b616c00 32 *
IKobayashi 0:c88c3b616c00 33 * Example:
IKobayashi 0:c88c3b616c00 34 * @code
IKobayashi 0:c88c3b616c00 35 * // Simple I2C responder
IKobayashi 0:c88c3b616c00 36 * #include <mbed.h>
IKobayashi 0:c88c3b616c00 37 *
IKobayashi 0:c88c3b616c00 38 * I2CSlave slave(p9, p10);
IKobayashi 0:c88c3b616c00 39 *
IKobayashi 0:c88c3b616c00 40 * int main() {
IKobayashi 0:c88c3b616c00 41 * char buf[10];
IKobayashi 0:c88c3b616c00 42 * char msg[] = "Slave!";
IKobayashi 0:c88c3b616c00 43 *
IKobayashi 0:c88c3b616c00 44 * slave.address(0xA0);
IKobayashi 0:c88c3b616c00 45 * while (1) {
IKobayashi 0:c88c3b616c00 46 * int i = slave.receive();
IKobayashi 0:c88c3b616c00 47 * switch (i) {
IKobayashi 0:c88c3b616c00 48 * case I2CSlave::ReadAddressed:
IKobayashi 0:c88c3b616c00 49 * slave.write(msg, strlen(msg) + 1); // Includes null char
IKobayashi 0:c88c3b616c00 50 * break;
IKobayashi 0:c88c3b616c00 51 * case I2CSlave::WriteGeneral:
IKobayashi 0:c88c3b616c00 52 * slave.read(buf, 10);
IKobayashi 0:c88c3b616c00 53 * printf("Read G: %s\n", buf);
IKobayashi 0:c88c3b616c00 54 * break;
IKobayashi 0:c88c3b616c00 55 * case I2CSlave::WriteAddressed:
IKobayashi 0:c88c3b616c00 56 * slave.read(buf, 10);
IKobayashi 0:c88c3b616c00 57 * printf("Read A: %s\n", buf);
IKobayashi 0:c88c3b616c00 58 * break;
IKobayashi 0:c88c3b616c00 59 * }
IKobayashi 0:c88c3b616c00 60 * for(int i = 0; i < 10; i++) buf[i] = 0; // Clear buffer
IKobayashi 0:c88c3b616c00 61 * }
IKobayashi 0:c88c3b616c00 62 * }
IKobayashi 0:c88c3b616c00 63 * @endcode
IKobayashi 0:c88c3b616c00 64 */
IKobayashi 0:c88c3b616c00 65 class I2CSlave {
IKobayashi 0:c88c3b616c00 66
IKobayashi 0:c88c3b616c00 67 public:
IKobayashi 0:c88c3b616c00 68 enum RxStatus {
IKobayashi 0:c88c3b616c00 69 NoData = 0,
IKobayashi 0:c88c3b616c00 70 ReadAddressed = 1,
IKobayashi 0:c88c3b616c00 71 WriteGeneral = 2,
IKobayashi 0:c88c3b616c00 72 WriteAddressed = 3
IKobayashi 0:c88c3b616c00 73 };
IKobayashi 0:c88c3b616c00 74
IKobayashi 0:c88c3b616c00 75 /** Create an I2C Slave interface, connected to the specified pins.
IKobayashi 0:c88c3b616c00 76 *
IKobayashi 0:c88c3b616c00 77 * @param sda I2C data line pin
IKobayashi 0:c88c3b616c00 78 * @param scl I2C clock line pin
IKobayashi 0:c88c3b616c00 79 */
IKobayashi 0:c88c3b616c00 80 I2CSlave(PinName sda, PinName scl);
IKobayashi 0:c88c3b616c00 81
IKobayashi 0:c88c3b616c00 82 /** Set the frequency of the I2C interface
IKobayashi 0:c88c3b616c00 83 *
IKobayashi 0:c88c3b616c00 84 * @param hz The bus frequency in hertz
IKobayashi 0:c88c3b616c00 85 */
IKobayashi 0:c88c3b616c00 86 void frequency(int hz);
IKobayashi 0:c88c3b616c00 87
IKobayashi 0:c88c3b616c00 88 /** Checks to see if this I2C Slave has been addressed.
IKobayashi 0:c88c3b616c00 89 *
IKobayashi 0:c88c3b616c00 90 * @returns
IKobayashi 0:c88c3b616c00 91 * A status indicating if the device has been addressed, and how
IKobayashi 0:c88c3b616c00 92 * - NoData - the slave has not been addressed
IKobayashi 0:c88c3b616c00 93 * - ReadAddressed - the master has requested a read from this slave
IKobayashi 0:c88c3b616c00 94 * - WriteAddressed - the master is writing to this slave
IKobayashi 0:c88c3b616c00 95 * - WriteGeneral - the master is writing to all slave
IKobayashi 0:c88c3b616c00 96 */
IKobayashi 0:c88c3b616c00 97 int receive(void);
IKobayashi 0:c88c3b616c00 98
IKobayashi 0:c88c3b616c00 99 /** Read from an I2C master.
IKobayashi 0:c88c3b616c00 100 *
IKobayashi 0:c88c3b616c00 101 * @param data pointer to the byte array to read data in to
IKobayashi 0:c88c3b616c00 102 * @param length maximum number of bytes to read
IKobayashi 0:c88c3b616c00 103 *
IKobayashi 0:c88c3b616c00 104 * @returns
IKobayashi 0:c88c3b616c00 105 * 0 on success,
IKobayashi 0:c88c3b616c00 106 * non-0 otherwise
IKobayashi 0:c88c3b616c00 107 */
IKobayashi 0:c88c3b616c00 108 int read(char *data, int length);
IKobayashi 0:c88c3b616c00 109
IKobayashi 0:c88c3b616c00 110 /** Read a single byte from an I2C master.
IKobayashi 0:c88c3b616c00 111 *
IKobayashi 0:c88c3b616c00 112 * @returns
IKobayashi 0:c88c3b616c00 113 * the byte read
IKobayashi 0:c88c3b616c00 114 */
IKobayashi 0:c88c3b616c00 115 int read(void);
IKobayashi 0:c88c3b616c00 116
IKobayashi 0:c88c3b616c00 117 /** Write to an I2C master.
IKobayashi 0:c88c3b616c00 118 *
IKobayashi 0:c88c3b616c00 119 * @param data pointer to the byte array to be transmitted
IKobayashi 0:c88c3b616c00 120 * @param length the number of bytes to transmite
IKobayashi 0:c88c3b616c00 121 *
IKobayashi 0:c88c3b616c00 122 * @returns
IKobayashi 0:c88c3b616c00 123 * 0 on success,
IKobayashi 0:c88c3b616c00 124 * non-0 otherwise
IKobayashi 0:c88c3b616c00 125 */
IKobayashi 0:c88c3b616c00 126 int write(const char *data, int length);
IKobayashi 0:c88c3b616c00 127
IKobayashi 0:c88c3b616c00 128 /** Write a single byte to an I2C master.
IKobayashi 0:c88c3b616c00 129 *
IKobayashi 0:c88c3b616c00 130 * @data the byte to write
IKobayashi 0:c88c3b616c00 131 *
IKobayashi 0:c88c3b616c00 132 * @returns
IKobayashi 0:c88c3b616c00 133 * '1' if an ACK was received,
IKobayashi 0:c88c3b616c00 134 * '0' otherwise
IKobayashi 0:c88c3b616c00 135 */
IKobayashi 0:c88c3b616c00 136 int write(int data);
IKobayashi 0:c88c3b616c00 137
IKobayashi 0:c88c3b616c00 138 /** Sets the I2C slave address.
IKobayashi 0:c88c3b616c00 139 *
IKobayashi 0:c88c3b616c00 140 * @param address The address to set for the slave (ignoring the least
IKobayashi 0:c88c3b616c00 141 * signifcant bit). If set to 0, the slave will only respond to the
IKobayashi 0:c88c3b616c00 142 * general call address.
IKobayashi 0:c88c3b616c00 143 */
IKobayashi 0:c88c3b616c00 144 void address(int address);
IKobayashi 0:c88c3b616c00 145
IKobayashi 0:c88c3b616c00 146 /** Reset the I2C slave back into the known ready receiving state.
IKobayashi 0:c88c3b616c00 147 */
IKobayashi 0:c88c3b616c00 148 void stop(void);
IKobayashi 0:c88c3b616c00 149
IKobayashi 0:c88c3b616c00 150 protected:
IKobayashi 0:c88c3b616c00 151 i2c_t _i2c;
IKobayashi 0:c88c3b616c00 152 };
IKobayashi 0:c88c3b616c00 153
IKobayashi 0:c88c3b616c00 154 } // namespace mbed
IKobayashi 0:c88c3b616c00 155
IKobayashi 0:c88c3b616c00 156 #endif
IKobayashi 0:c88c3b616c00 157
IKobayashi 0:c88c3b616c00 158 #endif
IKobayashi 0:c88c3b616c00 159
IKobayashi 0:c88c3b616c00 160 /** @}*/