mbed library sources

Dependents:   Freedman_v2 Nucleo_i2c_OLED_BME280_copy

Fork of mbed-src by mbed official

Committer:
mbed_official
Date:
Thu Jul 02 16:15:09 2015 +0100
Revision:
580:3c14cb9b87c5
Synchronized with git revision 213caf296f26963a7bea129b8ec4f33bbd1e6588

Full URL: https://github.com/mbedmicro/mbed/commit/213caf296f26963a7bea129b8ec4f33bbd1e6588/

commit of mps2

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mbed_official 580:3c14cb9b87c5 1 /* mbed Microcontroller Library
mbed_official 580:3c14cb9b87c5 2 * Copyright (c) 2006-2015 ARM Limited
mbed_official 580:3c14cb9b87c5 3 *
mbed_official 580:3c14cb9b87c5 4 * Licensed under the Apache License, Version 2.0 (the "License");
mbed_official 580:3c14cb9b87c5 5 * you may not use this file except in compliance with the License.
mbed_official 580:3c14cb9b87c5 6 * You may obtain a copy of the License at
mbed_official 580:3c14cb9b87c5 7 *
mbed_official 580:3c14cb9b87c5 8 * http://www.apache.org/licenses/LICENSE-2.0
mbed_official 580:3c14cb9b87c5 9 *
mbed_official 580:3c14cb9b87c5 10 * Unless required by applicable law or agreed to in writing, software
mbed_official 580:3c14cb9b87c5 11 * distributed under the License is distributed on an "AS IS" BASIS,
mbed_official 580:3c14cb9b87c5 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
mbed_official 580:3c14cb9b87c5 13 * See the License for the specific language governing permissions and
mbed_official 580:3c14cb9b87c5 14 * limitations under the License.
mbed_official 580:3c14cb9b87c5 15 */
mbed_official 580:3c14cb9b87c5 16 #include <string.h>
mbed_official 580:3c14cb9b87c5 17
mbed_official 580:3c14cb9b87c5 18 #include "ethernet_api.h"
mbed_official 580:3c14cb9b87c5 19 #include "mps2_ethernet_api.h"
mbed_official 580:3c14cb9b87c5 20 #include "cmsis.h"
mbed_official 580:3c14cb9b87c5 21 #include "mbed_interface.h"
mbed_official 580:3c14cb9b87c5 22 #include "toolchain.h"
mbed_official 580:3c14cb9b87c5 23 #include "mbed_error.h"
mbed_official 580:3c14cb9b87c5 24 #include "ETH_MPS2.h"
mbed_official 580:3c14cb9b87c5 25 #include "wait_api.h"
mbed_official 580:3c14cb9b87c5 26
mbed_official 580:3c14cb9b87c5 27 #define TX_PKT_SIZE 256
mbed_official 580:3c14cb9b87c5 28 #define RX_PKT_SIZE 300
mbed_official 580:3c14cb9b87c5 29
mbed_official 580:3c14cb9b87c5 30 // Types
mbed_official 580:3c14cb9b87c5 31 #undef FALSE
mbed_official 580:3c14cb9b87c5 32 #undef TRUE
mbed_official 580:3c14cb9b87c5 33 #define FALSE 0
mbed_official 580:3c14cb9b87c5 34 #define TRUE 1
mbed_official 580:3c14cb9b87c5 35
mbed_official 580:3c14cb9b87c5 36 /*----------------------------------------------------------------------------
mbed_official 580:3c14cb9b87c5 37 Ethernet Device initialize
mbed_official 580:3c14cb9b87c5 38 *----------------------------------------------------------------------------*/
mbed_official 580:3c14cb9b87c5 39 int ethernet_init()
mbed_official 580:3c14cb9b87c5 40 {
mbed_official 580:3c14cb9b87c5 41 int error;
mbed_official 580:3c14cb9b87c5 42 error = 0;
mbed_official 580:3c14cb9b87c5 43
mbed_official 580:3c14cb9b87c5 44 if(smsc9220_check_id()) {
mbed_official 580:3c14cb9b87c5 45 error = TRUE;
mbed_official 580:3c14cb9b87c5 46 }
mbed_official 580:3c14cb9b87c5 47
mbed_official 580:3c14cb9b87c5 48 if(smsc9220_soft_reset()) {
mbed_official 580:3c14cb9b87c5 49 error = TRUE;
mbed_official 580:3c14cb9b87c5 50 }
mbed_official 580:3c14cb9b87c5 51
mbed_official 580:3c14cb9b87c5 52 smsc9220_set_txfifo(5);
mbed_official 580:3c14cb9b87c5 53
mbed_official 580:3c14cb9b87c5 54 // Sets automatic flow control thresholds, and backpressure
mbed_official 580:3c14cb9b87c5 55 // threshold to defaults specified.
mbed_official 580:3c14cb9b87c5 56 SMSC9220->AFC_CFG = 0x006E3740;
mbed_official 580:3c14cb9b87c5 57
mbed_official 580:3c14cb9b87c5 58 if(smsc9220_wait_eeprom()) {
mbed_official 580:3c14cb9b87c5 59 error = TRUE;
mbed_official 580:3c14cb9b87c5 60 }
mbed_official 580:3c14cb9b87c5 61
mbed_official 580:3c14cb9b87c5 62 // Configure GPIOs as LED outputs.
mbed_official 580:3c14cb9b87c5 63 SMSC9220->GPIO_CFG = 0x70070000;
mbed_official 580:3c14cb9b87c5 64
mbed_official 580:3c14cb9b87c5 65 smsc9220_init_irqs();
mbed_official 580:3c14cb9b87c5 66
mbed_official 580:3c14cb9b87c5 67 /* Configure MAC addresses here if needed. */
mbed_official 580:3c14cb9b87c5 68
mbed_official 580:3c14cb9b87c5 69 if(smsc9220_check_phy()) {
mbed_official 580:3c14cb9b87c5 70 error = TRUE;
mbed_official 580:3c14cb9b87c5 71 }
mbed_official 580:3c14cb9b87c5 72
mbed_official 580:3c14cb9b87c5 73 if(smsc9220_reset_phy()) {
mbed_official 580:3c14cb9b87c5 74 error = TRUE;
mbed_official 580:3c14cb9b87c5 75 return error;
mbed_official 580:3c14cb9b87c5 76 }
mbed_official 580:3c14cb9b87c5 77
mbed_official 580:3c14cb9b87c5 78 wait_ms(100);
mbed_official 580:3c14cb9b87c5 79 // Checking whether phy reset completed successfully.
mbed_official 580:3c14cb9b87c5 80 {
mbed_official 580:3c14cb9b87c5 81 unsigned short phyreset;
mbed_official 580:3c14cb9b87c5 82 phyreset = 0;
mbed_official 580:3c14cb9b87c5 83 smsc9220_phy_regread(SMSC9220_PHY_BCONTROL, &phyreset);
mbed_official 580:3c14cb9b87c5 84 if(phyreset & (1 << 15)) {
mbed_official 580:3c14cb9b87c5 85 error = TRUE;
mbed_official 580:3c14cb9b87c5 86 return error;
mbed_official 580:3c14cb9b87c5 87 }
mbed_official 580:3c14cb9b87c5 88 }
mbed_official 580:3c14cb9b87c5 89
mbed_official 580:3c14cb9b87c5 90 /* Advertise capabilities */
mbed_official 580:3c14cb9b87c5 91 smsc9220_advertise_cap();
mbed_official 580:3c14cb9b87c5 92
mbed_official 580:3c14cb9b87c5 93
mbed_official 580:3c14cb9b87c5 94 /* Begin to establish link */
mbed_official 580:3c14cb9b87c5 95 smsc9220_establish_link(); // bit [12] of BCONTROL seems self-clearing.
mbed_official 580:3c14cb9b87c5 96 // Although it's not so in the manual.
mbed_official 580:3c14cb9b87c5 97
mbed_official 580:3c14cb9b87c5 98 /* Interrupt threshold */
mbed_official 580:3c14cb9b87c5 99 SMSC9220->FIFO_INT = 0xFF000000;
mbed_official 580:3c14cb9b87c5 100
mbed_official 580:3c14cb9b87c5 101 smsc9220_enable_mac_xmit();
mbed_official 580:3c14cb9b87c5 102
mbed_official 580:3c14cb9b87c5 103 smsc9220_enable_xmit();
mbed_official 580:3c14cb9b87c5 104
mbed_official 580:3c14cb9b87c5 105 SMSC9220->RX_CFG = 0;
mbed_official 580:3c14cb9b87c5 106
mbed_official 580:3c14cb9b87c5 107 smsc9220_enable_mac_recv();
mbed_official 580:3c14cb9b87c5 108
mbed_official 580:3c14cb9b87c5 109 // Rx status FIFO level irq threshold
mbed_official 580:3c14cb9b87c5 110 SMSC9220->FIFO_INT &= ~(0xFF); // Clear 2 bottom nibbles
mbed_official 580:3c14cb9b87c5 111
mbed_official 580:3c14cb9b87c5 112 // This sleep is compulsory otherwise txmit/receive will fail.
mbed_official 580:3c14cb9b87c5 113 wait_ms(2000);
mbed_official 580:3c14cb9b87c5 114 return error;
mbed_official 580:3c14cb9b87c5 115
mbed_official 580:3c14cb9b87c5 116 }
mbed_official 580:3c14cb9b87c5 117
mbed_official 580:3c14cb9b87c5 118 /*----------------------------------------------------------------------------
mbed_official 580:3c14cb9b87c5 119 Ethernet Device Uninitialize
mbed_official 580:3c14cb9b87c5 120 *----------------------------------------------------------------------------*/
mbed_official 580:3c14cb9b87c5 121 void ethernet_free() {
mbed_official 580:3c14cb9b87c5 122 }
mbed_official 580:3c14cb9b87c5 123
mbed_official 580:3c14cb9b87c5 124 int ethernet_write(const char *data, int size)
mbed_official 580:3c14cb9b87c5 125 {
mbed_official 580:3c14cb9b87c5 126 return 0;
mbed_official 580:3c14cb9b87c5 127 }
mbed_official 580:3c14cb9b87c5 128
mbed_official 580:3c14cb9b87c5 129 int ethernet_send()
mbed_official 580:3c14cb9b87c5 130 {
mbed_official 580:3c14cb9b87c5 131 return 0;
mbed_official 580:3c14cb9b87c5 132 }
mbed_official 580:3c14cb9b87c5 133
mbed_official 580:3c14cb9b87c5 134 int ethernet_receive()
mbed_official 580:3c14cb9b87c5 135 {
mbed_official 580:3c14cb9b87c5 136 return 0;
mbed_official 580:3c14cb9b87c5 137 }
mbed_official 580:3c14cb9b87c5 138
mbed_official 580:3c14cb9b87c5 139 // Read from an recevied ethernet packet.
mbed_official 580:3c14cb9b87c5 140 // After receive returnd a number bigger than 0 it is
mbed_official 580:3c14cb9b87c5 141 // possible to read bytes from this packet.
mbed_official 580:3c14cb9b87c5 142 // Read will write up to size bytes into data.
mbed_official 580:3c14cb9b87c5 143 // It is possible to use read multible times.
mbed_official 580:3c14cb9b87c5 144 // Each time read will start reading after the last read byte before.
mbed_official 580:3c14cb9b87c5 145
mbed_official 580:3c14cb9b87c5 146 int ethernet_read(char *data, int dlen)
mbed_official 580:3c14cb9b87c5 147 {
mbed_official 580:3c14cb9b87c5 148 return 0;
mbed_official 580:3c14cb9b87c5 149 }
mbed_official 580:3c14cb9b87c5 150
mbed_official 580:3c14cb9b87c5 151 void ethernet_address(char *mac) {
mbed_official 580:3c14cb9b87c5 152 mbed_mac_address(mac);
mbed_official 580:3c14cb9b87c5 153 }
mbed_official 580:3c14cb9b87c5 154
mbed_official 580:3c14cb9b87c5 155 int ethernet_link(void)
mbed_official 580:3c14cb9b87c5 156 {
mbed_official 580:3c14cb9b87c5 157 return 0;
mbed_official 580:3c14cb9b87c5 158 }
mbed_official 580:3c14cb9b87c5 159
mbed_official 580:3c14cb9b87c5 160 void ethernet_set_link(int speed, int duplex)
mbed_official 580:3c14cb9b87c5 161 {
mbed_official 580:3c14cb9b87c5 162 smsc9220_establish_link();
mbed_official 580:3c14cb9b87c5 163 }
mbed_official 580:3c14cb9b87c5 164