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:
Fri Sep 04 09:30:10 2015 +0100
Revision:
619:034e698bc035
Parent:
601:248b0d2dd755
Synchronized with git revision 92d1bfad30082571776c810a56fd471d30514ccf

Full URL: https://github.com/mbedmicro/mbed/commit/92d1bfad30082571776c810a56fd471d30514ccf/

Change directory structure and move files.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mbed_official 558:0880f51c4036 1 /* mbed Microcontroller Library
mbed_official 558:0880f51c4036 2 *******************************************************************************
mbed_official 558:0880f51c4036 3 * Copyright (c) 2015 WIZnet Co.,Ltd. All rights reserved.
mbed_official 558:0880f51c4036 4 * All rights reserved.
mbed_official 558:0880f51c4036 5 *
mbed_official 558:0880f51c4036 6 * Redistribution and use in source and binary forms, with or without
mbed_official 558:0880f51c4036 7 * modification, are permitted provided that the following conditions are met:
mbed_official 558:0880f51c4036 8 *
mbed_official 558:0880f51c4036 9 * 1. Redistributions of source code must retain the above copyright notice,
mbed_official 558:0880f51c4036 10 * this list of conditions and the following disclaimer.
mbed_official 558:0880f51c4036 11 * 2. Redistributions in binary form must reproduce the above copyright notice,
mbed_official 558:0880f51c4036 12 * this list of conditions and the following disclaimer in the documentation
mbed_official 558:0880f51c4036 13 * and/or other materials provided with the distribution.
mbed_official 558:0880f51c4036 14 * 3. Neither the name of ARM Limited nor the names of its contributors
mbed_official 558:0880f51c4036 15 * may be used to endorse or promote products derived from this software
mbed_official 558:0880f51c4036 16 * without specific prior written permission.
mbed_official 558:0880f51c4036 17 *
mbed_official 558:0880f51c4036 18 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
mbed_official 558:0880f51c4036 19 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
mbed_official 558:0880f51c4036 20 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
mbed_official 558:0880f51c4036 21 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
mbed_official 558:0880f51c4036 22 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
mbed_official 558:0880f51c4036 23 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
mbed_official 558:0880f51c4036 24 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
mbed_official 558:0880f51c4036 25 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
mbed_official 558:0880f51c4036 26 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
mbed_official 558:0880f51c4036 27 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
mbed_official 558:0880f51c4036 28 *******************************************************************************
mbed_official 558:0880f51c4036 29 */
mbed_official 558:0880f51c4036 30
mbed_official 558:0880f51c4036 31 #include "mbed_assert.h"
mbed_official 558:0880f51c4036 32 #include "i2c_api.h"
mbed_official 558:0880f51c4036 33
mbed_official 576:99a3d3d9c43f 34
mbed_official 558:0880f51c4036 35 #if DEVICE_I2C
mbed_official 558:0880f51c4036 36
mbed_official 558:0880f51c4036 37 #include "cmsis.h"
mbed_official 558:0880f51c4036 38 #include "pinmap.h"
mbed_official 558:0880f51c4036 39 #include "PeripheralPins.h"
mbed_official 558:0880f51c4036 40
mbed_official 576:99a3d3d9c43f 41 #include "wait_api.h"
mbed_official 576:99a3d3d9c43f 42 #include "us_ticker_api.h"
mbed_official 619:034e698bc035 43 #include "W7500x_i2c.h"
mbed_official 576:99a3d3d9c43f 44
mbed_official 558:0880f51c4036 45 /* Timeout values for flags and events waiting loops. These timeouts are
mbed_official 558:0880f51c4036 46 not based on accurate values, they just guarantee that the application will
mbed_official 558:0880f51c4036 47 not remain stuck if the I2C communication is corrupted. */
mbed_official 558:0880f51c4036 48 #define FLAG_TIMEOUT ((int)0x1000)
mbed_official 558:0880f51c4036 49 #define LONG_TIMEOUT ((int)0xFFFF)
mbed_official 558:0880f51c4036 50
mbed_official 558:0880f51c4036 51
mbed_official 558:0880f51c4036 52 void i2c_init(i2c_t *obj, PinName sda, PinName scl)
mbed_official 558:0880f51c4036 53 {
mbed_official 601:248b0d2dd755 54 I2C_ConfigStruct conf;
mbed_official 601:248b0d2dd755 55
mbed_official 601:248b0d2dd755 56 //Determine the I2C to use
mbed_official 558:0880f51c4036 57 I2CName i2c_sda = (I2CName)pinmap_peripheral(sda, PinMap_I2C_SDA);
mbed_official 558:0880f51c4036 58 I2CName i2c_scl = (I2CName)pinmap_peripheral(scl, PinMap_I2C_SCL);
mbed_official 601:248b0d2dd755 59 obj->I2Cx = (I2CName)pinmap_merge(i2c_sda, i2c_scl);
mbed_official 601:248b0d2dd755 60 MBED_ASSERT(obj->I2Cx != (I2CName)NC);
mbed_official 601:248b0d2dd755 61
mbed_official 601:248b0d2dd755 62 obj->sda = sda;
mbed_official 601:248b0d2dd755 63 obj->scl = scl;
mbed_official 601:248b0d2dd755 64 obj->ADDRESS = 0x0;
mbed_official 558:0880f51c4036 65 obj->is_setAddress = 0;
mbed_official 601:248b0d2dd755 66
mbed_official 601:248b0d2dd755 67 conf.sda = (I2C_PinName)obj->sda;
mbed_official 601:248b0d2dd755 68 conf.scl = (I2C_PinName)obj->scl;
mbed_official 601:248b0d2dd755 69
mbed_official 601:248b0d2dd755 70 I2C_Init(&conf);
mbed_official 558:0880f51c4036 71 }
mbed_official 558:0880f51c4036 72
mbed_official 558:0880f51c4036 73 void i2c_frequency(i2c_t *obj, int hz)
mbed_official 558:0880f51c4036 74 {
mbed_official 601:248b0d2dd755 75
mbed_official 558:0880f51c4036 76 }
mbed_official 558:0880f51c4036 77
mbed_official 558:0880f51c4036 78 inline int i2c_start(i2c_t *obj)
mbed_official 558:0880f51c4036 79 {
mbed_official 601:248b0d2dd755 80 I2C_ConfigStruct conf;
mbed_official 601:248b0d2dd755 81 conf.sda = (I2C_PinName)obj->sda;
mbed_official 601:248b0d2dd755 82 conf.scl = (I2C_PinName)obj->scl;
mbed_official 601:248b0d2dd755 83
mbed_official 601:248b0d2dd755 84 I2C_Start(&conf);
mbed_official 601:248b0d2dd755 85
mbed_official 558:0880f51c4036 86 return 0;
mbed_official 558:0880f51c4036 87 }
mbed_official 558:0880f51c4036 88
mbed_official 558:0880f51c4036 89 inline int i2c_stop(i2c_t *obj)
mbed_official 601:248b0d2dd755 90 {
mbed_official 601:248b0d2dd755 91 I2C_ConfigStruct conf;
mbed_official 601:248b0d2dd755 92 conf.sda = (I2C_PinName)obj->sda;
mbed_official 601:248b0d2dd755 93 conf.scl = (I2C_PinName)obj->scl;
mbed_official 576:99a3d3d9c43f 94
mbed_official 601:248b0d2dd755 95 I2C_Stop(&conf);
mbed_official 576:99a3d3d9c43f 96
mbed_official 558:0880f51c4036 97 return 0;
mbed_official 558:0880f51c4036 98 }
mbed_official 558:0880f51c4036 99
mbed_official 558:0880f51c4036 100 int i2c_read(i2c_t *obj, int address, char *data, int length, int stop)
mbed_official 558:0880f51c4036 101 {
mbed_official 601:248b0d2dd755 102 I2C_ConfigStruct conf;
mbed_official 601:248b0d2dd755 103
mbed_official 601:248b0d2dd755 104 conf.sda = (I2C_PinName)obj->sda;
mbed_official 601:248b0d2dd755 105 conf.scl = (I2C_PinName)obj->scl;
mbed_official 576:99a3d3d9c43f 106
mbed_official 601:248b0d2dd755 107
mbed_official 601:248b0d2dd755 108 if(stop)
mbed_official 601:248b0d2dd755 109 {
mbed_official 619:034e698bc035 110 if(I2C_Read(&conf, address, (uint8_t*)data, length) != 0)
mbed_official 601:248b0d2dd755 111 return -1;
mbed_official 558:0880f51c4036 112 }
mbed_official 558:0880f51c4036 113 else
mbed_official 558:0880f51c4036 114 {
mbed_official 619:034e698bc035 115 if(I2C_ReadRepeated(&conf, address, (uint8_t*)data, length) != 0)
mbed_official 601:248b0d2dd755 116 return -1;
mbed_official 558:0880f51c4036 117 }
mbed_official 576:99a3d3d9c43f 118
mbed_official 601:248b0d2dd755 119 return length;
mbed_official 576:99a3d3d9c43f 120
mbed_official 558:0880f51c4036 121 }
mbed_official 558:0880f51c4036 122
mbed_official 558:0880f51c4036 123 int i2c_write(i2c_t *obj, int address, const char *data, int length, int stop)
mbed_official 558:0880f51c4036 124 {
mbed_official 601:248b0d2dd755 125 I2C_ConfigStruct conf;
mbed_official 601:248b0d2dd755 126
mbed_official 601:248b0d2dd755 127 conf.sda = (I2C_PinName)obj->sda;
mbed_official 601:248b0d2dd755 128 conf.scl = (I2C_PinName)obj->scl;
mbed_official 601:248b0d2dd755 129
mbed_official 576:99a3d3d9c43f 130
mbed_official 601:248b0d2dd755 131 if(stop)
mbed_official 601:248b0d2dd755 132 {
mbed_official 619:034e698bc035 133 if(I2C_Write(&conf, address, (uint8_t*)data, length) != 0)
mbed_official 601:248b0d2dd755 134 return -1;
mbed_official 601:248b0d2dd755 135 }
mbed_official 558:0880f51c4036 136 else
mbed_official 558:0880f51c4036 137 {
mbed_official 619:034e698bc035 138 if(I2C_WriteRepeated(&conf, address, (uint8_t*)data, length) != 0)
mbed_official 601:248b0d2dd755 139 return -1;
mbed_official 558:0880f51c4036 140 }
mbed_official 576:99a3d3d9c43f 141
mbed_official 601:248b0d2dd755 142 return length;
mbed_official 558:0880f51c4036 143 }
mbed_official 558:0880f51c4036 144
mbed_official 558:0880f51c4036 145 int i2c_byte_read(i2c_t *obj, int last)
mbed_official 558:0880f51c4036 146 {
mbed_official 601:248b0d2dd755 147 uint8_t ret;
mbed_official 601:248b0d2dd755 148 I2C_ConfigStruct conf;
mbed_official 601:248b0d2dd755 149
mbed_official 601:248b0d2dd755 150 conf.sda = (I2C_PinName)obj->sda;
mbed_official 601:248b0d2dd755 151 conf.scl = (I2C_PinName)obj->scl;
mbed_official 601:248b0d2dd755 152
mbed_official 601:248b0d2dd755 153 ret = I2C_ReadByte(&conf);
mbed_official 601:248b0d2dd755 154
mbed_official 601:248b0d2dd755 155 if(last)
mbed_official 601:248b0d2dd755 156 I2C_SendNACK(&conf);
mbed_official 601:248b0d2dd755 157 else
mbed_official 601:248b0d2dd755 158 I2C_SendACK(&conf);
mbed_official 601:248b0d2dd755 159
mbed_official 601:248b0d2dd755 160 return (int)ret;
mbed_official 558:0880f51c4036 161 }
mbed_official 558:0880f51c4036 162
mbed_official 558:0880f51c4036 163 int i2c_byte_write(i2c_t *obj, int data)
mbed_official 558:0880f51c4036 164 {
mbed_official 601:248b0d2dd755 165 I2C_ConfigStruct conf;
mbed_official 601:248b0d2dd755 166
mbed_official 601:248b0d2dd755 167 conf.sda = (I2C_PinName)obj->sda;
mbed_official 601:248b0d2dd755 168 conf.scl = (I2C_PinName)obj->scl;
mbed_official 601:248b0d2dd755 169
mbed_official 601:248b0d2dd755 170 if(I2C_WriteByte(&conf, (uint8_t)data)) // NACK
mbed_official 601:248b0d2dd755 171 return 0;
mbed_official 601:248b0d2dd755 172 else //ack
mbed_official 601:248b0d2dd755 173 return 1;
mbed_official 558:0880f51c4036 174 }
mbed_official 558:0880f51c4036 175
mbed_official 558:0880f51c4036 176 void i2c_reset(i2c_t *obj)
mbed_official 558:0880f51c4036 177 {
mbed_official 601:248b0d2dd755 178
mbed_official 558:0880f51c4036 179 }
mbed_official 558:0880f51c4036 180
mbed_official 558:0880f51c4036 181
mbed_official 558:0880f51c4036 182 #endif // DEVICE_I2C