Kev Mann / mbed-dev-OS5_10_4
Committer:
kevman
Date:
Wed Mar 13 11:03:24 2019 +0000
Revision:
2:7aab896b1a3b
Parent:
0:38ceb79fef03
2019-03-13

Who changed what in which revision?

UserRevisionLine numberNew contents of line
kevman 0:38ceb79fef03 1 /**********************************************************************
kevman 0:38ceb79fef03 2 * $Id$ lpc_phy.h 2011-11-20
kevman 0:38ceb79fef03 3 *//**
kevman 0:38ceb79fef03 4 * @file lpc_phy.h
kevman 0:38ceb79fef03 5 * @brief Common PHY definitions used with all PHYs
kevman 0:38ceb79fef03 6 * @version 1.0
kevman 0:38ceb79fef03 7 * @date 20 Nov. 2011
kevman 0:38ceb79fef03 8 * @author NXP MCU SW Application Team
kevman 0:38ceb79fef03 9 *
kevman 0:38ceb79fef03 10 * Copyright(C) 2011, NXP Semiconductor
kevman 0:38ceb79fef03 11 * All rights reserved.
kevman 0:38ceb79fef03 12 *
kevman 0:38ceb79fef03 13 ***********************************************************************
kevman 0:38ceb79fef03 14 * Software that is described herein is for illustrative purposes only
kevman 0:38ceb79fef03 15 * which provides customers with programming information regarding the
kevman 0:38ceb79fef03 16 * products. This software is supplied "AS IS" without any warranties.
kevman 0:38ceb79fef03 17 * NXP Semiconductors assumes no responsibility or liability for the
kevman 0:38ceb79fef03 18 * use of the software, conveys no license or title under any patent,
kevman 0:38ceb79fef03 19 * copyright, or mask work right to the product. NXP Semiconductors
kevman 0:38ceb79fef03 20 * reserves the right to make changes in the software without
kevman 0:38ceb79fef03 21 * notification. NXP Semiconductors also make no representation or
kevman 0:38ceb79fef03 22 * warranty that such application will be suitable for the specified
kevman 0:38ceb79fef03 23 * use without further testing or modification.
kevman 0:38ceb79fef03 24 **********************************************************************/
kevman 0:38ceb79fef03 25
kevman 0:38ceb79fef03 26 #ifndef __LPC_PHY_H_
kevman 0:38ceb79fef03 27 #define __LPC_PHY_H_
kevman 0:38ceb79fef03 28
kevman 0:38ceb79fef03 29 /* These PHY functions are usually part of the EMAC driver */
kevman 0:38ceb79fef03 30
kevman 0:38ceb79fef03 31 /** \brief Phy status update state machine
kevman 0:38ceb79fef03 32 *
kevman 0:38ceb79fef03 33 * This function provides a state machine for maintaining the PHY
kevman 0:38ceb79fef03 34 * status without blocking. It must be occasionally called for the
kevman 0:38ceb79fef03 35 * PHY status to be maintained.
kevman 0:38ceb79fef03 36 *
kevman 0:38ceb79fef03 37 * \param[in] lpc17_emac LPC17 EMAC
kevman 0:38ceb79fef03 38 */
kevman 0:38ceb79fef03 39
kevman 0:38ceb79fef03 40 int32_t lpc_phy_sts_sm(LPC17_EMAC *lpc17_emac);
kevman 0:38ceb79fef03 41
kevman 0:38ceb79fef03 42 /** \brief Initialize the PHY
kevman 0:38ceb79fef03 43 *
kevman 0:38ceb79fef03 44 * This function initializes the PHY. It will block until complete.
kevman 0:38ceb79fef03 45 * This function is called as part of the EMAC driver
kevman 0:38ceb79fef03 46 * initialization. Configuration of the PHY at startup is
kevman 0:38ceb79fef03 47 * controlled by setting up configuration defines in lpc_phy.h.
kevman 0:38ceb79fef03 48 *
kevman 0:38ceb79fef03 49 * \param[in] lpc17_emac LPC17 EMAC
kevman 0:38ceb79fef03 50 * \param[in] rmii If set, configures the PHY for RMII mode
kevman 0:38ceb79fef03 51 * \return ERR_OK if the setup was successful, otherwise ERR_TIMEOUT
kevman 0:38ceb79fef03 52 */
kevman 0:38ceb79fef03 53 bool lpc_phy_init(LPC17_EMAC *lpc17_emac, int rmii);
kevman 0:38ceb79fef03 54
kevman 0:38ceb79fef03 55 /** \brief Write a value via the MII link (non-blocking)
kevman 0:38ceb79fef03 56 *
kevman 0:38ceb79fef03 57 * This function will write a value on the MII link interface to a PHY
kevman 0:38ceb79fef03 58 * or a connected device. The function will return immediately without
kevman 0:38ceb79fef03 59 * a status. Status needs to be polled later to determine if the write
kevman 0:38ceb79fef03 60 * was successful.
kevman 0:38ceb79fef03 61 *
kevman 0:38ceb79fef03 62 * \param[in] PhyReg PHY register to write to
kevman 0:38ceb79fef03 63 * \param[in] Value Value to write
kevman 0:38ceb79fef03 64 */
kevman 0:38ceb79fef03 65 void lpc_mii_write_noblock(uint32_t PhyReg, uint32_t Value);
kevman 0:38ceb79fef03 66
kevman 0:38ceb79fef03 67 /** \brief Write a value via the MII link (blocking)
kevman 0:38ceb79fef03 68 *
kevman 0:38ceb79fef03 69 * This function will write a value on the MII link interface to a PHY
kevman 0:38ceb79fef03 70 * or a connected device. The function will block until complete.
kevman 0:38ceb79fef03 71 *
kevman 0:38ceb79fef03 72 * \param[in] PhyReg PHY register to write to
kevman 0:38ceb79fef03 73 * \param[in] Value Value to write
kevman 0:38ceb79fef03 74 * \returns 0 if the write was successful, otherwise !0
kevman 0:38ceb79fef03 75 */
kevman 0:38ceb79fef03 76 bool lpc_mii_write(uint32_t PhyReg, uint32_t Value);
kevman 0:38ceb79fef03 77
kevman 0:38ceb79fef03 78 /** \brief Reads current MII link busy status
kevman 0:38ceb79fef03 79 *
kevman 0:38ceb79fef03 80 * This function will return the current MII link busy status and is meant to
kevman 0:38ceb79fef03 81 * be used with non-blocking functions for monitor PHY status such as
kevman 0:38ceb79fef03 82 * connection state.
kevman 0:38ceb79fef03 83 *
kevman 0:38ceb79fef03 84 * \returns !0 if the MII link is busy, otherwise 0
kevman 0:38ceb79fef03 85 */
kevman 0:38ceb79fef03 86 uint32_t lpc_mii_is_busy(void);
kevman 0:38ceb79fef03 87
kevman 0:38ceb79fef03 88 /** \brief Starts a read operation via the MII link (non-blocking)
kevman 0:38ceb79fef03 89 *
kevman 0:38ceb79fef03 90 * This function returns the current value in the MII data register. It is
kevman 0:38ceb79fef03 91 * meant to be used with the non-blocking oeprations. This value should
kevman 0:38ceb79fef03 92 * only be read after a non-block read command has been issued and the
kevman 0:38ceb79fef03 93 * MII status has been determined to be good.
kevman 0:38ceb79fef03 94 *
kevman 0:38ceb79fef03 95 * \returns The current value in the MII value register
kevman 0:38ceb79fef03 96 */
kevman 0:38ceb79fef03 97 uint32_t lpc_mii_read_data(void);
kevman 0:38ceb79fef03 98
kevman 0:38ceb79fef03 99 /** \brief Starts a read operation via the MII link (non-blocking)
kevman 0:38ceb79fef03 100 *
kevman 0:38ceb79fef03 101 * This function will start a read operation on the MII link interface
kevman 0:38ceb79fef03 102 * from a PHY or a connected device. The function will not block and
kevman 0:38ceb79fef03 103 * the status mist be polled until complete. Once complete, the data
kevman 0:38ceb79fef03 104 * can be read.
kevman 0:38ceb79fef03 105 *
kevman 0:38ceb79fef03 106 * \param[in] PhyReg PHY register to read from
kevman 0:38ceb79fef03 107 * \param[in] data Pointer to where to save data read via MII
kevman 0:38ceb79fef03 108 * \returns 0 if the read was successful, otherwise !0
kevman 0:38ceb79fef03 109 *
kevman 0:38ceb79fef03 110 */
kevman 0:38ceb79fef03 111 bool lpc_mii_read(uint32_t PhyReg, uint32_t *data);
kevman 0:38ceb79fef03 112
kevman 0:38ceb79fef03 113 /** \brief Read a value via the MII link (blocking)
kevman 0:38ceb79fef03 114 *
kevman 0:38ceb79fef03 115 * This function will read a value on the MII link interface from a PHY
kevman 0:38ceb79fef03 116 * or a connected device. The function will block until complete.
kevman 0:38ceb79fef03 117 *
kevman 0:38ceb79fef03 118 * \param[in] PhyReg PHY register to read from
kevman 0:38ceb79fef03 119 */
kevman 0:38ceb79fef03 120 void lpc_mii_read_noblock(uint32_t PhyReg);
kevman 0:38ceb79fef03 121
kevman 0:38ceb79fef03 122 /**
kevman 0:38ceb79fef03 123 * This function provides a method for the PHY to setup the EMAC
kevman 0:38ceb79fef03 124 * for the PHY negotiated duplex mode.
kevman 0:38ceb79fef03 125 *
kevman 0:38ceb79fef03 126 * @param[in] full_duplex 0 = half duplex, 1 = full duplex
kevman 0:38ceb79fef03 127 */
kevman 0:38ceb79fef03 128 void lpc_emac_set_duplex(int full_duplex);
kevman 0:38ceb79fef03 129
kevman 0:38ceb79fef03 130 /**
kevman 0:38ceb79fef03 131 * This function provides a method for the PHY to setup the EMAC
kevman 0:38ceb79fef03 132 * for the PHY negotiated bit rate.
kevman 0:38ceb79fef03 133 *
kevman 0:38ceb79fef03 134 * @param[in] mbs_100 0 = 10mbs mode, 1 = 100mbs mode
kevman 0:38ceb79fef03 135 */
kevman 0:38ceb79fef03 136 void lpc_emac_set_speed(int mbs_100);
kevman 0:38ceb79fef03 137
kevman 0:38ceb79fef03 138 #endif /* __LPC_PHY_H_ */
kevman 0:38ceb79fef03 139
kevman 0:38ceb79fef03 140 /* --------------------------------- End Of File ------------------------------ */