mbed library sources, include can_api for nucleo-f091rc

Dependents:   CanNucleoF0_example

Fork of mbed-src by mbed official

Committer:
ptpaterson
Date:
Thu Jan 07 05:49:05 2016 +0000
Revision:
645:13c87cbecd54
Parent:
619:034e698bc035
corrected freeze on CAN_RECEIVE_IT

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