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:
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