This repo contains the libraries of Mbed for LPC1549 with following changes: - IAP commands. - EEPROM write and read. - UART write and read (public) - CAN can_s -> LPC_C_CAN0_Type *can

Committer:
gmatarrubia
Date:
Tue Apr 14 15:00:13 2015 +0200
Revision:
0:820a69dfd200
Initial repo. IAP commands, EEPROM write/read, UART write/read, CAN

Who changed what in which revision?

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