Ethernet link status for the K64F

Dependents:   JRO_CR2 K64F_EthLink_HelloWorld frdm_test JRO_DDSv2

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers k64f_EthLink.cpp Source File

k64f_EthLink.cpp

00001 #if defined(TARGET_K64F)
00002 #include "k64f_EthLink.h"
00003 
00004 //--------------------------------------------------------------------------------------------------------------------------------------//
00005 // Constructor
00006 
00007 k64fEthLink::k64fEthLink() {
00008 }
00009 
00010 //--------------------------------------------------------------------------------------------------------------------------------------//
00011 // Get Ethernet link status on the K64F
00012 /*
00013 int k64fEthLink::GetELink() {
00014     int mdio_timer = 0;
00015     uint32_t k64f_mdio_reg = ENET_EIR;
00016     
00017     //wait for MDIO interface to be ready
00018     do {
00019         k64f_mdio_reg = ENET_EIR;
00020 #ifdef RTOS_H
00021         Thread::wait(1);
00022 #else   
00023         wait_ms(1);
00024 #endif
00025         mdio_timer++;
00026     } while(((k64f_mdio_reg & MDIO_MII_READY_BIT) == 0) && (mdio_timer < 300));
00027     if(mdio_timer > 298) {          //average is about 122mS
00028         return(MDIO_TIMEOUT);       //timeout error
00029     }   
00030     
00031     //get Basic Status Register
00032     ENET_MMFR = MDIO_GET_LINK_REG;
00033     wait_us(35);                    //20 is absolute minimum!!
00034     k64f_mdio_reg = ENET_MMFR;      //get the phy result
00035     if(k64f_mdio_reg & MDIO_MII_LINK_BITS) return(PHY_UP);
00036     return(PHY_DOWN);
00037 }
00038 */
00039 //--------------------------------------------------------------------------------------------------------------------------------------//
00040 // Get Ethernet link status on the K64F
00041 /*
00042 ENET_Type miiSTR = {};
00043 
00044 int k64fEthLink::GetELink() {
00045     int mdio_timer = 0;
00046     uint32_t k64f_mdio_reg = miiSTR.EIR;
00047     
00048     //wait for MDIO interface to be ready
00049     do {
00050         k64f_mdio_reg = miiSTR.EIR;
00051 #ifdef RTOS_H
00052         Thread::wait(1);
00053 #else   
00054         wait_ms(1);
00055 #endif
00056         mdio_timer++;
00057     } while(((k64f_mdio_reg & MDIO_MII_READY_BIT) == 0) && (mdio_timer < 300));
00058     if(mdio_timer > 298) {          //average is about 122mS
00059         return(MDIO_TIMEOUT);       //timeout error
00060     }   
00061     
00062     //get Basic Status Register
00063     miiSTR.MMFR = MDIO_GET_LINK_REG;
00064     wait_us(35);                    //20 is absolute minimum!!
00065     k64f_mdio_reg = miiSTR.MMFR;      //get the phy result
00066     if(k64f_mdio_reg & MDIO_MII_LINK_BITS) return(PHY_UP);
00067     return(PHY_DOWN);
00068 }
00069 */
00070 //--------------------------------------------------------------------------------------------------------------------------------------//
00071 // Get Ethernet link status on the K64F
00072 
00073 //see: mbed-dev/targets/cmsis/TARGET_K64F/MK64F12.h
00074 
00075 int k64fEthLink::GetELink() {
00076     int mdio_timer = 0;
00077     uint32_t k64f_mdio_reg = ENET->EIR;
00078     
00079     //wait for MDIO interface to be ready
00080     do {
00081         k64f_mdio_reg = ENET->EIR;
00082 #ifdef RTOS_H
00083         Thread::wait(1);
00084 #else   
00085         wait_ms(1);
00086 #endif
00087         mdio_timer++;
00088     } while(((k64f_mdio_reg & MDIO_MII_READY_BIT) == 0) && (mdio_timer < 300));
00089     if(mdio_timer > 298) {          //average is about 122mS
00090         return(MDIO_TIMEOUT);       //timeout error
00091     }   
00092     
00093     //get Basic Status Register
00094     ENET->MMFR = MDIO_GET_LINK_REG;
00095     wait_us(35);                    //20 is absolute minimum!!
00096     k64f_mdio_reg = ENET->MMFR;      //get the phy result
00097     if(k64f_mdio_reg & MDIO_MII_LINK_BITS) return(PHY_UP);
00098     return(PHY_DOWN);
00099 }
00100 
00101 #endif
00102 
00103 
00104