mbed library sources. Supersedes mbed-src.

Dependents:   Nucleo_Hello_Encoder BLE_iBeaconScan AM1805_DEMO DISCO-F429ZI_ExportTemplate1 ... more

Committer:
Kojto
Date:
Wed Jul 19 17:31:21 2017 +0100
Revision:
169:e3b6fe271b81
Parent:
160:d5399cc887bb
This updates the lib to the mbed lib v 147

Who changed what in which revision?

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