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
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 619:034e698bc035 1 /* mbed Microcontroller Library
mbed_official 619:034e698bc035 2 *******************************************************************************
mbed_official 619:034e698bc035 3 * Copyright (c) 2015 WIZnet Co.,Ltd. All rights reserved.
mbed_official 619:034e698bc035 4 * All rights reserved.
mbed_official 619:034e698bc035 5 *
mbed_official 619:034e698bc035 6 * Redistribution and use in source and binary forms, with or without
mbed_official 619:034e698bc035 7 * modification, are permitted provided that the following conditions are met:
mbed_official 619:034e698bc035 8 *
mbed_official 619:034e698bc035 9 * 1. Redistributions of source code must retain the above copyright notice,
mbed_official 619:034e698bc035 10 * this list of conditions and the following disclaimer.
mbed_official 619:034e698bc035 11 * 2. Redistributions in binary form must reproduce the above copyright notice,
mbed_official 619:034e698bc035 12 * this list of conditions and the following disclaimer in the documentation
mbed_official 619:034e698bc035 13 * and/or other materials provided with the distribution.
mbed_official 619:034e698bc035 14 * 3. Neither the name of ARM Limited nor the names of its contributors
mbed_official 619:034e698bc035 15 * may be used to endorse or promote products derived from this software
mbed_official 619:034e698bc035 16 * without specific prior written permission.
mbed_official 619:034e698bc035 17 *
mbed_official 619:034e698bc035 18 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
mbed_official 619:034e698bc035 19 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
mbed_official 619:034e698bc035 20 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
mbed_official 619:034e698bc035 21 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
mbed_official 619:034e698bc035 22 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
mbed_official 619:034e698bc035 23 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
mbed_official 619:034e698bc035 24 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
mbed_official 619:034e698bc035 25 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
mbed_official 619:034e698bc035 26 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
mbed_official 619:034e698bc035 27 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
mbed_official 619:034e698bc035 28 *******************************************************************************
mbed_official 619:034e698bc035 29 */
mbed_official 619:034e698bc035 30 /*include -------------------------------------*/
mbed_official 619:034e698bc035 31 #include "W7500x.h"
mbed_official 619:034e698bc035 32 #include "W7500x_i2c.h"
mbed_official 619:034e698bc035 33 #include "W7500x_gpio.h"
mbed_official 619:034e698bc035 34
mbed_official 619:034e698bc035 35 GPIO_InitTypeDef GPIO_InitDef;
mbed_official 619:034e698bc035 36
mbed_official 619:034e698bc035 37 uint32_t I2C_Init(I2C_ConfigStruct* conf)
mbed_official 619:034e698bc035 38 {
mbed_official 619:034e698bc035 39 uint32_t scl_port_num;
mbed_official 619:034e698bc035 40 uint32_t scl_pin_index;
mbed_official 619:034e698bc035 41 uint32_t sda_port_num;
mbed_official 619:034e698bc035 42 uint32_t sda_pin_index;
mbed_official 619:034e698bc035 43
mbed_official 619:034e698bc035 44 scl_port_num = I2C_PORT(conf->scl);
mbed_official 619:034e698bc035 45 scl_pin_index = I2C_PIN_INDEX(conf->scl);
mbed_official 619:034e698bc035 46
mbed_official 619:034e698bc035 47 sda_port_num = I2C_PORT(conf->sda);
mbed_official 619:034e698bc035 48 sda_pin_index = I2C_PIN_INDEX(conf->sda);
mbed_official 619:034e698bc035 49
mbed_official 619:034e698bc035 50 //SCL setting
mbed_official 619:034e698bc035 51 GPIO_InitDef.GPIO_Pin = scl_pin_index;
mbed_official 619:034e698bc035 52 GPIO_InitDef.GPIO_Mode = GPIO_Mode_OUT;
mbed_official 619:034e698bc035 53
mbed_official 619:034e698bc035 54 HAL_GPIO_Init((GPIO_TypeDef*)(GPIOA_BASE + (scl_port_num << 24)), &GPIO_InitDef);
mbed_official 619:034e698bc035 55 HAL_GPIO_SetBits((GPIO_TypeDef*)(GPIOA_BASE + (scl_port_num << 24)), scl_pin_index);
mbed_official 619:034e698bc035 56
mbed_official 619:034e698bc035 57 //SDA setting
mbed_official 619:034e698bc035 58 GPIO_InitDef.GPIO_Pin = sda_pin_index;
mbed_official 619:034e698bc035 59 GPIO_InitDef.GPIO_Mode = GPIO_Mode_IN;
mbed_official 619:034e698bc035 60
mbed_official 619:034e698bc035 61 HAL_GPIO_Init((GPIO_TypeDef*)(GPIOA_BASE + (sda_port_num << 24)), &GPIO_InitDef);
mbed_official 619:034e698bc035 62 HAL_GPIO_ResetBits((GPIO_TypeDef*)(GPIOA_BASE + (sda_port_num << 24)), sda_pin_index);
mbed_official 619:034e698bc035 63
mbed_official 619:034e698bc035 64 //Pin muxing
mbed_official 619:034e698bc035 65 HAL_PAD_AFConfig((PAD_Type)scl_port_num, (uint16_t)scl_pin_index, PAD_AF1);
mbed_official 619:034e698bc035 66 HAL_PAD_AFConfig((PAD_Type)sda_port_num, (uint16_t)sda_pin_index, PAD_AF1);
mbed_official 619:034e698bc035 67
mbed_official 619:034e698bc035 68 return 0;
mbed_official 619:034e698bc035 69 }
mbed_official 619:034e698bc035 70
mbed_official 619:034e698bc035 71 void I2C_WriteBitSCL(I2C_ConfigStruct* conf, uint8_t data)
mbed_official 619:034e698bc035 72 {
mbed_official 619:034e698bc035 73 uint32_t scl_port_num = I2C_PORT(conf->scl);
mbed_official 619:034e698bc035 74 uint32_t scl_pin_index = I2C_PIN_INDEX(conf->scl);
mbed_official 619:034e698bc035 75
mbed_official 619:034e698bc035 76 if(data == 1)
mbed_official 619:034e698bc035 77 HAL_GPIO_SetBits((GPIO_TypeDef*)(GPIOA_BASE + (scl_port_num << 24)), scl_pin_index);
mbed_official 619:034e698bc035 78 else
mbed_official 619:034e698bc035 79 HAL_GPIO_ResetBits((GPIO_TypeDef*)(GPIOA_BASE + (scl_port_num << 24)), scl_pin_index);
mbed_official 619:034e698bc035 80
mbed_official 619:034e698bc035 81 }
mbed_official 619:034e698bc035 82
mbed_official 619:034e698bc035 83 void I2C_WriteBitSDA(I2C_ConfigStruct* conf, uint8_t data)
mbed_official 619:034e698bc035 84 {
mbed_official 619:034e698bc035 85 uint32_t sda_port_num = I2C_PORT(conf->sda);
mbed_official 619:034e698bc035 86 uint32_t sda_pin_index = I2C_PIN_INDEX(conf->sda);
mbed_official 619:034e698bc035 87
mbed_official 619:034e698bc035 88 if(data == 1)
mbed_official 619:034e698bc035 89 GPIO_OutEnClr((GPIO_TypeDef*)(GPIOA_BASE + (sda_port_num << 24)), sda_pin_index);
mbed_official 619:034e698bc035 90 else
mbed_official 619:034e698bc035 91 GPIO_OutEnSet((GPIO_TypeDef*)(GPIOA_BASE + (sda_port_num << 24)), sda_pin_index);
mbed_official 619:034e698bc035 92
mbed_official 619:034e698bc035 93 }
mbed_official 619:034e698bc035 94
mbed_official 619:034e698bc035 95 uint8_t I2C_ReadBitSDA(I2C_ConfigStruct* conf)
mbed_official 619:034e698bc035 96 {
mbed_official 619:034e698bc035 97 uint32_t sda_port_num = I2C_PORT(conf->sda);
mbed_official 619:034e698bc035 98 uint32_t sda_pin_index = I2C_PIN_INDEX(conf->sda);
mbed_official 619:034e698bc035 99
mbed_official 619:034e698bc035 100 if(HAL_GPIO_ReadInputDataBit((GPIO_TypeDef*)(GPIOA_BASE + (sda_port_num << 24)), sda_pin_index))
mbed_official 619:034e698bc035 101 return 1;
mbed_official 619:034e698bc035 102
mbed_official 619:034e698bc035 103 return 0;
mbed_official 619:034e698bc035 104 }
mbed_official 619:034e698bc035 105
mbed_official 619:034e698bc035 106 void I2C_Start(I2C_ConfigStruct* conf)
mbed_official 619:034e698bc035 107 {
mbed_official 619:034e698bc035 108 I2C_WriteBitSCL(conf, 1);
mbed_official 619:034e698bc035 109 I2C_WriteBitSDA(conf, 1);
mbed_official 619:034e698bc035 110
mbed_official 619:034e698bc035 111 I2C_WriteBitSDA(conf, 0);
mbed_official 619:034e698bc035 112 I2C_WriteBitSCL(conf, 0);
mbed_official 619:034e698bc035 113 }
mbed_official 619:034e698bc035 114
mbed_official 619:034e698bc035 115 void I2C_Stop(I2C_ConfigStruct* conf)
mbed_official 619:034e698bc035 116 {
mbed_official 619:034e698bc035 117 I2C_WriteBitSCL(conf, 0);
mbed_official 619:034e698bc035 118 I2C_WriteBitSDA(conf, 0);
mbed_official 619:034e698bc035 119
mbed_official 619:034e698bc035 120 I2C_WriteBitSCL(conf, 1);
mbed_official 619:034e698bc035 121 I2C_WriteBitSDA(conf, 1);
mbed_official 619:034e698bc035 122 }
mbed_official 619:034e698bc035 123
mbed_official 619:034e698bc035 124 uint8_t I2C_WriteByte(I2C_ConfigStruct* conf, uint8_t data)
mbed_official 619:034e698bc035 125 {
mbed_official 619:034e698bc035 126 int i;
mbed_official 619:034e698bc035 127 uint8_t ret;
mbed_official 619:034e698bc035 128
mbed_official 619:034e698bc035 129 //Write byte
mbed_official 619:034e698bc035 130 for(i=0; i<8; i++)
mbed_official 619:034e698bc035 131 {
mbed_official 619:034e698bc035 132 if((data << i) & 0x80)
mbed_official 619:034e698bc035 133 I2C_WriteBitSDA(conf, 1);
mbed_official 619:034e698bc035 134 else
mbed_official 619:034e698bc035 135 I2C_WriteBitSDA(conf, 0);
mbed_official 619:034e698bc035 136
mbed_official 619:034e698bc035 137 I2C_WriteBitSCL(conf, 1);
mbed_official 619:034e698bc035 138 I2C_WriteBitSCL(conf, 0);
mbed_official 619:034e698bc035 139 }
mbed_official 619:034e698bc035 140 //Make clk for receiving ack
mbed_official 619:034e698bc035 141 I2C_WriteBitSDA(conf, 1);
mbed_official 619:034e698bc035 142 I2C_WriteBitSCL(conf, 1);
mbed_official 619:034e698bc035 143 //Read Ack/Nack
mbed_official 619:034e698bc035 144 ret = I2C_ReadBitSDA(conf);
mbed_official 619:034e698bc035 145
mbed_official 619:034e698bc035 146 I2C_WriteBitSCL(conf, 0);
mbed_official 619:034e698bc035 147
mbed_official 619:034e698bc035 148 return ret;
mbed_official 619:034e698bc035 149 }
mbed_official 619:034e698bc035 150
mbed_official 619:034e698bc035 151 void I2C_SendACK(I2C_ConfigStruct* conf)
mbed_official 619:034e698bc035 152 {
mbed_official 619:034e698bc035 153 I2C_WriteBitSDA(conf, 0);
mbed_official 619:034e698bc035 154 I2C_WriteBitSCL(conf, 1);
mbed_official 619:034e698bc035 155
mbed_official 619:034e698bc035 156 I2C_WriteBitSCL(conf, 0);
mbed_official 619:034e698bc035 157 }
mbed_official 619:034e698bc035 158
mbed_official 619:034e698bc035 159 void I2C_SendNACK(I2C_ConfigStruct* conf)
mbed_official 619:034e698bc035 160 {
mbed_official 619:034e698bc035 161 I2C_WriteBitSDA(conf, 1);
mbed_official 619:034e698bc035 162 I2C_WriteBitSCL(conf, 1);
mbed_official 619:034e698bc035 163
mbed_official 619:034e698bc035 164 I2C_WriteBitSCL(conf, 0);
mbed_official 619:034e698bc035 165 }
mbed_official 619:034e698bc035 166
mbed_official 619:034e698bc035 167 uint8_t I2C_ReadByte(I2C_ConfigStruct* conf)
mbed_official 619:034e698bc035 168 {
mbed_official 619:034e698bc035 169 int i;
mbed_official 619:034e698bc035 170 uint8_t ret = 0;
mbed_official 619:034e698bc035 171
mbed_official 619:034e698bc035 172 I2C_WriteBitSDA(conf, 1); //out enable clear(GPIO is input)
mbed_official 619:034e698bc035 173
mbed_official 619:034e698bc035 174 //Read byte
mbed_official 619:034e698bc035 175 for(i=0; i<8; i++)
mbed_official 619:034e698bc035 176 {
mbed_official 619:034e698bc035 177 I2C_WriteBitSCL(conf, 1);
mbed_official 619:034e698bc035 178 ret = (ret << 1) | (I2C_ReadBitSDA(conf));
mbed_official 619:034e698bc035 179 I2C_WriteBitSCL(conf, 0);
mbed_official 619:034e698bc035 180 }
mbed_official 619:034e698bc035 181
mbed_official 619:034e698bc035 182 return ret;
mbed_official 619:034e698bc035 183 }
mbed_official 619:034e698bc035 184
mbed_official 619:034e698bc035 185 int I2C_Write(I2C_ConfigStruct* conf, uint8_t addr, uint8_t* data, uint32_t len)
mbed_official 619:034e698bc035 186 {
mbed_official 619:034e698bc035 187 int i;
mbed_official 619:034e698bc035 188
mbed_official 619:034e698bc035 189 I2C_Start(conf);
mbed_official 619:034e698bc035 190
mbed_official 619:034e698bc035 191 //Write addr
mbed_official 619:034e698bc035 192 if(I2C_WriteByte(conf, addr) != 0)
mbed_official 619:034e698bc035 193 {
mbed_official 619:034e698bc035 194 //printf("Received NACK at address phase!!\r\n");
mbed_official 619:034e698bc035 195 return -1;
mbed_official 619:034e698bc035 196 }
mbed_official 619:034e698bc035 197
mbed_official 619:034e698bc035 198 //Write data
mbed_official 619:034e698bc035 199 for(i=0; i<len; i++)
mbed_official 619:034e698bc035 200 {
mbed_official 619:034e698bc035 201 if(I2C_WriteByte(conf, data[i]))
mbed_official 619:034e698bc035 202 return -1;
mbed_official 619:034e698bc035 203 }
mbed_official 619:034e698bc035 204
mbed_official 619:034e698bc035 205 I2C_Stop(conf);
mbed_official 619:034e698bc035 206
mbed_official 619:034e698bc035 207 return 0;//success
mbed_official 619:034e698bc035 208 }
mbed_official 619:034e698bc035 209
mbed_official 619:034e698bc035 210 int I2C_WriteRepeated(I2C_ConfigStruct* conf, uint8_t addr, uint8_t* data, uint32_t len)
mbed_official 619:034e698bc035 211 {
mbed_official 619:034e698bc035 212 int i;
mbed_official 619:034e698bc035 213
mbed_official 619:034e698bc035 214 I2C_Start(conf);
mbed_official 619:034e698bc035 215
mbed_official 619:034e698bc035 216 //Write addr
mbed_official 619:034e698bc035 217 if(I2C_WriteByte(conf, addr) != 0)
mbed_official 619:034e698bc035 218 {
mbed_official 619:034e698bc035 219 //printf("Received NACK at address phase!!\r\n");
mbed_official 619:034e698bc035 220 return -1;
mbed_official 619:034e698bc035 221 }
mbed_official 619:034e698bc035 222
mbed_official 619:034e698bc035 223 //Write data
mbed_official 619:034e698bc035 224 for(i=0; i<len; i++)
mbed_official 619:034e698bc035 225 {
mbed_official 619:034e698bc035 226 if(I2C_WriteByte(conf, data[i]))
mbed_official 619:034e698bc035 227 return -1;
mbed_official 619:034e698bc035 228 }
mbed_official 619:034e698bc035 229
mbed_official 619:034e698bc035 230 return 0;//success
mbed_official 619:034e698bc035 231 }
mbed_official 619:034e698bc035 232
mbed_official 619:034e698bc035 233 int I2C_Read(I2C_ConfigStruct* conf, uint8_t addr, uint8_t* data, uint32_t len)
mbed_official 619:034e698bc035 234 {
mbed_official 619:034e698bc035 235 int i;
mbed_official 619:034e698bc035 236
mbed_official 619:034e698bc035 237 I2C_Start(conf);
mbed_official 619:034e698bc035 238
mbed_official 619:034e698bc035 239 //Write addr | read command
mbed_official 619:034e698bc035 240 if(I2C_WriteByte(conf, (addr | 1)) != 0)
mbed_official 619:034e698bc035 241 {
mbed_official 619:034e698bc035 242 //printf("Received NACK at address phase!!\r\n");
mbed_official 619:034e698bc035 243 return -1;
mbed_official 619:034e698bc035 244 }
mbed_official 619:034e698bc035 245
mbed_official 619:034e698bc035 246 //Read data
mbed_official 619:034e698bc035 247 for(i=0; i<len; i++)
mbed_official 619:034e698bc035 248 {
mbed_official 619:034e698bc035 249 data[i] = I2C_ReadByte(conf);
mbed_official 619:034e698bc035 250
mbed_official 619:034e698bc035 251 if( i == (len - 1) )
mbed_official 619:034e698bc035 252 I2C_SendNACK(conf);
mbed_official 619:034e698bc035 253 else
mbed_official 619:034e698bc035 254 I2C_SendACK(conf);
mbed_official 619:034e698bc035 255 }
mbed_official 619:034e698bc035 256
mbed_official 619:034e698bc035 257 I2C_Stop(conf);
mbed_official 619:034e698bc035 258
mbed_official 619:034e698bc035 259 return 0;//success
mbed_official 619:034e698bc035 260 }
mbed_official 619:034e698bc035 261
mbed_official 619:034e698bc035 262 int I2C_ReadRepeated(I2C_ConfigStruct* conf, uint8_t addr, uint8_t* data, uint32_t len)
mbed_official 619:034e698bc035 263 {
mbed_official 619:034e698bc035 264 int i;
mbed_official 619:034e698bc035 265
mbed_official 619:034e698bc035 266 I2C_Start(conf);
mbed_official 619:034e698bc035 267
mbed_official 619:034e698bc035 268 //Write addr | read command
mbed_official 619:034e698bc035 269 if(I2C_WriteByte(conf, (addr | 1)) != 0)
mbed_official 619:034e698bc035 270 {
mbed_official 619:034e698bc035 271 //printf("Received NACK at address phase!!\r\n");
mbed_official 619:034e698bc035 272 return -1;
mbed_official 619:034e698bc035 273 }
mbed_official 619:034e698bc035 274
mbed_official 619:034e698bc035 275 //Read data
mbed_official 619:034e698bc035 276 for(i=0; i<len; i++)
mbed_official 619:034e698bc035 277 {
mbed_official 619:034e698bc035 278 data[i] = I2C_ReadByte(conf);
mbed_official 619:034e698bc035 279
mbed_official 619:034e698bc035 280 if( i == (len - 1) )
mbed_official 619:034e698bc035 281 I2C_SendNACK(conf);
mbed_official 619:034e698bc035 282 else
mbed_official 619:034e698bc035 283 I2C_SendACK(conf);
mbed_official 619:034e698bc035 284 }
mbed_official 619:034e698bc035 285
mbed_official 619:034e698bc035 286 return 0;//success
mbed_official 619:034e698bc035 287 }
mbed_official 619:034e698bc035 288