Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: mbed mbed-rtos EthernetInterface
Diff: main.cpp
- Revision:
- 1:3c09c9c0324e
- Parent:
- 0:bbc9cfdee3bc
- Child:
- 2:e30076def8a7
--- a/main.cpp Mon Sep 22 02:34:12 2014 +0000 +++ b/main.cpp Tue Jan 15 23:07:16 2019 +0000 @@ -1,27 +1,122 @@ #include "mbed.h" #include "EthernetInterface.h" +#include "fsl_enet_driver.h" + #define MBED_DEV_IP "192.168.0.52" #define MBED_DEV_MASK "255.255.255.0" #define MBED_DEV_GW "0.0.0.0" #define ECHO_SERVER_PORT 5000 + +Serial s(USBTX, USBRX); +volatile char c = '\0'; // Initialized to the NULL character + uint32_t data; + +/*! @brief Defines the PHY register.*/ +typedef enum _enet_phy_register +{ + kEnetPhyCR = 0, /*!< PHY control register */ + kEnetPhySR = 1, /*!< PHY status register*/ + kEnetPhyId1 = 2, /*!< PHY identification register 1*/ + kEnetPhyId2 = 3, /*!< PHY identification register 2*/ + kEnetPhyCt2 = 0x1e /*!< PHY control2 register*/ +} enet_phy_register_t; + /*! @brief Defines the PHY status.*/ +typedef enum _enet_phy_status +{ + kEnetPhyLinkStatus = 0x4, /*!< ENET PHY link status bit*/ + kEnetPhyAutoNegAble = 0x08, /*!< ENET PHY auto negotiation ability*/ + kEnetPhyAutoNegComplete = 0x20, /*!< ENET PHY auto negotiation complete*/ + kEnetPhySpeedDulpexMask = 0x07 /*!< ENET PHY speed mask on status register 2*/ +} enet_phy_status_t; +/*! @brief Defines the control flag.*/ +typedef enum _enet_phy_control +{ + kEnetPhyAutoNeg = 0x1000,/*!< ENET PHY auto negotiation control*/ + kEnetPhySpeed = 0x2000, /*! ENET PHY speed control*/ + kEnetPhyLoop = 0x4000, /*!< ENET PHY loop control*/ + kEnetPhyReset = 0x8000, /*!< ENET PHY reset control*/ + kEnetPhy10HalfDuplex = 0x01, /*!< ENET PHY 10 M half duplex*/ + kEnetPhy100HalfDuplex = 0x02,/*!< ENET PHY 100 M half duplex*/ + kEnetPhy10FullDuplex = 0x05,/*!< ENET PHY 10 M full duplex*/ + kEnetPhy100FullDuplex = 0x06/*!< ENET PHY 100 M full duplex*/ +} enet_phy_control_t; +typedef enum _enet_phy_speed +{ + kEnetSpeed10M = 0, /*!< ENET PHY 10 M speed*/ + kEnetSpeed100M = 1 /*!< ENET PHY 100 M speed*/ +} enet_phy_speed_t; +void onCharReceived() +{ + c = s.getc(); +} +void baud(int baudrate) { + + s.baud(baudrate); +} + + uint32_t mii_read_data(uint32_t phyReg, uint32_t *dataPtr) +{ + //uint32_t instance, uint32_t phyAddr, uint32_t phyReg, uint32_t *dataPtr + return enet_mii_read(0,0,phyReg,dataPtr); +} + uint32_t mii_write_data(uint32_t phyReg, uint32_t dataToWtite) +{ + //enet_mii_write(uint32_t instance, uint32_t phyAddr, uint32_t phyReg, uint32_t data) + return enet_mii_write(0,0,phyReg,dataToWtite); +} + +void change_speed(uint32_t phyReg,uint32_t new_speed){ + + mii_write_data(phyReg,new_speed); + +} + + +int get_connection_speed(uint32_t phyReg, uint32_t *dataPtr) +{ + mii_read_data(phyReg,dataPtr); + data &=kEnetPhySpeedDulpexMask; + if ((kEnetPhy100HalfDuplex == data) || (kEnetPhy100FullDuplex == data)) + { + return 100; + } + + return 10 ; +} int main (void) { - EthernetInterface eth; - eth.init(MBED_DEV_IP, MBED_DEV_MASK, MBED_DEV_GW); //Assign a device ip, mask and gateway - eth.connect(); - printf("IP Address is %s\n", eth.getIPAddress()); +int speed; + baud(115200); + + + EthernetInterface eth; + printf("Initializing interface...\r\n"); + eth.init(MBED_DEV_IP, MBED_DEV_MASK, MBED_DEV_GW); //Assign a device ip, mask and gateway + - TCPSocketServer server; - server.bind(ECHO_SERVER_PORT); - server.listen(); + printf ("Hello World! Enter task number:\n"); + onCharReceived(); + switch(c){ + case '1': + { + printf("LEts find out about RJ-45 socket diodes\n"); + printf("Connecting to network...\r\n"); + printf("Wait for red LED and connect with putty\n"); + eth.connect(); + printf("IP Address is %s\n", eth.getIPAddress()); + + TCPSocketServer server; + server.bind(ECHO_SERVER_PORT); + server.listen(); + DigitalOut myled(LED1); - while (true) { - printf("\nWait for new connection...\n"); + while (true) { + printf("Write a message in putty \n"); TCPSocketConnection client; server.accept(client); - client.set_blocking(false, 1500); // Timeout after (1.5)s + client.set_blocking(false, 3000); // Timeout after (1.5)s printf("Connection from: %s\n", client.get_address()); char buffer[256]; @@ -33,6 +128,34 @@ if (n <= 0) break; } - client.close(); - } -} \ No newline at end of file + client.close(); + } + break; + } + case '2': + { + printf("LEts check transmission speed\n"); + printf("Connecting to network...\r\n"); + eth.connect(); + speed = get_connection_speed(kEnetPhyCt2, &data); + printf("Connected at %d Mb/s\r\n", speed); + printf("IP Address is %s\n", eth.getIPAddress()); + break; + } + case '3':{ + printf("Lets change speed\n"); + printf("Changing speed to 10Mb\n"); + printf("Connecting to network...\r\n"); + change_speed(kEnetPhyCR, kEnetSpeed10M); + eth.connect(); + printf("IP Address is %s\n", eth.getIPAddress()); + speed = get_connection_speed(kEnetPhyCt2, &data); + printf("Connected at %d Mb/s\r\n", speed); + + break; + } + default: break; + } + while(1); +} +