The official Mbed 2 C/C++ SDK provides the software platform and libraries to build your applications.

Dependents:   hello SerialTestv11 SerialTestv12 Sierpinski ... more

mbed 2

This is the mbed 2 library. If you'd like to learn about Mbed OS please see the mbed-os docs.

Committer:
AnnaBridge
Date:
Wed Feb 20 20:53:29 2019 +0000
Revision:
172:65be27845400
Parent:
171:3a7713b1edbc
mbed library release version 165

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Anna Bridge 160:5571c4ff569f 1 /*
AnnaBridge 163:e59c8e839560 2 * The Clear BSD License
Anna Bridge 160:5571c4ff569f 3 * Copyright (c) 2016, Freescale Semiconductor, Inc.
Anna Bridge 160:5571c4ff569f 4 * Copyright 2016-2017 NXP
AnnaBridge 163:e59c8e839560 5 * All rights reserved.
Anna Bridge 160:5571c4ff569f 6 *
Anna Bridge 160:5571c4ff569f 7 * Redistribution and use in source and binary forms, with or without modification,
AnnaBridge 163:e59c8e839560 8 * are permitted (subject to the limitations in the disclaimer below) provided
AnnaBridge 163:e59c8e839560 9 * that the following conditions are met:
Anna Bridge 160:5571c4ff569f 10 *
Anna Bridge 160:5571c4ff569f 11 * o Redistributions of source code must retain the above copyright notice, this list
Anna Bridge 160:5571c4ff569f 12 * of conditions and the following disclaimer.
Anna Bridge 160:5571c4ff569f 13 *
Anna Bridge 160:5571c4ff569f 14 * o Redistributions in binary form must reproduce the above copyright notice, this
Anna Bridge 160:5571c4ff569f 15 * list of conditions and the following disclaimer in the documentation and/or
Anna Bridge 160:5571c4ff569f 16 * other materials provided with the distribution.
Anna Bridge 160:5571c4ff569f 17 *
Anna Bridge 160:5571c4ff569f 18 * o Neither the name of the copyright holder nor the names of its
Anna Bridge 160:5571c4ff569f 19 * contributors may be used to endorse or promote products derived from this
Anna Bridge 160:5571c4ff569f 20 * software without specific prior written permission.
Anna Bridge 160:5571c4ff569f 21 *
AnnaBridge 163:e59c8e839560 22 * NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED BY THIS LICENSE.
Anna Bridge 160:5571c4ff569f 23 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
Anna Bridge 160:5571c4ff569f 24 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
Anna Bridge 160:5571c4ff569f 25 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
Anna Bridge 160:5571c4ff569f 26 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
Anna Bridge 160:5571c4ff569f 27 * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
Anna Bridge 160:5571c4ff569f 28 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
Anna Bridge 160:5571c4ff569f 29 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
Anna Bridge 160:5571c4ff569f 30 * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
Anna Bridge 160:5571c4ff569f 31 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
Anna Bridge 160:5571c4ff569f 32 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
Anna Bridge 160:5571c4ff569f 33 */
Anna Bridge 160:5571c4ff569f 34 #ifndef _FSL_PHY_H_
Anna Bridge 160:5571c4ff569f 35 #define _FSL_PHY_H_
Anna Bridge 160:5571c4ff569f 36
Anna Bridge 160:5571c4ff569f 37 #include "fsl_enet.h"
Anna Bridge 160:5571c4ff569f 38
Anna Bridge 160:5571c4ff569f 39 /*!
Anna Bridge 160:5571c4ff569f 40 * @addtogroup phy_driver
Anna Bridge 160:5571c4ff569f 41 * @{
Anna Bridge 160:5571c4ff569f 42 */
Anna Bridge 160:5571c4ff569f 43
Anna Bridge 160:5571c4ff569f 44 /*******************************************************************************
Anna Bridge 160:5571c4ff569f 45 * Definitions
Anna Bridge 160:5571c4ff569f 46 ******************************************************************************/
Anna Bridge 160:5571c4ff569f 47
Anna Bridge 160:5571c4ff569f 48 /*! @brief PHY driver version */
Anna Bridge 160:5571c4ff569f 49 #define FSL_PHY_DRIVER_VERSION (MAKE_VERSION(2, 0, 0)) /*!< Version 2.0.0. */
Anna Bridge 160:5571c4ff569f 50
Anna Bridge 160:5571c4ff569f 51 /*! @brief Defines the PHY registers. */
Anna Bridge 160:5571c4ff569f 52 #define PHY_BASICCONTROL_REG 0x00U /*!< The PHY basic control register. */
Anna Bridge 160:5571c4ff569f 53 #define PHY_BASICSTATUS_REG 0x01U /*!< The PHY basic status register. */
Anna Bridge 160:5571c4ff569f 54 #define PHY_ID1_REG 0x02U /*!< The PHY ID one register. */
Anna Bridge 160:5571c4ff569f 55 #define PHY_ID2_REG 0x03U /*!< The PHY ID two register. */
Anna Bridge 160:5571c4ff569f 56 #define PHY_AUTONEG_ADVERTISE_REG 0x04U /*!< The PHY auto-negotiate advertise register. */
Anna Bridge 160:5571c4ff569f 57 #define PHY_SEPCIAL_CONTROL_REG 0x1FU /*!< The PHY control two register. */
Anna Bridge 160:5571c4ff569f 58
Anna Bridge 160:5571c4ff569f 59 #define PHY_CONTROL_ID1 0x07U /*!< The PHY ID1*/
Anna Bridge 160:5571c4ff569f 60
Anna Bridge 160:5571c4ff569f 61 /*! @brief Defines the mask flag in basic control register. */
Anna Bridge 160:5571c4ff569f 62 #define PHY_BCTL_DUPLEX_MASK 0x0100U /*!< The PHY duplex bit mask. */
Anna Bridge 160:5571c4ff569f 63 #define PHY_BCTL_RESTART_AUTONEG_MASK 0x0200U /*!< The PHY restart auto negotiation mask. */
Anna Bridge 160:5571c4ff569f 64 #define PHY_BCTL_AUTONEG_MASK 0x1000U /*!< The PHY auto negotiation bit mask. */
Anna Bridge 160:5571c4ff569f 65 #define PHY_BCTL_SPEED_MASK 0x2000U /*!< The PHY speed bit mask. */
Anna Bridge 160:5571c4ff569f 66 #define PHY_BCTL_LOOP_MASK 0x4000U /*!< The PHY loop bit mask. */
Anna Bridge 160:5571c4ff569f 67 #define PHY_BCTL_RESET_MASK 0x8000U /*!< The PHY reset bit mask. */
Anna Bridge 160:5571c4ff569f 68
Anna Bridge 160:5571c4ff569f 69 /*!@brief Defines the mask flag of operation mode in special control register*/
Anna Bridge 160:5571c4ff569f 70 #define PHY_SPECIALCTL_AUTONEGDONE_MASK 0x1000U /*!< The PHY auto-negotiation complete mask. */
Anna Bridge 160:5571c4ff569f 71 #define PHY_SPECIALCTL_DUPLEX_MASK 0x0010U /*!< The PHY duplex mask. */
Anna Bridge 160:5571c4ff569f 72 #define PHY_SPECIALCTL_100SPEED_MASK 0x0008U /*!< The PHY speed mask. */
Anna Bridge 160:5571c4ff569f 73 #define PHY_SPECIALCTL_10SPEED_MASK 0x0004U /*!< The PHY speed mask. */
Anna Bridge 160:5571c4ff569f 74 #define PHY_SPECIALCTL_SPEEDUPLX_MASK 0x001cU /*!< The PHY speed and duplex mask. */
Anna Bridge 160:5571c4ff569f 75
Anna Bridge 160:5571c4ff569f 76 /*! @brief Defines the mask flag in basic status register. */
Anna Bridge 160:5571c4ff569f 77 #define PHY_BSTATUS_LINKSTATUS_MASK 0x0004U /*!< The PHY link status mask. */
Anna Bridge 160:5571c4ff569f 78
Anna Bridge 160:5571c4ff569f 79 /*! @brief Defines the mask flag in PHY auto-negotiation advertise register. */
Anna Bridge 160:5571c4ff569f 80 #define PHY_ALL_CAPABLE_MASK 0x1e0U
Anna Bridge 160:5571c4ff569f 81
Anna Bridge 160:5571c4ff569f 82 /*! @brief Defines the PHY status. */
Anna Bridge 160:5571c4ff569f 83 enum _phy_status
Anna Bridge 160:5571c4ff569f 84 {
Anna Bridge 160:5571c4ff569f 85 kStatus_PHY_SMIVisitTimeout = MAKE_STATUS(kStatusGroup_PHY, 0), /*!< ENET PHY SMI visit timeout. */
Anna Bridge 160:5571c4ff569f 86 };
Anna Bridge 160:5571c4ff569f 87
Anna Bridge 160:5571c4ff569f 88 /*! @brief Defines the PHY link speed. This is align with the speed for ENET MAC. */
Anna Bridge 160:5571c4ff569f 89 typedef enum _phy_speed {
Anna Bridge 160:5571c4ff569f 90 kPHY_Speed10M = 0U, /*!< ENET PHY 10M speed. */
Anna Bridge 160:5571c4ff569f 91 kPHY_Speed100M /*!< ENET PHY 100M speed. */
Anna Bridge 160:5571c4ff569f 92 } phy_speed_t;
Anna Bridge 160:5571c4ff569f 93
Anna Bridge 160:5571c4ff569f 94 /*! @brief Defines the PHY link duplex. */
Anna Bridge 160:5571c4ff569f 95 typedef enum _phy_duplex {
Anna Bridge 160:5571c4ff569f 96 kPHY_HalfDuplex = 0U, /*!< ENET PHY half duplex. */
Anna Bridge 160:5571c4ff569f 97 kPHY_FullDuplex /*!< ENET PHY full duplex. */
Anna Bridge 160:5571c4ff569f 98 } phy_duplex_t;
Anna Bridge 160:5571c4ff569f 99
Anna Bridge 160:5571c4ff569f 100 /*******************************************************************************
Anna Bridge 160:5571c4ff569f 101 * API
Anna Bridge 160:5571c4ff569f 102 ******************************************************************************/
Anna Bridge 160:5571c4ff569f 103
Anna Bridge 160:5571c4ff569f 104 #if defined(__cplusplus)
Anna Bridge 160:5571c4ff569f 105 extern "C" {
Anna Bridge 160:5571c4ff569f 106 #endif
Anna Bridge 160:5571c4ff569f 107
Anna Bridge 160:5571c4ff569f 108 /*!
Anna Bridge 160:5571c4ff569f 109 * @name PHY Driver
Anna Bridge 160:5571c4ff569f 110 * @{
Anna Bridge 160:5571c4ff569f 111 */
Anna Bridge 160:5571c4ff569f 112
Anna Bridge 160:5571c4ff569f 113 /*!
Anna Bridge 160:5571c4ff569f 114 * @brief Initializes PHY.
Anna Bridge 160:5571c4ff569f 115 *
Anna Bridge 160:5571c4ff569f 116 * This function initialize the SMI interface and initialize PHY.
Anna Bridge 160:5571c4ff569f 117 * The SMI is the MII management interface between PHY and MAC, which should be
AnnaBridge 163:e59c8e839560 118 * firstly initialized before any other operation for PHY. The PHY initialize with auto-negotiation.
Anna Bridge 160:5571c4ff569f 119 *
Anna Bridge 160:5571c4ff569f 120 * @param base ENET peripheral base address.
Anna Bridge 160:5571c4ff569f 121 * @param phyAddr The PHY address.
Anna Bridge 160:5571c4ff569f 122 * @param srcClock_Hz The module clock frequency - system clock for MII management interface - SMI.
Anna Bridge 160:5571c4ff569f 123 * @retval kStatus_Success PHY initialize success
Anna Bridge 160:5571c4ff569f 124 * @retval kStatus_Fail PHY initialize fail
Anna Bridge 160:5571c4ff569f 125 */
Anna Bridge 160:5571c4ff569f 126 status_t PHY_Init(ENET_Type *base, uint32_t phyAddr, uint32_t srcClock_Hz);
Anna Bridge 160:5571c4ff569f 127
Anna Bridge 160:5571c4ff569f 128 /*!
Anna Bridge 160:5571c4ff569f 129 * @brief PHY Write function. This function write data over the SMI to
Anna Bridge 160:5571c4ff569f 130 * the specified PHY register. This function is called by all PHY interfaces.
Anna Bridge 160:5571c4ff569f 131 *
Anna Bridge 160:5571c4ff569f 132 * @param base ENET peripheral base address.
Anna Bridge 160:5571c4ff569f 133 * @param phyAddr The PHY address.
Anna Bridge 160:5571c4ff569f 134 * @param phyReg The PHY register.
Anna Bridge 160:5571c4ff569f 135 * @param data The data written to the PHY register.
Anna Bridge 160:5571c4ff569f 136 * @retval kStatus_Success PHY write success
Anna Bridge 160:5571c4ff569f 137 * @retval kStatus_PHY_SMIVisitTimeout PHY SMI visit time out
Anna Bridge 160:5571c4ff569f 138 */
Anna Bridge 160:5571c4ff569f 139 status_t PHY_Write(ENET_Type *base, uint32_t phyAddr, uint32_t phyReg, uint32_t data);
Anna Bridge 160:5571c4ff569f 140
Anna Bridge 160:5571c4ff569f 141 /*!
Anna Bridge 160:5571c4ff569f 142 * @brief PHY Read function. This interface read data over the SMI from the
Anna Bridge 160:5571c4ff569f 143 * specified PHY register. This function is called by all PHY interfaces.
Anna Bridge 160:5571c4ff569f 144 *
Anna Bridge 160:5571c4ff569f 145 * @param base ENET peripheral base address.
Anna Bridge 160:5571c4ff569f 146 * @param phyAddr The PHY address.
Anna Bridge 160:5571c4ff569f 147 * @param phyReg The PHY register.
Anna Bridge 160:5571c4ff569f 148 * @param dataPtr The address to store the data read from the PHY register.
Anna Bridge 160:5571c4ff569f 149 * @retval kStatus_Success PHY read success
Anna Bridge 160:5571c4ff569f 150 * @retval kStatus_PHY_SMIVisitTimeout PHY SMI visit time out
Anna Bridge 160:5571c4ff569f 151 */
Anna Bridge 160:5571c4ff569f 152 status_t PHY_Read(ENET_Type *base, uint32_t phyAddr, uint32_t phyReg, uint32_t *dataPtr);
Anna Bridge 160:5571c4ff569f 153
Anna Bridge 160:5571c4ff569f 154 /*!
Anna Bridge 160:5571c4ff569f 155 * @brief Gets the PHY link status.
Anna Bridge 160:5571c4ff569f 156 *
Anna Bridge 160:5571c4ff569f 157 * @param base ENET peripheral base address.
Anna Bridge 160:5571c4ff569f 158 * @param phyAddr The PHY address.
Anna Bridge 160:5571c4ff569f 159 * @param status The link up or down status of the PHY.
Anna Bridge 160:5571c4ff569f 160 * - true the link is up.
Anna Bridge 160:5571c4ff569f 161 * - false the link is down.
Anna Bridge 160:5571c4ff569f 162 * @retval kStatus_Success PHY get link status success
Anna Bridge 160:5571c4ff569f 163 * @retval kStatus_PHY_SMIVisitTimeout PHY SMI visit time out
Anna Bridge 160:5571c4ff569f 164 */
Anna Bridge 160:5571c4ff569f 165 status_t PHY_GetLinkStatus(ENET_Type *base, uint32_t phyAddr, bool *status);
Anna Bridge 160:5571c4ff569f 166
Anna Bridge 160:5571c4ff569f 167 /*!
Anna Bridge 160:5571c4ff569f 168 * @brief Gets the PHY link speed and duplex.
Anna Bridge 160:5571c4ff569f 169 *
Anna Bridge 160:5571c4ff569f 170 * @param base ENET peripheral base address.
Anna Bridge 160:5571c4ff569f 171 * @param phyAddr The PHY address.
Anna Bridge 160:5571c4ff569f 172 * @param speed The address of PHY link speed.
Anna Bridge 160:5571c4ff569f 173 * @param duplex The link duplex of PHY.
Anna Bridge 160:5571c4ff569f 174 * @retval kStatus_Success PHY get link speed and duplex success
Anna Bridge 160:5571c4ff569f 175 * @retval kStatus_PHY_SMIVisitTimeout PHY SMI visit time out
Anna Bridge 160:5571c4ff569f 176 */
Anna Bridge 160:5571c4ff569f 177 status_t PHY_GetLinkSpeedDuplex(ENET_Type *base, uint32_t phyAddr, phy_speed_t *speed, phy_duplex_t *duplex);
Anna Bridge 160:5571c4ff569f 178
Anna Bridge 160:5571c4ff569f 179 /* @} */
Anna Bridge 160:5571c4ff569f 180
Anna Bridge 160:5571c4ff569f 181 #if defined(__cplusplus)
Anna Bridge 160:5571c4ff569f 182 }
Anna Bridge 160:5571c4ff569f 183 #endif
Anna Bridge 160:5571c4ff569f 184
Anna Bridge 160:5571c4ff569f 185 /*! @}*/
Anna Bridge 160:5571c4ff569f 186
Anna Bridge 160:5571c4ff569f 187 #endif /* _FSL_PHY_H_ */