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.
TARGET_LPC546XX/TOOLCHAIN_ARM_STD/fsl_enet.h@172:65be27845400, 2019-02-20 (annotated)
- 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?
User | Revision | Line number | New contents of line |
---|---|---|---|
AnnaBridge | 171:3a7713b1edbc | 1 | /* |
AnnaBridge | 171:3a7713b1edbc | 2 | * The Clear BSD License |
AnnaBridge | 171:3a7713b1edbc | 3 | * Copyright (c) 2016, Freescale Semiconductor, Inc. |
AnnaBridge | 171:3a7713b1edbc | 4 | * Copyright 2016-2017 NXP |
AnnaBridge | 171:3a7713b1edbc | 5 | * All rights reserved. |
AnnaBridge | 171:3a7713b1edbc | 6 | * |
AnnaBridge | 171:3a7713b1edbc | 7 | * Redistribution and use in source and binary forms, with or without modification, |
AnnaBridge | 171:3a7713b1edbc | 8 | * are permitted (subject to the limitations in the disclaimer below) provided |
AnnaBridge | 171:3a7713b1edbc | 9 | * that the following conditions are met: |
AnnaBridge | 171:3a7713b1edbc | 10 | * |
AnnaBridge | 171:3a7713b1edbc | 11 | * o Redistributions of source code must retain the above copyright notice, this list |
AnnaBridge | 171:3a7713b1edbc | 12 | * of conditions and the following disclaimer. |
AnnaBridge | 171:3a7713b1edbc | 13 | * |
AnnaBridge | 171:3a7713b1edbc | 14 | * o Redistributions in binary form must reproduce the above copyright notice, this |
AnnaBridge | 171:3a7713b1edbc | 15 | * list of conditions and the following disclaimer in the documentation and/or |
AnnaBridge | 171:3a7713b1edbc | 16 | * other materials provided with the distribution. |
AnnaBridge | 171:3a7713b1edbc | 17 | * |
AnnaBridge | 171:3a7713b1edbc | 18 | * o Neither the name of the copyright holder nor the names of its |
AnnaBridge | 171:3a7713b1edbc | 19 | * contributors may be used to endorse or promote products derived from this |
AnnaBridge | 171:3a7713b1edbc | 20 | * software without specific prior written permission. |
AnnaBridge | 171:3a7713b1edbc | 21 | * |
AnnaBridge | 171:3a7713b1edbc | 22 | * NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED BY THIS LICENSE. |
AnnaBridge | 171:3a7713b1edbc | 23 | * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND |
AnnaBridge | 171:3a7713b1edbc | 24 | * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED |
AnnaBridge | 171:3a7713b1edbc | 25 | * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE |
AnnaBridge | 171:3a7713b1edbc | 26 | * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR |
AnnaBridge | 171:3a7713b1edbc | 27 | * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES |
AnnaBridge | 171:3a7713b1edbc | 28 | * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; |
AnnaBridge | 171:3a7713b1edbc | 29 | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON |
AnnaBridge | 171:3a7713b1edbc | 30 | * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
AnnaBridge | 171:3a7713b1edbc | 31 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS |
AnnaBridge | 171:3a7713b1edbc | 32 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
AnnaBridge | 171:3a7713b1edbc | 33 | */ |
AnnaBridge | 171:3a7713b1edbc | 34 | #ifndef _FSL_ENET_H_ |
AnnaBridge | 171:3a7713b1edbc | 35 | #define _FSL_ENET_H_ |
AnnaBridge | 171:3a7713b1edbc | 36 | |
AnnaBridge | 171:3a7713b1edbc | 37 | #include "fsl_common.h" |
AnnaBridge | 171:3a7713b1edbc | 38 | |
AnnaBridge | 171:3a7713b1edbc | 39 | /*! |
AnnaBridge | 171:3a7713b1edbc | 40 | * @addtogroup lpc_enet |
AnnaBridge | 171:3a7713b1edbc | 41 | * @{ |
AnnaBridge | 171:3a7713b1edbc | 42 | */ |
AnnaBridge | 171:3a7713b1edbc | 43 | |
AnnaBridge | 171:3a7713b1edbc | 44 | /******************************************************************************* |
AnnaBridge | 171:3a7713b1edbc | 45 | * Definitions |
AnnaBridge | 171:3a7713b1edbc | 46 | ******************************************************************************/ |
AnnaBridge | 171:3a7713b1edbc | 47 | |
AnnaBridge | 171:3a7713b1edbc | 48 | /*! @name Driver version */ |
AnnaBridge | 171:3a7713b1edbc | 49 | /*@{*/ |
AnnaBridge | 171:3a7713b1edbc | 50 | /*! @brief Defines the driver version. */ |
AnnaBridge | 171:3a7713b1edbc | 51 | #define FSL_ENET_DRIVER_VERSION (MAKE_VERSION(2, 0, 0)) /*!< Version 2.0.0. */ |
AnnaBridge | 171:3a7713b1edbc | 52 | /*@}*/ |
AnnaBridge | 171:3a7713b1edbc | 53 | |
AnnaBridge | 171:3a7713b1edbc | 54 | /*! @name Control and status region bit masks of the receive buffer descriptor. */ |
AnnaBridge | 171:3a7713b1edbc | 55 | /*@{*/ |
AnnaBridge | 171:3a7713b1edbc | 56 | /*! @brief Defines for read format. */ |
AnnaBridge | 171:3a7713b1edbc | 57 | #define ENET_RXDESCRIP_RD_BUFF1VALID_MASK (1U << 24) /*!< Buffer1 address valid. */ |
AnnaBridge | 171:3a7713b1edbc | 58 | #define ENET_RXDESCRIP_RD_BUFF2VALID_MASK (1U << 25) /*!< Buffer2 address valid. */ |
AnnaBridge | 171:3a7713b1edbc | 59 | #define ENET_RXDESCRIP_RD_IOC_MASK (1U << 30) /*!< Interrupt enable on complete. */ |
AnnaBridge | 171:3a7713b1edbc | 60 | #define ENET_RXDESCRIP_RD_OWN_MASK (1U << 31) /*!< Own bit. */ |
AnnaBridge | 171:3a7713b1edbc | 61 | |
AnnaBridge | 171:3a7713b1edbc | 62 | /*! @brief Defines for write back format. */ |
AnnaBridge | 171:3a7713b1edbc | 63 | #define ENET_RXDESCRIP_WR_ERR_MASK ((1U << 3) | (1U << 7)) |
AnnaBridge | 171:3a7713b1edbc | 64 | #define ENET_RXDESCRIP_WR_PYLOAD_MASK (0x7U) |
AnnaBridge | 171:3a7713b1edbc | 65 | #define ENET_RXDESCRIP_WR_PTPMSGTYPE_MASK (0xF00U) |
AnnaBridge | 171:3a7713b1edbc | 66 | #define ENET_RXDESCRIP_WR_PTPTYPE_MASK (1U << 12) |
AnnaBridge | 171:3a7713b1edbc | 67 | #define ENET_RXDESCRIP_WR_PTPVERSION_MASK (1U << 13) |
AnnaBridge | 171:3a7713b1edbc | 68 | #define ENET_RXDESCRIP_WR_PTPTSA_MASK (1U << 14) |
AnnaBridge | 171:3a7713b1edbc | 69 | #define ENET_RXDESCRIP_WR_PACKETLEN_MASK (0x7FFFU) |
AnnaBridge | 171:3a7713b1edbc | 70 | #define ENET_RXDESCRIP_WR_ERRSUM_MASK (1U << 15) |
AnnaBridge | 171:3a7713b1edbc | 71 | #define ENET_RXDESCRIP_WR_TYPE_MASK (0x30000U) |
AnnaBridge | 171:3a7713b1edbc | 72 | #define ENET_RXDESCRIP_WR_DE_MASK (1U << 19) |
AnnaBridge | 171:3a7713b1edbc | 73 | #define ENET_RXDESCRIP_WR_RE_MASK (1U << 20) |
AnnaBridge | 171:3a7713b1edbc | 74 | #define ENET_RXDESCRIP_WR_OE_MASK (1U << 21) |
AnnaBridge | 171:3a7713b1edbc | 75 | #define ENET_RXDESCRIP_WR_RS0V_MASK (1U << 25) |
AnnaBridge | 171:3a7713b1edbc | 76 | #define ENET_RXDESCRIP_WR_RS1V_MASK (1U << 26) |
AnnaBridge | 171:3a7713b1edbc | 77 | #define ENET_RXDESCRIP_WR_RS2V_MASK (1U << 27) |
AnnaBridge | 171:3a7713b1edbc | 78 | #define ENET_RXDESCRIP_WR_LD_MASK (1U << 28) |
AnnaBridge | 171:3a7713b1edbc | 79 | #define ENET_RXDESCRIP_WR_FD_MASK (1U << 29) |
AnnaBridge | 171:3a7713b1edbc | 80 | #define ENET_RXDESCRIP_WR_CTXT_MASK (1U << 30) |
AnnaBridge | 171:3a7713b1edbc | 81 | #define ENET_RXDESCRIP_WR_OWN_MASK (1U << 31) |
AnnaBridge | 171:3a7713b1edbc | 82 | /*@}*/ |
AnnaBridge | 171:3a7713b1edbc | 83 | |
AnnaBridge | 171:3a7713b1edbc | 84 | /*! @name Control and status bit masks of the transmit buffer descriptor. */ |
AnnaBridge | 171:3a7713b1edbc | 85 | /*@{*/ |
AnnaBridge | 171:3a7713b1edbc | 86 | /*! @brief Defines for read format. */ |
AnnaBridge | 171:3a7713b1edbc | 87 | #define ENET_TXDESCRIP_RD_BL1_MASK (0x3fffU) |
AnnaBridge | 171:3a7713b1edbc | 88 | #define ENET_TXDESCRIP_RD_BL2_MASK (ENET_TXDESCRIP_RD_BL1_MASK << 16) |
AnnaBridge | 171:3a7713b1edbc | 89 | #define ENET_TXDESCRIP_RD_BL1(n) ((uint32_t)(n) & ENET_TXDESCRIP_RD_BL1_MASK) |
AnnaBridge | 171:3a7713b1edbc | 90 | #define ENET_TXDESCRIP_RD_BL2(n) (((uint32_t)(n) & ENET_TXDESCRIP_RD_BL1_MASK) << 16) |
AnnaBridge | 171:3a7713b1edbc | 91 | #define ENET_TXDESCRIP_RD_TTSE_MASK (1U << 30) |
AnnaBridge | 171:3a7713b1edbc | 92 | #define ENET_TXDESCRIP_RD_IOC_MASK (1U << 31) |
AnnaBridge | 171:3a7713b1edbc | 93 | |
AnnaBridge | 171:3a7713b1edbc | 94 | #define ENET_TXDESCRIP_RD_FL_MASK (0x7FFFU) |
AnnaBridge | 171:3a7713b1edbc | 95 | #define ENET_TXDESCRIP_RD_FL(n) ((uint32_t)(n) & ENET_TXDESCRIP_RD_FL_MASK) |
AnnaBridge | 171:3a7713b1edbc | 96 | #define ENET_TXDESCRIP_RD_CIC(n) (((uint32_t)(n) & 0x3) << 16) |
AnnaBridge | 171:3a7713b1edbc | 97 | #define ENET_TXDESCRIP_RD_TSE_MASK (1U << 18) |
AnnaBridge | 171:3a7713b1edbc | 98 | #define ENET_TXDESCRIP_RD_SLOT(n) (((uint32_t)(n) & 0x0f) << 19) |
AnnaBridge | 171:3a7713b1edbc | 99 | #define ENET_TXDESCRIP_RD_SAIC(n) (((uint32_t)(n) & 0x07) << 23) |
AnnaBridge | 171:3a7713b1edbc | 100 | #define ENET_TXDESCRIP_RD_CPC(n) (((uint32_t)(n) & 0x03) << 26) |
AnnaBridge | 171:3a7713b1edbc | 101 | #define ENET_TXDESCRIP_RD_LDFD(n) (((uint32_t)(n) & 0x03) << 28) |
AnnaBridge | 171:3a7713b1edbc | 102 | #define ENET_TXDESCRIP_RD_LD_MASK (1U << 28) |
AnnaBridge | 171:3a7713b1edbc | 103 | #define ENET_TXDESCRIP_RD_FD_MASK (1U << 29) |
AnnaBridge | 171:3a7713b1edbc | 104 | #define ENET_TXDESCRIP_RD_CTXT_MASK (1U << 30) |
AnnaBridge | 171:3a7713b1edbc | 105 | #define ENET_TXDESCRIP_RD_OWN_MASK (1UL << 31) |
AnnaBridge | 171:3a7713b1edbc | 106 | |
AnnaBridge | 171:3a7713b1edbc | 107 | /*! @brief Defines for write back format. */ |
AnnaBridge | 171:3a7713b1edbc | 108 | #define ENET_TXDESCRIP_WB_TTSS_MASK (1UL << 17) |
AnnaBridge | 171:3a7713b1edbc | 109 | /*@}*/ |
AnnaBridge | 171:3a7713b1edbc | 110 | |
AnnaBridge | 171:3a7713b1edbc | 111 | /*! @name Bit mask for interrupt enable type. */ |
AnnaBridge | 171:3a7713b1edbc | 112 | /*@{*/ |
AnnaBridge | 171:3a7713b1edbc | 113 | #define ENET_ABNORM_INT_MASK \ |
AnnaBridge | 171:3a7713b1edbc | 114 | (ENET_DMA_CH_DMA_CHX_INT_EN_TSE_MASK | ENET_DMA_CH_DMA_CHX_INT_EN_RBUE_MASK | \ |
AnnaBridge | 171:3a7713b1edbc | 115 | ENET_DMA_CH_DMA_CHX_INT_EN_RSE_MASK | ENET_DMA_CH_DMA_CHX_INT_EN_RWTE_MASK | \ |
AnnaBridge | 171:3a7713b1edbc | 116 | ENET_DMA_CH_DMA_CHX_INT_EN_FBEE_MASK | ENET_DMA_CH_DMA_CHX_INT_EN_ETIE_MASK) |
AnnaBridge | 171:3a7713b1edbc | 117 | #define ENET_NORM_INT_MASK \ |
AnnaBridge | 171:3a7713b1edbc | 118 | (ENET_DMA_CH_DMA_CHX_INT_EN_TIE_MASK | ENET_DMA_CH_DMA_CHX_INT_EN_TBUE_MASK | \ |
AnnaBridge | 171:3a7713b1edbc | 119 | ENET_DMA_CH_DMA_CHX_INT_EN_RIE_MASK | ENET_DMA_CH_DMA_CHX_INT_EN_ERIE_MASK) |
AnnaBridge | 171:3a7713b1edbc | 120 | /*@}*/ |
AnnaBridge | 171:3a7713b1edbc | 121 | |
AnnaBridge | 171:3a7713b1edbc | 122 | /*! @name Defines some Ethernet parameters. */ |
AnnaBridge | 171:3a7713b1edbc | 123 | /*@{*/ |
AnnaBridge | 171:3a7713b1edbc | 124 | |
AnnaBridge | 171:3a7713b1edbc | 125 | #define ENET_FRAME_MAX_FRAMELEN (1518U)/*!< Default maximum Ethernet frame size. */ |
AnnaBridge | 171:3a7713b1edbc | 126 | #define ENET_ADDR_ALIGNMENT (0x3U) /*!< Recommended ethernet buffer alignment. */ |
AnnaBridge | 171:3a7713b1edbc | 127 | #define ENET_BUFF_ALIGNMENT (4U) /*!< Receive buffer alignment shall be 4bytes-aligned. */ |
AnnaBridge | 171:3a7713b1edbc | 128 | #define ENET_RING_NUM_MAX (2U) /*!< The Maximum number of tx/rx descriptor rings. */ |
AnnaBridge | 171:3a7713b1edbc | 129 | #define ENET_MTL_RXFIFOSIZE (2048U) /*!< The rx fifo size. */ |
AnnaBridge | 171:3a7713b1edbc | 130 | #define ENET_MTL_TXFIFOSIZE (2048U) /*!< The tx fifo size. */ |
AnnaBridge | 171:3a7713b1edbc | 131 | #define ENET_MACINT_ENUM_OFFSET (16U) /*!< The offest for mac interrupt in enum type. */ |
AnnaBridge | 171:3a7713b1edbc | 132 | /*@}*/ |
AnnaBridge | 171:3a7713b1edbc | 133 | |
AnnaBridge | 171:3a7713b1edbc | 134 | #ifdef ENET_PTP1588FEATURE_REQUIRED |
AnnaBridge | 171:3a7713b1edbc | 135 | /* Define the buffer length to store the rx buffers address. |
AnnaBridge | 171:3a7713b1edbc | 136 | * because the context descriptor will be updated for store the time |
AnnaBridge | 171:3a7713b1edbc | 137 | * stamp for rx frame. so we need to reinit the descriptors. |
AnnaBridge | 171:3a7713b1edbc | 138 | * This macro shall at least equal to the rxRingLen |
AnnaBridge | 171:3a7713b1edbc | 139 | * assigned in the enet_buffer_config. That means if the rx descriptor |
AnnaBridge | 171:3a7713b1edbc | 140 | * length is larger than 5, please increse this macro. */ |
AnnaBridge | 171:3a7713b1edbc | 141 | #define ENET_RXBUFFSTORE_NUM (6) |
AnnaBridge | 171:3a7713b1edbc | 142 | #endif /* ENET_PTP1588FEATURE_REQUIRED */ |
AnnaBridge | 171:3a7713b1edbc | 143 | |
AnnaBridge | 171:3a7713b1edbc | 144 | /*! @brief Defines the status return codes for transaction. */ |
AnnaBridge | 171:3a7713b1edbc | 145 | enum _enet_status |
AnnaBridge | 171:3a7713b1edbc | 146 | { |
AnnaBridge | 171:3a7713b1edbc | 147 | kStatus_ENET_RxFrameError = MAKE_STATUS(kStatusGroup_ENET, 0U), /*!< A frame received but data error happen. */ |
AnnaBridge | 171:3a7713b1edbc | 148 | kStatus_ENET_RxFrameFail = MAKE_STATUS(kStatusGroup_ENET, 1U), /*!< Failed to receive a frame. */ |
AnnaBridge | 171:3a7713b1edbc | 149 | kStatus_ENET_RxFrameEmpty = MAKE_STATUS(kStatusGroup_ENET, 2U), /*!< No frame arrive. */ |
AnnaBridge | 171:3a7713b1edbc | 150 | kStatus_ENET_TxFrameBusy = MAKE_STATUS(kStatusGroup_ENET, 3U), /*!< Transmit descriptors are under process. */ |
AnnaBridge | 171:3a7713b1edbc | 151 | kStatus_ENET_TxFrameFail = MAKE_STATUS(kStatusGroup_ENET, 4U), /*!< Transmit frame fail. */ |
AnnaBridge | 171:3a7713b1edbc | 152 | kStatus_ENET_TxFrameOverLen = MAKE_STATUS(kStatusGroup_ENET, 5U) /*!< Transmit oversize. */ |
AnnaBridge | 171:3a7713b1edbc | 153 | #ifdef ENET_PTP1588FEATURE_REQUIRED |
AnnaBridge | 171:3a7713b1edbc | 154 | , |
AnnaBridge | 171:3a7713b1edbc | 155 | kStatus_ENET_PtpTsRingFull = MAKE_STATUS(kStatusGroup_ENET, 6U), /*!< Timestamp ring full. */ |
AnnaBridge | 171:3a7713b1edbc | 156 | kStatus_ENET_PtpTsRingEmpty = MAKE_STATUS(kStatusGroup_ENET, 7U) /*!< Timestamp ring empty. */ |
AnnaBridge | 171:3a7713b1edbc | 157 | #endif /* ENET_PTP1588FEATURE_REQUIRED */ |
AnnaBridge | 171:3a7713b1edbc | 158 | }; |
AnnaBridge | 171:3a7713b1edbc | 159 | |
AnnaBridge | 171:3a7713b1edbc | 160 | /*! @brief Defines the MII/RMII mode for data interface between the MAC and the PHY. */ |
AnnaBridge | 171:3a7713b1edbc | 161 | typedef enum _enet_mii_mode { |
AnnaBridge | 171:3a7713b1edbc | 162 | kENET_MiiMode = 0U, /*!< MII mode for data interface. */ |
AnnaBridge | 171:3a7713b1edbc | 163 | kENET_RmiiMode = 1U /*!< RMII mode for data interface. */ |
AnnaBridge | 171:3a7713b1edbc | 164 | } enet_mii_mode_t; |
AnnaBridge | 171:3a7713b1edbc | 165 | |
AnnaBridge | 171:3a7713b1edbc | 166 | /*! @brief Defines the 10/100 Mbps speed for the MII data interface. */ |
AnnaBridge | 171:3a7713b1edbc | 167 | typedef enum _enet_mii_speed { |
AnnaBridge | 171:3a7713b1edbc | 168 | kENET_MiiSpeed10M = 0U, /*!< Speed 10 Mbps. */ |
AnnaBridge | 171:3a7713b1edbc | 169 | kENET_MiiSpeed100M = 1U, /*!< Speed 100 Mbps. */ |
AnnaBridge | 171:3a7713b1edbc | 170 | } enet_mii_speed_t; |
AnnaBridge | 171:3a7713b1edbc | 171 | |
AnnaBridge | 171:3a7713b1edbc | 172 | /*! @brief Defines the half or full duplex for the MII data interface. */ |
AnnaBridge | 171:3a7713b1edbc | 173 | typedef enum _enet_mii_duplex { |
AnnaBridge | 171:3a7713b1edbc | 174 | kENET_MiiHalfDuplex = 0U, /*!< Half duplex mode. */ |
AnnaBridge | 171:3a7713b1edbc | 175 | kENET_MiiFullDuplex /*!< Full duplex mode. */ |
AnnaBridge | 171:3a7713b1edbc | 176 | } enet_mii_duplex_t; |
AnnaBridge | 171:3a7713b1edbc | 177 | |
AnnaBridge | 171:3a7713b1edbc | 178 | /*! @brief Define the MII opcode for normal MDIO_CLAUSES_22 Frame. */ |
AnnaBridge | 171:3a7713b1edbc | 179 | typedef enum _enet_mii_normal_opcode { |
AnnaBridge | 171:3a7713b1edbc | 180 | kENET_MiiWriteFrame = 1U, /*!< Write frame operation for a valid MII management frame. */ |
AnnaBridge | 171:3a7713b1edbc | 181 | kENET_MiiReadFrame = 3U /*!< Read frame operation for a valid MII management frame. */ |
AnnaBridge | 171:3a7713b1edbc | 182 | } enet_mii_normal_opcode; |
AnnaBridge | 171:3a7713b1edbc | 183 | |
AnnaBridge | 171:3a7713b1edbc | 184 | /*! @brief Define the DMA maximum transmit burst length. */ |
AnnaBridge | 171:3a7713b1edbc | 185 | typedef enum _enet_dma_burstlen { |
AnnaBridge | 171:3a7713b1edbc | 186 | kENET_BurstLen1 = 0x00001U, /*!< DMA burst length 1. */ |
AnnaBridge | 171:3a7713b1edbc | 187 | kENET_BurstLen2 = 0x00002U, /*!< DMA burst length 2. */ |
AnnaBridge | 171:3a7713b1edbc | 188 | kENET_BurstLen4 = 0x00004U, /*!< DMA burst length 4. */ |
AnnaBridge | 171:3a7713b1edbc | 189 | kENET_BurstLen8 = 0x00008U, /*!< DMA burst length 8. */ |
AnnaBridge | 171:3a7713b1edbc | 190 | kENET_BurstLen16 = 0x00010U, /*!< DMA burst length 16. */ |
AnnaBridge | 171:3a7713b1edbc | 191 | kENET_BurstLen32 = 0x00020U, /*!< DMA burst length 32. */ |
AnnaBridge | 171:3a7713b1edbc | 192 | kENET_BurstLen64 = 0x10008U, /*!< DMA burst length 64. eight times enabled. */ |
AnnaBridge | 171:3a7713b1edbc | 193 | kENET_BurstLen128 = 0x10010U, /*!< DMA burst length 128. eight times enabled. */ |
AnnaBridge | 171:3a7713b1edbc | 194 | kENET_BurstLen256 = 0x10020U, /*!< DMA burst length 256. eight times enabled. */ |
AnnaBridge | 171:3a7713b1edbc | 195 | } enet_dma_burstlen; |
AnnaBridge | 171:3a7713b1edbc | 196 | |
AnnaBridge | 171:3a7713b1edbc | 197 | /*! @brief Define the flag for the descriptor. */ |
AnnaBridge | 171:3a7713b1edbc | 198 | typedef enum _enet_desc_flag { |
AnnaBridge | 171:3a7713b1edbc | 199 | kENET_MiddleFlag = 0, /*!< It's a middle descriptor of the frame. */ |
AnnaBridge | 171:3a7713b1edbc | 200 | kENET_FirstFlagOnly, /*!< It's the first descriptor of the frame. */ |
AnnaBridge | 171:3a7713b1edbc | 201 | kENET_LastFlagOnly, /*!< It's the last descriptor of the frame. */ |
AnnaBridge | 171:3a7713b1edbc | 202 | kENET_FirstLastFlag /*!< It's the first and last descriptor of the frame. */ |
AnnaBridge | 171:3a7713b1edbc | 203 | } enet_desc_flag; |
AnnaBridge | 171:3a7713b1edbc | 204 | |
AnnaBridge | 171:3a7713b1edbc | 205 | /*! @brief Define the system time adjust operation control. */ |
AnnaBridge | 171:3a7713b1edbc | 206 | typedef enum _enet_systime_op { |
AnnaBridge | 171:3a7713b1edbc | 207 | kENET_SystimeAdd = 0U, /*!< System time add to. */ |
AnnaBridge | 171:3a7713b1edbc | 208 | kENET_SystimeSubtract = 1U /*!< System time subtract. */ |
AnnaBridge | 171:3a7713b1edbc | 209 | } enet_systime_op; |
AnnaBridge | 171:3a7713b1edbc | 210 | |
AnnaBridge | 171:3a7713b1edbc | 211 | /*! @brief Define the system time rollover control. */ |
AnnaBridge | 171:3a7713b1edbc | 212 | typedef enum _enet_ts_rollover_type { |
AnnaBridge | 171:3a7713b1edbc | 213 | kENET_BinaryRollover = 0, /*!< System time binary rollover.*/ |
AnnaBridge | 171:3a7713b1edbc | 214 | kENET_DigitalRollover = 1 /*!< System time digital rollover.*/ |
AnnaBridge | 171:3a7713b1edbc | 215 | } enet_ts_rollover_type; |
AnnaBridge | 171:3a7713b1edbc | 216 | |
AnnaBridge | 171:3a7713b1edbc | 217 | /*! @brief Defines some special configuration for ENET. |
AnnaBridge | 171:3a7713b1edbc | 218 | * |
AnnaBridge | 171:3a7713b1edbc | 219 | * These control flags are provided for special user requirements. |
AnnaBridge | 171:3a7713b1edbc | 220 | * Normally, these is no need to set this control flags for ENET initialization. |
AnnaBridge | 171:3a7713b1edbc | 221 | * But if you have some special requirements, set the flags to specialControl |
AnnaBridge | 171:3a7713b1edbc | 222 | * in the enet_config_t. |
AnnaBridge | 171:3a7713b1edbc | 223 | * @note "kENET_StoreAndForward" is recommended to be set when the |
AnnaBridge | 171:3a7713b1edbc | 224 | * ENET_PTP1588FEATURE_REQUIRED is defined or else the timestamp will be mess-up |
AnnaBridge | 171:3a7713b1edbc | 225 | * when the overflow happens. |
AnnaBridge | 171:3a7713b1edbc | 226 | */ |
AnnaBridge | 171:3a7713b1edbc | 227 | typedef enum _enet_special_config { |
AnnaBridge | 171:3a7713b1edbc | 228 | |
AnnaBridge | 171:3a7713b1edbc | 229 | /***********************DMA CONFGI**********************************************/ |
AnnaBridge | 171:3a7713b1edbc | 230 | kENET_DescDoubleBuffer = 0x0001U, /*!< The double buffer is used in the tx/rx descriptor. */ |
AnnaBridge | 171:3a7713b1edbc | 231 | /**************************MTL************************************/ |
AnnaBridge | 171:3a7713b1edbc | 232 | kENET_StoreAndForward = 0x0002U, /*!< The rx/tx store and forward enable. */ |
AnnaBridge | 171:3a7713b1edbc | 233 | /***********************MAC****************************************/ |
AnnaBridge | 171:3a7713b1edbc | 234 | kENET_PromiscuousEnable = 0x0004U, /*!< The promiscuous enabled. */ |
AnnaBridge | 171:3a7713b1edbc | 235 | kENET_FlowControlEnable = 0x0008U, /*!< The flow control enabled. */ |
AnnaBridge | 171:3a7713b1edbc | 236 | kENET_BroadCastRxDisable = 0x0010U, /*!< The broadcast disabled. */ |
AnnaBridge | 171:3a7713b1edbc | 237 | kENET_MulticastAllEnable = 0x0020U, /*!< All multicast are passed. */ |
AnnaBridge | 171:3a7713b1edbc | 238 | kENET_8023AS2KPacket = 0x0040U /*!< 8023as support for 2K packets. */ |
AnnaBridge | 171:3a7713b1edbc | 239 | } enet_special_config_t; |
AnnaBridge | 171:3a7713b1edbc | 240 | |
AnnaBridge | 171:3a7713b1edbc | 241 | /*! @brief List of DMA interrupts supported by the ENET interrupt. This |
AnnaBridge | 171:3a7713b1edbc | 242 | * enumeration uses one-bot encoding to allow a logical OR of multiple |
AnnaBridge | 171:3a7713b1edbc | 243 | * members. |
AnnaBridge | 171:3a7713b1edbc | 244 | */ |
AnnaBridge | 171:3a7713b1edbc | 245 | typedef enum _enet_dma_interrupt_enable { |
AnnaBridge | 171:3a7713b1edbc | 246 | kENET_DmaTx = ENET_DMA_CH_DMA_CHX_INT_EN_TIE_MASK, /*!< Tx interrupt. */ |
AnnaBridge | 171:3a7713b1edbc | 247 | kENET_DmaTxStop = ENET_DMA_CH_DMA_CHX_INT_EN_TSE_MASK, /*!< Tx stop interrupt. */ |
AnnaBridge | 171:3a7713b1edbc | 248 | kENET_DmaTxBuffUnavail = ENET_DMA_CH_DMA_CHX_INT_EN_TBUE_MASK, /*!< Tx buffer unavailable. */ |
AnnaBridge | 171:3a7713b1edbc | 249 | kENET_DmaRx = ENET_DMA_CH_DMA_CHX_INT_EN_RIE_MASK, /*!< Rx interrupt. */ |
AnnaBridge | 171:3a7713b1edbc | 250 | kENET_DmaRxBuffUnavail = ENET_DMA_CH_DMA_CHX_INT_EN_RBUE_MASK, /*!< Rx buffer unavailable. */ |
AnnaBridge | 171:3a7713b1edbc | 251 | kENET_DmaRxStop = ENET_DMA_CH_DMA_CHX_INT_EN_RSE_MASK, /*!< Rx stop. */ |
AnnaBridge | 171:3a7713b1edbc | 252 | kENET_DmaRxWatchdogTimeout = ENET_DMA_CH_DMA_CHX_INT_EN_RWTE_MASK, /*!< Rx watchdog timeout. */ |
AnnaBridge | 171:3a7713b1edbc | 253 | kENET_DmaEarlyTx = ENET_DMA_CH_DMA_CHX_INT_EN_ETIE_MASK, /*!< Early transmit. */ |
AnnaBridge | 171:3a7713b1edbc | 254 | kENET_DmaEarlyRx = ENET_DMA_CH_DMA_CHX_INT_EN_ERIE_MASK, /*!< Early receive. */ |
AnnaBridge | 171:3a7713b1edbc | 255 | kENET_DmaBusErr = ENET_DMA_CH_DMA_CHX_INT_EN_FBEE_MASK, /*!< Fatal bus error. */ |
AnnaBridge | 171:3a7713b1edbc | 256 | } enet_dma_interrupt_enable_t; |
AnnaBridge | 171:3a7713b1edbc | 257 | |
AnnaBridge | 171:3a7713b1edbc | 258 | /*! @brief List of mac interrupts supported by the ENET interrupt. This |
AnnaBridge | 171:3a7713b1edbc | 259 | * enumeration uses one-bot encoding to allow a logical OR of multiple |
AnnaBridge | 171:3a7713b1edbc | 260 | * members. |
AnnaBridge | 171:3a7713b1edbc | 261 | */ |
AnnaBridge | 171:3a7713b1edbc | 262 | typedef enum _enet_mac_interrupt_enable { |
AnnaBridge | 171:3a7713b1edbc | 263 | kENET_MacPmt = (ENET_MAC_INTR_EN_PMTIE_MASK << ENET_MACINT_ENUM_OFFSET), |
AnnaBridge | 171:3a7713b1edbc | 264 | kENET_MacTimestamp = (ENET_MAC_INTR_EN_TSIE_MASK << ENET_MACINT_ENUM_OFFSET), |
AnnaBridge | 171:3a7713b1edbc | 265 | } enet_mac_interrupt_enable_t; |
AnnaBridge | 171:3a7713b1edbc | 266 | |
AnnaBridge | 171:3a7713b1edbc | 267 | /*! @brief Defines the common interrupt event for callback use. */ |
AnnaBridge | 171:3a7713b1edbc | 268 | typedef enum _enet_event { |
AnnaBridge | 171:3a7713b1edbc | 269 | kENET_RxIntEvent, /*!< Receive interrupt event. */ |
AnnaBridge | 171:3a7713b1edbc | 270 | kENET_TxIntEvent, /*!< Transmit interrupt event. */ |
AnnaBridge | 171:3a7713b1edbc | 271 | kENET_WakeUpIntEvent, /*!< Wake up interrupt event. */ |
AnnaBridge | 171:3a7713b1edbc | 272 | kENET_TimeStampIntEvent, /*!< Time stamp interrupt event. */ |
AnnaBridge | 171:3a7713b1edbc | 273 | } enet_event_t; |
AnnaBridge | 171:3a7713b1edbc | 274 | |
AnnaBridge | 171:3a7713b1edbc | 275 | /*! @brief Define the DMA transmit arbitration for multi-queue. */ |
AnnaBridge | 171:3a7713b1edbc | 276 | typedef enum _enet_dma_tx_sche { |
AnnaBridge | 171:3a7713b1edbc | 277 | kENET_FixPri = 0, /*!< Fixed priority. channel 0 has lower priority than channel 1. */ |
AnnaBridge | 171:3a7713b1edbc | 278 | kENET_WeightStrPri, /*!< Weighted(burst length) strict priority. */ |
AnnaBridge | 171:3a7713b1edbc | 279 | kENET_WeightRoundRobin /*!< Weighted (weight factor) round robin. */ |
AnnaBridge | 171:3a7713b1edbc | 280 | } enet_dma_tx_sche; |
AnnaBridge | 171:3a7713b1edbc | 281 | |
AnnaBridge | 171:3a7713b1edbc | 282 | /*! @brief Define the MTL tx scheduling algorithm for multiple queues/rings. */ |
AnnaBridge | 171:3a7713b1edbc | 283 | typedef enum _enet_mtl_multiqueue_txsche { |
AnnaBridge | 171:3a7713b1edbc | 284 | kENET_txWeightRR = 0U, /*!< Tx weight round-robin. */ |
AnnaBridge | 171:3a7713b1edbc | 285 | kENET_txStrPrio = 3U, /*!< Tx strict priority. */ |
AnnaBridge | 171:3a7713b1edbc | 286 | } enet_mtl_multiqueue_txsche; |
AnnaBridge | 171:3a7713b1edbc | 287 | |
AnnaBridge | 171:3a7713b1edbc | 288 | /*! @brief Define the MTL rx scheduling algorithm for multiple queues/rings. */ |
AnnaBridge | 171:3a7713b1edbc | 289 | typedef enum _enet_mtl_multiqueue_rxsche { |
AnnaBridge | 171:3a7713b1edbc | 290 | kENET_rxStrPrio = 0U, /*!< Tx weight round-robin, rx strict priority. */ |
AnnaBridge | 171:3a7713b1edbc | 291 | kENET_rxWeightStrPrio, /*!< Tx strict priority, rx weight strict priority. */ |
AnnaBridge | 171:3a7713b1edbc | 292 | } enet_mtl_multiqueue_rxsche; |
AnnaBridge | 171:3a7713b1edbc | 293 | |
AnnaBridge | 171:3a7713b1edbc | 294 | /*! @brief Define the MTL rx queue and DMA channel mapping. */ |
AnnaBridge | 171:3a7713b1edbc | 295 | typedef enum _enet_mtl_rxqueuemap { |
AnnaBridge | 171:3a7713b1edbc | 296 | kENET_StaticDirctMap = 0x100U, /*!< The received fame in rx Qn(n = 0,1) direclty map to dma channel n. */ |
AnnaBridge | 171:3a7713b1edbc | 297 | kENET_DynamicMap = |
AnnaBridge | 171:3a7713b1edbc | 298 | 0x1010U, /*!< The received frame in rx Qn(n = 0,1) map to the dma channel m(m = 0,1) related with the same Mac. |
AnnaBridge | 171:3a7713b1edbc | 299 | */ |
AnnaBridge | 171:3a7713b1edbc | 300 | } enet_mtl_rxqueuemap; |
AnnaBridge | 171:3a7713b1edbc | 301 | |
AnnaBridge | 171:3a7713b1edbc | 302 | /*! @brief Defines the ENET PTP message related constant. */ |
AnnaBridge | 171:3a7713b1edbc | 303 | typedef enum _enet_ptp_event_type { |
AnnaBridge | 171:3a7713b1edbc | 304 | kENET_PtpEventMsgType = 3U, /*!< PTP event message type. */ |
AnnaBridge | 171:3a7713b1edbc | 305 | kENET_PtpSrcPortIdLen = 10U, /*!< PTP message sequence id length. */ |
AnnaBridge | 171:3a7713b1edbc | 306 | kENET_PtpEventPort = 319U, /*!< PTP event port number. */ |
AnnaBridge | 171:3a7713b1edbc | 307 | kENET_PtpGnrlPort = 320U /*!< PTP general port number. */ |
AnnaBridge | 171:3a7713b1edbc | 308 | } enet_ptp_event_type_t; |
AnnaBridge | 171:3a7713b1edbc | 309 | |
AnnaBridge | 171:3a7713b1edbc | 310 | /*! @brief Defines the receive descriptor structure |
AnnaBridge | 171:3a7713b1edbc | 311 | * has the read-format and write-back format structure. They both |
AnnaBridge | 171:3a7713b1edbc | 312 | * has the same size with different region definition. so |
AnnaBridge | 171:3a7713b1edbc | 313 | * we define the read-format region as the recive descriptor structure |
AnnaBridge | 171:3a7713b1edbc | 314 | * Use the read-format region mask bits in the descriptor initialization |
AnnaBridge | 171:3a7713b1edbc | 315 | * Use the write-back format region mask bits in the receive data process. |
AnnaBridge | 171:3a7713b1edbc | 316 | */ |
AnnaBridge | 171:3a7713b1edbc | 317 | typedef struct _enet_rx_bd_struct |
AnnaBridge | 171:3a7713b1edbc | 318 | { |
AnnaBridge | 171:3a7713b1edbc | 319 | __IO uint32_t buff1Addr; /*!< Buffer 1 address */ |
AnnaBridge | 171:3a7713b1edbc | 320 | __IO uint32_t reserved; /*!< Reserved */ |
AnnaBridge | 171:3a7713b1edbc | 321 | __IO uint32_t buff2Addr; /*!< Buffer 2 or next descriptor address */ |
AnnaBridge | 171:3a7713b1edbc | 322 | __IO uint32_t control; /*!< Buffer 1/2 byte counts and control */ |
AnnaBridge | 171:3a7713b1edbc | 323 | } enet_rx_bd_struct_t; |
AnnaBridge | 171:3a7713b1edbc | 324 | |
AnnaBridge | 171:3a7713b1edbc | 325 | /*! @brief Defines the transmit descriptor structure |
AnnaBridge | 171:3a7713b1edbc | 326 | * has the read-format and write-back format structure. They both |
AnnaBridge | 171:3a7713b1edbc | 327 | * has the same size with different region definition. so |
AnnaBridge | 171:3a7713b1edbc | 328 | * we define the read-format region as the transmit descriptor structure |
AnnaBridge | 171:3a7713b1edbc | 329 | * Use the read-format region mask bits in the descriptor initialization |
AnnaBridge | 171:3a7713b1edbc | 330 | * Use the write-back format region mask bits in the transmit data process. |
AnnaBridge | 171:3a7713b1edbc | 331 | */ |
AnnaBridge | 171:3a7713b1edbc | 332 | typedef struct _enet_tx_bd_struct |
AnnaBridge | 171:3a7713b1edbc | 333 | { |
AnnaBridge | 171:3a7713b1edbc | 334 | __IO uint32_t buff1Addr; /*!< Buffer 1 address */ |
AnnaBridge | 171:3a7713b1edbc | 335 | __IO uint32_t buff2Addr; /*!< Buffer 2 address */ |
AnnaBridge | 171:3a7713b1edbc | 336 | __IO uint32_t buffLen; /*!< Buffer 1/2 byte counts */ |
AnnaBridge | 171:3a7713b1edbc | 337 | __IO uint32_t controlStat; /*!< TDES control and status word */ |
AnnaBridge | 171:3a7713b1edbc | 338 | } enet_tx_bd_struct_t; |
AnnaBridge | 171:3a7713b1edbc | 339 | |
AnnaBridge | 171:3a7713b1edbc | 340 | #ifdef ENET_PTP1588FEATURE_REQUIRED |
AnnaBridge | 171:3a7713b1edbc | 341 | /*! @brief Defines the ENET PTP time stamp structure. */ |
AnnaBridge | 171:3a7713b1edbc | 342 | typedef struct _enet_ptp_time |
AnnaBridge | 171:3a7713b1edbc | 343 | { |
AnnaBridge | 171:3a7713b1edbc | 344 | uint64_t second; /*!< Second. */ |
AnnaBridge | 171:3a7713b1edbc | 345 | uint32_t nanosecond; /*!< Nanosecond. */ |
AnnaBridge | 171:3a7713b1edbc | 346 | } enet_ptp_time_t; |
AnnaBridge | 171:3a7713b1edbc | 347 | |
AnnaBridge | 171:3a7713b1edbc | 348 | /*! @brief Defines the structure for the ENET PTP message data and timestamp data.*/ |
AnnaBridge | 171:3a7713b1edbc | 349 | typedef struct _enet_ptp_time_data |
AnnaBridge | 171:3a7713b1edbc | 350 | { |
AnnaBridge | 171:3a7713b1edbc | 351 | uint8_t version; /*!< PTP version. */ |
AnnaBridge | 171:3a7713b1edbc | 352 | uint8_t sourcePortId[kENET_PtpSrcPortIdLen]; /*!< PTP source port ID. */ |
AnnaBridge | 171:3a7713b1edbc | 353 | uint16_t sequenceId; /*!< PTP sequence ID. */ |
AnnaBridge | 171:3a7713b1edbc | 354 | uint8_t messageType; /*!< PTP message type. */ |
AnnaBridge | 171:3a7713b1edbc | 355 | enet_ptp_time_t timeStamp; /*!< PTP timestamp. */ |
AnnaBridge | 171:3a7713b1edbc | 356 | } enet_ptp_time_data_t; |
AnnaBridge | 171:3a7713b1edbc | 357 | |
AnnaBridge | 171:3a7713b1edbc | 358 | /*! @brief Defines the ENET PTP ring buffer structure for the PTP message timestamp store.*/ |
AnnaBridge | 171:3a7713b1edbc | 359 | typedef struct _enet_ptp_time_data_ring |
AnnaBridge | 171:3a7713b1edbc | 360 | { |
AnnaBridge | 171:3a7713b1edbc | 361 | uint32_t front; /*!< The first index of the ring. */ |
AnnaBridge | 171:3a7713b1edbc | 362 | uint32_t end; /*!< The end index of the ring. */ |
AnnaBridge | 171:3a7713b1edbc | 363 | uint32_t size; /*!< The size of the ring. */ |
AnnaBridge | 171:3a7713b1edbc | 364 | enet_ptp_time_data_t *ptpTsData; /*!< PTP message data structure. */ |
AnnaBridge | 171:3a7713b1edbc | 365 | } enet_ptp_time_data_ring_t; |
AnnaBridge | 171:3a7713b1edbc | 366 | |
AnnaBridge | 171:3a7713b1edbc | 367 | /*! @brief Defines the ENET PTP configuration structure. */ |
AnnaBridge | 171:3a7713b1edbc | 368 | typedef struct _enet_ptp_config |
AnnaBridge | 171:3a7713b1edbc | 369 | { |
AnnaBridge | 171:3a7713b1edbc | 370 | bool fineUpdateEnable; /*!< Use the fine update. */ |
AnnaBridge | 171:3a7713b1edbc | 371 | bool ptp1588V2Enable; /*!< ptp 1588 version 2 is used. */ |
AnnaBridge | 171:3a7713b1edbc | 372 | enet_ts_rollover_type tsRollover; /*!< 1588 time nanosecond rollover. */ |
AnnaBridge | 171:3a7713b1edbc | 373 | } enet_ptp_config_t; |
AnnaBridge | 171:3a7713b1edbc | 374 | #endif /* ENET_PTP1588FEATURE_REQUIRED */ |
AnnaBridge | 171:3a7713b1edbc | 375 | |
AnnaBridge | 171:3a7713b1edbc | 376 | /*! @brief Defines the buffer descriptor configure structure. |
AnnaBridge | 171:3a7713b1edbc | 377 | * |
AnnaBridge | 171:3a7713b1edbc | 378 | * Notes: |
AnnaBridge | 171:3a7713b1edbc | 379 | * 1. The receive and transmit descriptor start address pointer and tail pointer must be word-aligned. |
AnnaBridge | 171:3a7713b1edbc | 380 | * 2. The recommended minimum tx/rx ring length is 4. |
AnnaBridge | 171:3a7713b1edbc | 381 | * 3. The tx/rx descriptor tail address shall be the address pointer to the address just after the end |
AnnaBridge | 171:3a7713b1edbc | 382 | * of the last last descriptor. because only the descriptors between the start address and the |
AnnaBridge | 171:3a7713b1edbc | 383 | * tail address will be used by DMA. |
AnnaBridge | 171:3a7713b1edbc | 384 | * 4. The decriptor address is the start address of all used contiguous memory. |
AnnaBridge | 171:3a7713b1edbc | 385 | * for example, the rxDescStartAddrAlign is the start address of rxRingLen contiguous descriptor memorise |
AnnaBridge | 171:3a7713b1edbc | 386 | * for rx descriptor ring 0. |
AnnaBridge | 171:3a7713b1edbc | 387 | * 5. The "*rxBufferstartAddr" is the first element of rxRingLen (2*rxRingLen for double buffers) |
AnnaBridge | 171:3a7713b1edbc | 388 | * rx buffers. It means the *rxBufferStartAddr is the rx buffer for the first descriptor |
AnnaBridge | 171:3a7713b1edbc | 389 | * the *rxBufferStartAddr + 1 is the rx buffer for the second descriptor or the rx buffer for |
AnnaBridge | 171:3a7713b1edbc | 390 | * the second buffer in the first descriptor. so please make sure the rxBufferStartAddr is the |
AnnaBridge | 171:3a7713b1edbc | 391 | * address of a rxRingLen or 2*rxRingLen array. |
AnnaBridge | 171:3a7713b1edbc | 392 | */ |
AnnaBridge | 171:3a7713b1edbc | 393 | typedef struct _enet_buffer_config |
AnnaBridge | 171:3a7713b1edbc | 394 | { |
AnnaBridge | 171:3a7713b1edbc | 395 | uint8_t rxRingLen; /*!< The length of receive buffer descriptor ring. */ |
AnnaBridge | 171:3a7713b1edbc | 396 | uint8_t txRingLen; /*!< The length of transmit buffer descriptor ring. */ |
AnnaBridge | 171:3a7713b1edbc | 397 | enet_tx_bd_struct_t *txDescStartAddrAlign; /*!< Aligned transmit descriptor start address. */ |
AnnaBridge | 171:3a7713b1edbc | 398 | enet_tx_bd_struct_t *txDescTailAddrAlign; /*!< Aligned transmit descriptor tail address. */ |
AnnaBridge | 171:3a7713b1edbc | 399 | enet_rx_bd_struct_t *rxDescStartAddrAlign; /*!< Aligned receive descriptor start address. */ |
AnnaBridge | 171:3a7713b1edbc | 400 | enet_rx_bd_struct_t *rxDescTailAddrAlign; /*!< Aligned receive descriptor tail address. */ |
AnnaBridge | 171:3a7713b1edbc | 401 | uint32_t *rxBufferStartAddr; /*!< Start address of the rx buffers. */ |
AnnaBridge | 171:3a7713b1edbc | 402 | uint32_t rxBuffSizeAlign; /*!< Aligned receive data buffer size. */ |
AnnaBridge | 171:3a7713b1edbc | 403 | #ifdef ENET_PTP1588FEATURE_REQUIRED |
AnnaBridge | 171:3a7713b1edbc | 404 | uint8_t ptpTsRxBuffNum; /*!< Receive 1588 timestamp buffer number*/ |
AnnaBridge | 171:3a7713b1edbc | 405 | uint8_t ptpTsTxBuffNum; /*!< Transmit 1588 timestamp buffer number*/ |
AnnaBridge | 171:3a7713b1edbc | 406 | enet_ptp_time_data_t *rxPtpTsData; /*!< The start address of 1588 receive timestamp buffers */ |
AnnaBridge | 171:3a7713b1edbc | 407 | enet_ptp_time_data_t *txPtpTsData; /*!< The start address of 1588 transmit timestamp buffers */ |
AnnaBridge | 171:3a7713b1edbc | 408 | #endif /* ENET_PTP1588FEATURE_REQUIRED */ |
AnnaBridge | 171:3a7713b1edbc | 409 | } enet_buffer_config_t; |
AnnaBridge | 171:3a7713b1edbc | 410 | |
AnnaBridge | 171:3a7713b1edbc | 411 | /*! @brief Defines the configuration when multi-queue is used. */ |
AnnaBridge | 171:3a7713b1edbc | 412 | typedef struct enet_multiqueue_config |
AnnaBridge | 171:3a7713b1edbc | 413 | { |
AnnaBridge | 171:3a7713b1edbc | 414 | /***********************DMA block*******************************/ |
AnnaBridge | 171:3a7713b1edbc | 415 | enet_dma_tx_sche dmaTxSche; /*!< Transmit arbitation. */ |
AnnaBridge | 171:3a7713b1edbc | 416 | enet_dma_burstlen burstLen; /*!< Burset len for the queue 1. */ |
AnnaBridge | 171:3a7713b1edbc | 417 | uint8_t txdmaChnWeight[ENET_RING_NUM_MAX]; /*!< Transmit channel weight. */ |
AnnaBridge | 171:3a7713b1edbc | 418 | /***********************MTL block*******************************/ |
AnnaBridge | 171:3a7713b1edbc | 419 | enet_mtl_multiqueue_txsche mtltxSche; /*!< Transmit schedule for multi-queue. */ |
AnnaBridge | 171:3a7713b1edbc | 420 | enet_mtl_multiqueue_rxsche mtlrxSche; /*!< Receive schedule for multi-queue. */ |
AnnaBridge | 171:3a7713b1edbc | 421 | uint8_t rxqueweight[ENET_RING_NUM_MAX]; /*!< Refer to the MTL RxQ Control register. */ |
AnnaBridge | 171:3a7713b1edbc | 422 | uint32_t txqueweight[ENET_RING_NUM_MAX]; /*!< Refer to the MTL TxQ Quantum Weight register. */ |
AnnaBridge | 171:3a7713b1edbc | 423 | uint8_t rxqueuePrio[ENET_RING_NUM_MAX]; /*!< Receive queue priority. */ |
AnnaBridge | 171:3a7713b1edbc | 424 | uint8_t txqueuePrio[ENET_RING_NUM_MAX]; /*!< Refer to Transmit Queue Priority Mapping register. */ |
AnnaBridge | 171:3a7713b1edbc | 425 | enet_mtl_rxqueuemap mtlrxQuemap; /*!< Rx queue DMA Channel mapping. */ |
AnnaBridge | 171:3a7713b1edbc | 426 | } enet_multiqueue_config_t; |
AnnaBridge | 171:3a7713b1edbc | 427 | |
AnnaBridge | 171:3a7713b1edbc | 428 | /*! @brief Defines the basic configuration structure for the ENET device. |
AnnaBridge | 171:3a7713b1edbc | 429 | * |
AnnaBridge | 171:3a7713b1edbc | 430 | * Note: |
AnnaBridge | 171:3a7713b1edbc | 431 | * 1. Default the signal queue is used so the "*multiqueueCfg" is set default |
AnnaBridge | 171:3a7713b1edbc | 432 | * with NULL. Set the pointer with a valid configration pointer if the multiple |
AnnaBridge | 171:3a7713b1edbc | 433 | * queues are required. If multiple queue is enabled, please make sure the |
AnnaBridge | 171:3a7713b1edbc | 434 | * buffer configuration for all are prepared also. |
AnnaBridge | 171:3a7713b1edbc | 435 | */ |
AnnaBridge | 171:3a7713b1edbc | 436 | typedef struct _enet_config |
AnnaBridge | 171:3a7713b1edbc | 437 | { |
AnnaBridge | 171:3a7713b1edbc | 438 | uint16_t specialControl; /*!< The logicl or of enet_special_config_t */ |
AnnaBridge | 171:3a7713b1edbc | 439 | enet_multiqueue_config_t *multiqueueCfg; /*!< Use both tx/rx queue(dma channel) 0 and 1. */ |
AnnaBridge | 171:3a7713b1edbc | 440 | /* -----------------MAC block-------------------------------*/ |
AnnaBridge | 171:3a7713b1edbc | 441 | enet_mii_mode_t miiMode; /*!< MII mode. */ |
AnnaBridge | 171:3a7713b1edbc | 442 | enet_mii_speed_t miiSpeed; /*!< MII Speed. */ |
AnnaBridge | 171:3a7713b1edbc | 443 | enet_mii_duplex_t miiDuplex; /*!< MII duplex. */ |
AnnaBridge | 171:3a7713b1edbc | 444 | uint16_t pauseDuration; /*!< Used in the tx flow control frame, only valid when kENET_FlowControlEnable is set. */ |
AnnaBridge | 171:3a7713b1edbc | 445 | /* -----------------Timestamp -------------------------------*/ |
AnnaBridge | 171:3a7713b1edbc | 446 | #ifdef ENET_PTP1588FEATURE_REQUIRED |
AnnaBridge | 171:3a7713b1edbc | 447 | enet_ptp_config_t *ptpConfig; /*!< PTP 1588 feature configuration */ |
AnnaBridge | 171:3a7713b1edbc | 448 | #endif /* ENET_PTP1588FEATURE_REQUIRED */ |
AnnaBridge | 171:3a7713b1edbc | 449 | } enet_config_t; |
AnnaBridge | 171:3a7713b1edbc | 450 | |
AnnaBridge | 171:3a7713b1edbc | 451 | /* Forward declaration of the handle typedef. */ |
AnnaBridge | 171:3a7713b1edbc | 452 | typedef struct _enet_handle enet_handle_t; |
AnnaBridge | 171:3a7713b1edbc | 453 | |
AnnaBridge | 171:3a7713b1edbc | 454 | /*! @brief ENET callback function. */ |
AnnaBridge | 171:3a7713b1edbc | 455 | typedef void (*enet_callback_t)( |
AnnaBridge | 171:3a7713b1edbc | 456 | ENET_Type *base, enet_handle_t *handle, enet_event_t event, uint8_t channel, void *userData); |
AnnaBridge | 171:3a7713b1edbc | 457 | |
AnnaBridge | 171:3a7713b1edbc | 458 | /*! @brief Defines the ENET transmit buffer descriptor ring/queue structure. */ |
AnnaBridge | 171:3a7713b1edbc | 459 | typedef struct _enet_tx_bd_ring |
AnnaBridge | 171:3a7713b1edbc | 460 | { |
AnnaBridge | 171:3a7713b1edbc | 461 | enet_tx_bd_struct_t *txBdBase; /*!< Buffer descriptor base address pointer. */ |
AnnaBridge | 171:3a7713b1edbc | 462 | uint16_t txGenIdx; /*!< tx generate index. */ |
AnnaBridge | 171:3a7713b1edbc | 463 | uint16_t txConsumIdx; /*!< tx consum index. */ |
AnnaBridge | 171:3a7713b1edbc | 464 | volatile uint16_t txDescUsed; /*!< tx descriptor used number. */ |
AnnaBridge | 171:3a7713b1edbc | 465 | uint16_t txRingLen; /*!< tx ring length. */ |
AnnaBridge | 171:3a7713b1edbc | 466 | #ifdef ENET_PTP1588FEATURE_REQUIRED |
AnnaBridge | 171:3a7713b1edbc | 467 | enet_ptp_time_data_ring_t txPtpTsDataRing; /*!< Transmit PTP 1588 time stamp data ring buffer. */ |
AnnaBridge | 171:3a7713b1edbc | 468 | #endif /* ENET_PTP1588FEATURE_REQUIRED */ |
AnnaBridge | 171:3a7713b1edbc | 469 | } enet_tx_bd_ring_t; |
AnnaBridge | 171:3a7713b1edbc | 470 | |
AnnaBridge | 171:3a7713b1edbc | 471 | /*! @brief Defines the ENET receive buffer descriptor ring/queue structure. */ |
AnnaBridge | 171:3a7713b1edbc | 472 | typedef struct _enet_rx_bd_ring |
AnnaBridge | 171:3a7713b1edbc | 473 | { |
AnnaBridge | 171:3a7713b1edbc | 474 | enet_rx_bd_struct_t *rxBdBase; /*!< Buffer descriptor base address pointer. */ |
AnnaBridge | 171:3a7713b1edbc | 475 | uint16_t rxGenIdx; /*!< The current available receive buffer descriptor pointer. */ |
AnnaBridge | 171:3a7713b1edbc | 476 | uint16_t rxRingLen; /*!< Receive ring length. */ |
AnnaBridge | 171:3a7713b1edbc | 477 | uint32_t rxBuffSizeAlign; /*!< Receive buffer size. */ |
AnnaBridge | 171:3a7713b1edbc | 478 | #ifdef ENET_PTP1588FEATURE_REQUIRED |
AnnaBridge | 171:3a7713b1edbc | 479 | enet_ptp_time_data_ring_t rxPtpTsDataRing; /*!< Receive PTP 1588 time stamp data ring buffer. */ |
AnnaBridge | 171:3a7713b1edbc | 480 | #endif /* ENET_PTP1588FEATURE_REQUIRED*/ |
AnnaBridge | 171:3a7713b1edbc | 481 | } enet_rx_bd_ring_t; |
AnnaBridge | 171:3a7713b1edbc | 482 | |
AnnaBridge | 171:3a7713b1edbc | 483 | /*! @brief Defines the ENET handler structure. */ |
AnnaBridge | 171:3a7713b1edbc | 484 | struct _enet_handle |
AnnaBridge | 171:3a7713b1edbc | 485 | { |
AnnaBridge | 171:3a7713b1edbc | 486 | bool multiQueEnable; /*!< Enable multi-queue. */ |
AnnaBridge | 171:3a7713b1edbc | 487 | bool doubleBuffEnable; /*!< The double buffer is used in the descriptor. */ |
AnnaBridge | 171:3a7713b1edbc | 488 | bool rxintEnable; /*!< Rx interrup enabled. */ |
AnnaBridge | 171:3a7713b1edbc | 489 | enet_rx_bd_ring_t rxBdRing[ENET_RING_NUM_MAX]; /*!< Receive buffer descriptor. */ |
AnnaBridge | 171:3a7713b1edbc | 490 | enet_tx_bd_ring_t txBdRing[ENET_RING_NUM_MAX]; /*!< Transmit buffer descriptor. */ |
AnnaBridge | 171:3a7713b1edbc | 491 | #ifdef ENET_PTP1588FEATURE_REQUIRED |
AnnaBridge | 171:3a7713b1edbc | 492 | uint32_t rxbuffers[ENET_RXBUFFSTORE_NUM]; /*!< The Initi-rx buffers will be used for reInitialize. */ |
AnnaBridge | 171:3a7713b1edbc | 493 | #endif |
AnnaBridge | 171:3a7713b1edbc | 494 | enet_callback_t callback; /*!< Callback function. */ |
AnnaBridge | 171:3a7713b1edbc | 495 | void *userData; /*!< Callback function parameter.*/ |
AnnaBridge | 171:3a7713b1edbc | 496 | }; |
AnnaBridge | 171:3a7713b1edbc | 497 | |
AnnaBridge | 171:3a7713b1edbc | 498 | /******************************************************************************* |
AnnaBridge | 171:3a7713b1edbc | 499 | * API |
AnnaBridge | 171:3a7713b1edbc | 500 | ******************************************************************************/ |
AnnaBridge | 171:3a7713b1edbc | 501 | |
AnnaBridge | 171:3a7713b1edbc | 502 | #if defined(__cplusplus) |
AnnaBridge | 171:3a7713b1edbc | 503 | extern "C" { |
AnnaBridge | 171:3a7713b1edbc | 504 | #endif |
AnnaBridge | 171:3a7713b1edbc | 505 | |
AnnaBridge | 171:3a7713b1edbc | 506 | /*! |
AnnaBridge | 171:3a7713b1edbc | 507 | * @name Initialization and De-initialization |
AnnaBridge | 171:3a7713b1edbc | 508 | * @{ |
AnnaBridge | 171:3a7713b1edbc | 509 | */ |
AnnaBridge | 171:3a7713b1edbc | 510 | |
AnnaBridge | 171:3a7713b1edbc | 511 | /*! |
AnnaBridge | 171:3a7713b1edbc | 512 | * @brief Gets the ENET default configuration structure. |
AnnaBridge | 171:3a7713b1edbc | 513 | * |
AnnaBridge | 171:3a7713b1edbc | 514 | * The purpose of this API is to get the default ENET configure |
AnnaBridge | 171:3a7713b1edbc | 515 | * structure for ENET_Init(). User may use the initialized |
AnnaBridge | 171:3a7713b1edbc | 516 | * structure unchanged in ENET_Init(), or modify some fields of the |
AnnaBridge | 171:3a7713b1edbc | 517 | * structure before calling ENET_Init(). |
AnnaBridge | 171:3a7713b1edbc | 518 | * Example: |
AnnaBridge | 171:3a7713b1edbc | 519 | @code |
AnnaBridge | 171:3a7713b1edbc | 520 | enet_config_t config; |
AnnaBridge | 171:3a7713b1edbc | 521 | ENET_GetDefaultConfig(&config); |
AnnaBridge | 171:3a7713b1edbc | 522 | @endcode |
AnnaBridge | 171:3a7713b1edbc | 523 | * @param config The ENET mac controller configuration structure pointer. |
AnnaBridge | 171:3a7713b1edbc | 524 | */ |
AnnaBridge | 171:3a7713b1edbc | 525 | void ENET_GetDefaultConfig(enet_config_t *config); |
AnnaBridge | 171:3a7713b1edbc | 526 | |
AnnaBridge | 171:3a7713b1edbc | 527 | /*! |
AnnaBridge | 171:3a7713b1edbc | 528 | * @brief Initializes the ENET module. |
AnnaBridge | 171:3a7713b1edbc | 529 | * |
AnnaBridge | 171:3a7713b1edbc | 530 | * This function ungates the module clock and initializes it with the ENET basic |
AnnaBridge | 171:3a7713b1edbc | 531 | * configuration. |
AnnaBridge | 171:3a7713b1edbc | 532 | * |
AnnaBridge | 171:3a7713b1edbc | 533 | * @param base ENET peripheral base address. |
AnnaBridge | 171:3a7713b1edbc | 534 | * @param config ENET mac configuration structure pointer. |
AnnaBridge | 171:3a7713b1edbc | 535 | * The "enet_config_t" type mac configuration return from ENET_GetDefaultConfig |
AnnaBridge | 171:3a7713b1edbc | 536 | * can be used directly. It is also possible to verify the Mac configuration using other methods. |
AnnaBridge | 171:3a7713b1edbc | 537 | * @param macAddr ENET mac address of Ethernet device. This MAC address should be |
AnnaBridge | 171:3a7713b1edbc | 538 | * provided. |
AnnaBridge | 171:3a7713b1edbc | 539 | * @param refclkSrc_Hz ENET input reference clock. |
AnnaBridge | 171:3a7713b1edbc | 540 | */ |
AnnaBridge | 171:3a7713b1edbc | 541 | void ENET_Init(ENET_Type *base, const enet_config_t *config, uint8_t *macAddr, uint32_t refclkSrc_Hz); |
AnnaBridge | 171:3a7713b1edbc | 542 | |
AnnaBridge | 171:3a7713b1edbc | 543 | /*! |
AnnaBridge | 171:3a7713b1edbc | 544 | * @brief Deinitializes the ENET module. |
AnnaBridge | 171:3a7713b1edbc | 545 | |
AnnaBridge | 171:3a7713b1edbc | 546 | * This function gates the module clock and disables the ENET module. |
AnnaBridge | 171:3a7713b1edbc | 547 | * |
AnnaBridge | 171:3a7713b1edbc | 548 | * @param base ENET peripheral base address. |
AnnaBridge | 171:3a7713b1edbc | 549 | */ |
AnnaBridge | 171:3a7713b1edbc | 550 | void ENET_Deinit(ENET_Type *base); |
AnnaBridge | 171:3a7713b1edbc | 551 | |
AnnaBridge | 171:3a7713b1edbc | 552 | /*! |
AnnaBridge | 171:3a7713b1edbc | 553 | * @brief Initialize for all ENET descriptors. |
AnnaBridge | 171:3a7713b1edbc | 554 | * |
AnnaBridge | 171:3a7713b1edbc | 555 | * @note This function is do all tx/rx descriptors initialization. Because this API |
AnnaBridge | 171:3a7713b1edbc | 556 | * read all interrupt registers first and then set the interrupt flag for all descriptos, |
AnnaBridge | 171:3a7713b1edbc | 557 | * if the interrupt register is set. so the descriptor initialization should be called |
AnnaBridge | 171:3a7713b1edbc | 558 | * after ENET_Init(), ENET_EnableInterrupts() and ENET_CreateHandle()(if transactional APIs |
AnnaBridge | 171:3a7713b1edbc | 559 | * are used). |
AnnaBridge | 171:3a7713b1edbc | 560 | * |
AnnaBridge | 171:3a7713b1edbc | 561 | * @param base ENET peripheral base address. |
AnnaBridge | 171:3a7713b1edbc | 562 | * @param config The configuration for ENET. |
AnnaBridge | 171:3a7713b1edbc | 563 | * @param bufferConfig All buffers configuration. |
AnnaBridge | 171:3a7713b1edbc | 564 | */ |
AnnaBridge | 171:3a7713b1edbc | 565 | status_t ENET_DescriptorInit(ENET_Type *base, enet_config_t *config, enet_buffer_config_t *bufferConfig); |
AnnaBridge | 171:3a7713b1edbc | 566 | |
AnnaBridge | 171:3a7713b1edbc | 567 | /*! |
AnnaBridge | 171:3a7713b1edbc | 568 | * @brief Starts the ENET rx/tx. |
AnnaBridge | 171:3a7713b1edbc | 569 | * This function enable the tx/rx and starts the rx/tx DMA. |
AnnaBridge | 171:3a7713b1edbc | 570 | * This shall be set after ENET initialization and before |
AnnaBridge | 171:3a7713b1edbc | 571 | * starting to receive the data. |
AnnaBridge | 171:3a7713b1edbc | 572 | * |
AnnaBridge | 171:3a7713b1edbc | 573 | * @param base ENET peripheral base address. |
AnnaBridge | 171:3a7713b1edbc | 574 | * @param rxRingNum The number of the used rx rings. It shall not be |
AnnaBridge | 171:3a7713b1edbc | 575 | * larger than the ENET_RING_NUM_MAX(2). If the ringNum is set with |
AnnaBridge | 171:3a7713b1edbc | 576 | * 1, the ring 0 will be used. |
AnnaBridge | 171:3a7713b1edbc | 577 | * @param txRingNum The number of the used tx rings. It shall not be |
AnnaBridge | 171:3a7713b1edbc | 578 | * larger than the ENET_RING_NUM_MAX(2). If the ringNum is set with |
AnnaBridge | 171:3a7713b1edbc | 579 | * 1, the ring 0 will be used. |
AnnaBridge | 171:3a7713b1edbc | 580 | * |
AnnaBridge | 171:3a7713b1edbc | 581 | * @note This must be called after all the ENET initilization. |
AnnaBridge | 171:3a7713b1edbc | 582 | * And should be called when the ENET receive/transmit is required. |
AnnaBridge | 171:3a7713b1edbc | 583 | */ |
AnnaBridge | 171:3a7713b1edbc | 584 | void ENET_StartRxTx(ENET_Type *base, uint8_t txRingNum, uint8_t rxRingNum); |
AnnaBridge | 171:3a7713b1edbc | 585 | |
AnnaBridge | 171:3a7713b1edbc | 586 | /* @} */ |
AnnaBridge | 171:3a7713b1edbc | 587 | |
AnnaBridge | 171:3a7713b1edbc | 588 | /*! |
AnnaBridge | 171:3a7713b1edbc | 589 | * @name MII interface operation |
AnnaBridge | 171:3a7713b1edbc | 590 | * @{ |
AnnaBridge | 171:3a7713b1edbc | 591 | */ |
AnnaBridge | 171:3a7713b1edbc | 592 | |
AnnaBridge | 171:3a7713b1edbc | 593 | /*! |
AnnaBridge | 171:3a7713b1edbc | 594 | * @brief Sets the ENET MII speed and duplex. |
AnnaBridge | 171:3a7713b1edbc | 595 | * |
AnnaBridge | 171:3a7713b1edbc | 596 | * This API is provided to dynamically change the speed and dulpex for MAC. |
AnnaBridge | 171:3a7713b1edbc | 597 | * |
AnnaBridge | 171:3a7713b1edbc | 598 | * @param base ENET peripheral base address. |
AnnaBridge | 171:3a7713b1edbc | 599 | * @param speed The speed of the RMII mode. |
AnnaBridge | 171:3a7713b1edbc | 600 | * @param duplex The duplex of the RMII mode. |
AnnaBridge | 171:3a7713b1edbc | 601 | */ |
AnnaBridge | 171:3a7713b1edbc | 602 | static inline void ENET_SetMII(ENET_Type *base, enet_mii_speed_t speed, enet_mii_duplex_t duplex) |
AnnaBridge | 171:3a7713b1edbc | 603 | { |
AnnaBridge | 171:3a7713b1edbc | 604 | uint32_t reg = base->MAC_CONFIG & ~(ENET_MAC_CONFIG_DM_MASK | ENET_MAC_CONFIG_FES_MASK); |
AnnaBridge | 171:3a7713b1edbc | 605 | reg |= ENET_MAC_CONFIG_DM(duplex) | ENET_MAC_CONFIG_FES(speed); |
AnnaBridge | 171:3a7713b1edbc | 606 | |
AnnaBridge | 171:3a7713b1edbc | 607 | base->MAC_CONFIG = reg; |
AnnaBridge | 171:3a7713b1edbc | 608 | } |
AnnaBridge | 171:3a7713b1edbc | 609 | |
AnnaBridge | 171:3a7713b1edbc | 610 | /*! |
AnnaBridge | 171:3a7713b1edbc | 611 | * @brief Sets the ENET SMI(serial management interface)- MII management interface. |
AnnaBridge | 171:3a7713b1edbc | 612 | * |
AnnaBridge | 171:3a7713b1edbc | 613 | * @param base ENET peripheral base address. |
AnnaBridge | 171:3a7713b1edbc | 614 | */ |
AnnaBridge | 171:3a7713b1edbc | 615 | void ENET_SetSMI(ENET_Type *base); |
AnnaBridge | 171:3a7713b1edbc | 616 | |
AnnaBridge | 171:3a7713b1edbc | 617 | /*! |
AnnaBridge | 171:3a7713b1edbc | 618 | * @brief Checks if the SMI is busy. |
AnnaBridge | 171:3a7713b1edbc | 619 | * |
AnnaBridge | 171:3a7713b1edbc | 620 | * @param base ENET peripheral base address. |
AnnaBridge | 171:3a7713b1edbc | 621 | * @return The status of MII Busy status. |
AnnaBridge | 171:3a7713b1edbc | 622 | */ |
AnnaBridge | 171:3a7713b1edbc | 623 | static inline bool ENET_IsSMIBusy(ENET_Type *base) |
AnnaBridge | 171:3a7713b1edbc | 624 | { |
AnnaBridge | 171:3a7713b1edbc | 625 | return (base->MAC_MDIO_ADDR & ENET_MAC_MDIO_ADDR_MB_MASK) ? true : false; |
AnnaBridge | 171:3a7713b1edbc | 626 | } |
AnnaBridge | 171:3a7713b1edbc | 627 | |
AnnaBridge | 171:3a7713b1edbc | 628 | /*! |
AnnaBridge | 171:3a7713b1edbc | 629 | * @brief Reads data from the PHY register through SMI interface. |
AnnaBridge | 171:3a7713b1edbc | 630 | * |
AnnaBridge | 171:3a7713b1edbc | 631 | * @param base ENET peripheral base address. |
AnnaBridge | 171:3a7713b1edbc | 632 | * @return The data read from PHY |
AnnaBridge | 171:3a7713b1edbc | 633 | */ |
AnnaBridge | 171:3a7713b1edbc | 634 | static inline uint16_t ENET_ReadSMIData(ENET_Type *base) |
AnnaBridge | 171:3a7713b1edbc | 635 | { |
AnnaBridge | 171:3a7713b1edbc | 636 | return (uint16_t)(base->MAC_MDIO_DATA & ENET_MAC_MDIO_DATA_MD_MASK); |
AnnaBridge | 171:3a7713b1edbc | 637 | } |
AnnaBridge | 171:3a7713b1edbc | 638 | |
AnnaBridge | 171:3a7713b1edbc | 639 | /*! |
AnnaBridge | 171:3a7713b1edbc | 640 | * @brief Starts an SMI read command. |
AnnaBridge | 171:3a7713b1edbc | 641 | * support both MDIO IEEE802.3 Clause 22 and clause 45. |
AnnaBridge | 171:3a7713b1edbc | 642 | * |
AnnaBridge | 171:3a7713b1edbc | 643 | * @param base ENET peripheral base address. |
AnnaBridge | 171:3a7713b1edbc | 644 | * @param phyAddr The PHY address. |
AnnaBridge | 171:3a7713b1edbc | 645 | * @param phyReg The PHY register. |
AnnaBridge | 171:3a7713b1edbc | 646 | */ |
AnnaBridge | 171:3a7713b1edbc | 647 | void ENET_StartSMIRead(ENET_Type *base, uint32_t phyAddr, uint32_t phyReg); |
AnnaBridge | 171:3a7713b1edbc | 648 | |
AnnaBridge | 171:3a7713b1edbc | 649 | /*! |
AnnaBridge | 171:3a7713b1edbc | 650 | * @brief Starts a SMI write command. |
AnnaBridge | 171:3a7713b1edbc | 651 | * support both MDIO IEEE802.3 Clause 22 and clause 45. |
AnnaBridge | 171:3a7713b1edbc | 652 | * |
AnnaBridge | 171:3a7713b1edbc | 653 | * @param base ENET peripheral base address. |
AnnaBridge | 171:3a7713b1edbc | 654 | * @param phyAddr The PHY address. |
AnnaBridge | 171:3a7713b1edbc | 655 | * @param phyReg The PHY register. |
AnnaBridge | 171:3a7713b1edbc | 656 | * @param data The data written to PHY. |
AnnaBridge | 171:3a7713b1edbc | 657 | */ |
AnnaBridge | 171:3a7713b1edbc | 658 | void ENET_StartSMIWrite(ENET_Type *base, uint32_t phyAddr, uint32_t phyReg, uint32_t data); |
AnnaBridge | 171:3a7713b1edbc | 659 | /* @} */ |
AnnaBridge | 171:3a7713b1edbc | 660 | |
AnnaBridge | 171:3a7713b1edbc | 661 | /*! |
AnnaBridge | 171:3a7713b1edbc | 662 | * @name Other basic operation |
AnnaBridge | 171:3a7713b1edbc | 663 | * @{ |
AnnaBridge | 171:3a7713b1edbc | 664 | */ |
AnnaBridge | 171:3a7713b1edbc | 665 | |
AnnaBridge | 171:3a7713b1edbc | 666 | /*! |
AnnaBridge | 171:3a7713b1edbc | 667 | * @brief Sets the ENET module Mac address. |
AnnaBridge | 171:3a7713b1edbc | 668 | * |
AnnaBridge | 171:3a7713b1edbc | 669 | * @param base ENET peripheral base address. |
AnnaBridge | 171:3a7713b1edbc | 670 | * @param macAddr The six-byte Mac address pointer. |
AnnaBridge | 171:3a7713b1edbc | 671 | * The pointer is allocated by application and input into the API. |
AnnaBridge | 171:3a7713b1edbc | 672 | */ |
AnnaBridge | 171:3a7713b1edbc | 673 | static inline void ENET_SetMacAddr(ENET_Type *base, uint8_t *macAddr) |
AnnaBridge | 171:3a7713b1edbc | 674 | { |
AnnaBridge | 171:3a7713b1edbc | 675 | assert(macAddr); |
AnnaBridge | 171:3a7713b1edbc | 676 | |
AnnaBridge | 171:3a7713b1edbc | 677 | /* Set Macaddr - low last as that synchronizes the update */ |
AnnaBridge | 171:3a7713b1edbc | 678 | base->MAC_ADDR_HIGH = ((uint32_t)macAddr[5] << 8) | ((uint32_t)macAddr[4]); |
AnnaBridge | 171:3a7713b1edbc | 679 | base->MAC_ADDR_LOW = ((uint32_t)macAddr[3] << 24) | ((uint32_t)macAddr[2] << 16) | ((uint32_t)macAddr[1] << 8) | |
AnnaBridge | 171:3a7713b1edbc | 680 | ((uint32_t)macAddr[0]); |
AnnaBridge | 171:3a7713b1edbc | 681 | } |
AnnaBridge | 171:3a7713b1edbc | 682 | |
AnnaBridge | 171:3a7713b1edbc | 683 | /*! |
AnnaBridge | 171:3a7713b1edbc | 684 | * @brief Gets the ENET module Mac address. |
AnnaBridge | 171:3a7713b1edbc | 685 | * |
AnnaBridge | 171:3a7713b1edbc | 686 | * @param base ENET peripheral base address. |
AnnaBridge | 171:3a7713b1edbc | 687 | * @param macAddr The six-byte Mac address pointer. |
AnnaBridge | 171:3a7713b1edbc | 688 | * The pointer is allocated by application and input into the API. |
AnnaBridge | 171:3a7713b1edbc | 689 | */ |
AnnaBridge | 171:3a7713b1edbc | 690 | void ENET_GetMacAddr(ENET_Type *base, uint8_t *macAddr); |
AnnaBridge | 171:3a7713b1edbc | 691 | |
AnnaBridge | 171:3a7713b1edbc | 692 | /*! |
AnnaBridge | 171:3a7713b1edbc | 693 | * @brief Set the MAC to enter into power down mode. |
AnnaBridge | 171:3a7713b1edbc | 694 | * the remote power wake up frame and magic frame can wake up |
AnnaBridge | 171:3a7713b1edbc | 695 | * the ENET from the power down mode. |
AnnaBridge | 171:3a7713b1edbc | 696 | * |
AnnaBridge | 171:3a7713b1edbc | 697 | * @param base ENET peripheral base address. |
AnnaBridge | 171:3a7713b1edbc | 698 | * @param wakeFilter The wakeFilter provided to configure the wake up frame fitlter. |
AnnaBridge | 171:3a7713b1edbc | 699 | * Set the wakeFilter to NULL is not required. But if you have the filter requirement, |
AnnaBridge | 171:3a7713b1edbc | 700 | * please make sure the wakeFilter pointer shall be eight continous |
AnnaBridge | 171:3a7713b1edbc | 701 | * 32-bits configuration. |
AnnaBridge | 171:3a7713b1edbc | 702 | */ |
AnnaBridge | 171:3a7713b1edbc | 703 | void ENET_EnterPowerDown(ENET_Type *base, uint32_t *wakeFilter); |
AnnaBridge | 171:3a7713b1edbc | 704 | |
AnnaBridge | 171:3a7713b1edbc | 705 | /*! |
AnnaBridge | 171:3a7713b1edbc | 706 | * @brief Set the MAC to exit power down mode. |
AnnaBridge | 171:3a7713b1edbc | 707 | * Eixt from the power down mode and recover to noraml work mode. |
AnnaBridge | 171:3a7713b1edbc | 708 | * |
AnnaBridge | 171:3a7713b1edbc | 709 | * @param base ENET peripheral base address. |
AnnaBridge | 171:3a7713b1edbc | 710 | */ |
AnnaBridge | 171:3a7713b1edbc | 711 | static inline void ENET_ExitPowerDown(ENET_Type *base) |
AnnaBridge | 171:3a7713b1edbc | 712 | { |
AnnaBridge | 171:3a7713b1edbc | 713 | /* Clear and status ans reset the power down. */ |
AnnaBridge | 171:3a7713b1edbc | 714 | base->MAC_PMT_CRTL_STAT &= ~ENET_MAC_PMT_CRTL_STAT_PWRDWN_MASK; |
AnnaBridge | 171:3a7713b1edbc | 715 | |
AnnaBridge | 171:3a7713b1edbc | 716 | /* Restore the tx which is disabled when enter power down mode. */ |
AnnaBridge | 171:3a7713b1edbc | 717 | base->DMA_CH[0].DMA_CHX_TX_CTRL |= ENET_DMA_CH_DMA_CHX_TX_CTRL_ST_MASK; |
AnnaBridge | 171:3a7713b1edbc | 718 | base->DMA_CH[1].DMA_CHX_TX_CTRL |= ENET_DMA_CH_DMA_CHX_TX_CTRL_ST_MASK; |
AnnaBridge | 171:3a7713b1edbc | 719 | base->MAC_CONFIG |= ENET_MAC_CONFIG_TE_MASK; |
AnnaBridge | 171:3a7713b1edbc | 720 | } |
AnnaBridge | 171:3a7713b1edbc | 721 | |
AnnaBridge | 171:3a7713b1edbc | 722 | /* @} */ |
AnnaBridge | 171:3a7713b1edbc | 723 | |
AnnaBridge | 171:3a7713b1edbc | 724 | /*! |
AnnaBridge | 171:3a7713b1edbc | 725 | * @name Interrupts. |
AnnaBridge | 171:3a7713b1edbc | 726 | * @{ |
AnnaBridge | 171:3a7713b1edbc | 727 | */ |
AnnaBridge | 171:3a7713b1edbc | 728 | |
AnnaBridge | 171:3a7713b1edbc | 729 | /*! |
AnnaBridge | 171:3a7713b1edbc | 730 | * @brief Enables the ENET DMA and MAC interrupts. |
AnnaBridge | 171:3a7713b1edbc | 731 | * |
AnnaBridge | 171:3a7713b1edbc | 732 | * This function enables the ENET interrupt according to the provided mask. The mask |
AnnaBridge | 171:3a7713b1edbc | 733 | * is a logical OR of enet_dma_interrupt_enable_t and enet_mac_interrupt_enable_t. |
AnnaBridge | 171:3a7713b1edbc | 734 | * For example, to enable the dma and mac interrupt, do the following. |
AnnaBridge | 171:3a7713b1edbc | 735 | * @code |
AnnaBridge | 171:3a7713b1edbc | 736 | * ENET_EnableInterrupts(ENET, kENET_DmaRx | kENET_DmaTx | kENET_MacPmt); |
AnnaBridge | 171:3a7713b1edbc | 737 | * @endcode |
AnnaBridge | 171:3a7713b1edbc | 738 | * |
AnnaBridge | 171:3a7713b1edbc | 739 | * @param base ENET peripheral base address. |
AnnaBridge | 171:3a7713b1edbc | 740 | * @param mask ENET interrupts to enable. This is a logical OR of both |
AnnaBridge | 171:3a7713b1edbc | 741 | * enumeration :: enet_dma_interrupt_enable_t and enet_mac_interrupt_enable_t. |
AnnaBridge | 171:3a7713b1edbc | 742 | */ |
AnnaBridge | 171:3a7713b1edbc | 743 | void ENET_EnableInterrupts(ENET_Type *base, uint32_t mask); |
AnnaBridge | 171:3a7713b1edbc | 744 | |
AnnaBridge | 171:3a7713b1edbc | 745 | /*! |
AnnaBridge | 171:3a7713b1edbc | 746 | * @brief Disables the ENET DMA and MAC interrupts. |
AnnaBridge | 171:3a7713b1edbc | 747 | * |
AnnaBridge | 171:3a7713b1edbc | 748 | * This function disables the ENET interrupt according to the provided mask. The mask |
AnnaBridge | 171:3a7713b1edbc | 749 | * is a logical OR of enet_dma_interrupt_enable_t and enet_mac_interrupt_enable_t. |
AnnaBridge | 171:3a7713b1edbc | 750 | * For example, to disable the dma and mac interrupt, do the following. |
AnnaBridge | 171:3a7713b1edbc | 751 | * @code |
AnnaBridge | 171:3a7713b1edbc | 752 | * ENET_DisableInterrupts(ENET, kENET_DmaRx | kENET_DmaTx | kENET_MacPmt); |
AnnaBridge | 171:3a7713b1edbc | 753 | * @endcode |
AnnaBridge | 171:3a7713b1edbc | 754 | * |
AnnaBridge | 171:3a7713b1edbc | 755 | * @param base ENET peripheral base address. |
AnnaBridge | 171:3a7713b1edbc | 756 | * @param mask ENET interrupts to disables. This is a logical OR of both |
AnnaBridge | 171:3a7713b1edbc | 757 | * enumeration :: enet_dma_interrupt_enable_t and enet_mac_interrupt_enable_t. |
AnnaBridge | 171:3a7713b1edbc | 758 | */ |
AnnaBridge | 171:3a7713b1edbc | 759 | void ENET_DisableInterrupts(ENET_Type *base, uint32_t mask); |
AnnaBridge | 171:3a7713b1edbc | 760 | |
AnnaBridge | 171:3a7713b1edbc | 761 | /*! |
AnnaBridge | 171:3a7713b1edbc | 762 | * @brief Gets the ENET DMA interrupt status flag. |
AnnaBridge | 171:3a7713b1edbc | 763 | * |
AnnaBridge | 171:3a7713b1edbc | 764 | * @param base ENET peripheral base address. |
AnnaBridge | 171:3a7713b1edbc | 765 | * @param channel The DMA Channel. Shall not be larger than ENET_RING_NUM_MAX. |
AnnaBridge | 171:3a7713b1edbc | 766 | * @return The event status of the interrupt source. This is the logical OR of members |
AnnaBridge | 171:3a7713b1edbc | 767 | * of the enumeration :: enet_dma_interrupt_enable_t. |
AnnaBridge | 171:3a7713b1edbc | 768 | */ |
AnnaBridge | 171:3a7713b1edbc | 769 | static inline uint32_t ENET_GetDmaInterruptStatus(ENET_Type *base, uint8_t channel) |
AnnaBridge | 171:3a7713b1edbc | 770 | { |
AnnaBridge | 171:3a7713b1edbc | 771 | return base->DMA_CH[channel].DMA_CHX_STAT; |
AnnaBridge | 171:3a7713b1edbc | 772 | } |
AnnaBridge | 171:3a7713b1edbc | 773 | |
AnnaBridge | 171:3a7713b1edbc | 774 | /*! |
AnnaBridge | 171:3a7713b1edbc | 775 | * @brief Clear the ENET DMA interrupt status flag. |
AnnaBridge | 171:3a7713b1edbc | 776 | * |
AnnaBridge | 171:3a7713b1edbc | 777 | * @param base ENET peripheral base address. |
AnnaBridge | 171:3a7713b1edbc | 778 | * @param channel The DMA Channel. Shall not be larger than ENET_RING_NUM_MAX. |
AnnaBridge | 171:3a7713b1edbc | 779 | * @return The event status of the interrupt source. This is the logical OR of members |
AnnaBridge | 171:3a7713b1edbc | 780 | * of the enumeration :: enet_dma_interrupt_enable_t. |
AnnaBridge | 171:3a7713b1edbc | 781 | */ |
AnnaBridge | 171:3a7713b1edbc | 782 | static inline void ENET_ClearDmaInterruptStatus(ENET_Type *base, uint8_t channel, uint32_t mask) |
AnnaBridge | 171:3a7713b1edbc | 783 | { |
AnnaBridge | 171:3a7713b1edbc | 784 | /* Clear the dam interrupt status bit in dma channel interrupt status register. */ |
AnnaBridge | 171:3a7713b1edbc | 785 | base->DMA_CH[channel].DMA_CHX_STAT = mask; |
AnnaBridge | 171:3a7713b1edbc | 786 | } |
AnnaBridge | 171:3a7713b1edbc | 787 | |
AnnaBridge | 171:3a7713b1edbc | 788 | /*! |
AnnaBridge | 171:3a7713b1edbc | 789 | * @brief Gets the ENET MAC interrupt status flag. |
AnnaBridge | 171:3a7713b1edbc | 790 | * |
AnnaBridge | 171:3a7713b1edbc | 791 | * @param base ENET peripheral base address. |
AnnaBridge | 171:3a7713b1edbc | 792 | * @return The event status of the interrupt source. |
AnnaBridge | 171:3a7713b1edbc | 793 | * Use the enum in enet_mac_interrupt_enable_t and right shift |
AnnaBridge | 171:3a7713b1edbc | 794 | * ENET_MACINT_ENUM_OFFSET to mask the returned value to get the |
AnnaBridge | 171:3a7713b1edbc | 795 | * exact interrupt status. |
AnnaBridge | 171:3a7713b1edbc | 796 | */ |
AnnaBridge | 171:3a7713b1edbc | 797 | static inline uint32_t ENET_GetMacInterruptStatus(ENET_Type *base) |
AnnaBridge | 171:3a7713b1edbc | 798 | { |
AnnaBridge | 171:3a7713b1edbc | 799 | return base->MAC_INTR_STAT; |
AnnaBridge | 171:3a7713b1edbc | 800 | } |
AnnaBridge | 171:3a7713b1edbc | 801 | |
AnnaBridge | 171:3a7713b1edbc | 802 | /*! |
AnnaBridge | 171:3a7713b1edbc | 803 | * @brief Clears the ENET mac interrupt events status flag. |
AnnaBridge | 171:3a7713b1edbc | 804 | * |
AnnaBridge | 171:3a7713b1edbc | 805 | * This function clears enabled ENET interrupts according to the provided mask. The mask |
AnnaBridge | 171:3a7713b1edbc | 806 | * is a logical OR of enumeration members. See the @ref enet_mac_interrupt_enable_t. |
AnnaBridge | 171:3a7713b1edbc | 807 | * For example, to clear the TX frame interrupt and RX frame interrupt, do the following. |
AnnaBridge | 171:3a7713b1edbc | 808 | * @code |
AnnaBridge | 171:3a7713b1edbc | 809 | * ENET_ClearMacInterruptStatus(ENET, kENET_MacPmt); |
AnnaBridge | 171:3a7713b1edbc | 810 | * @endcode |
AnnaBridge | 171:3a7713b1edbc | 811 | * |
AnnaBridge | 171:3a7713b1edbc | 812 | * @param base ENET peripheral base address. |
AnnaBridge | 171:3a7713b1edbc | 813 | * @param mask ENET interrupt source to be cleared. |
AnnaBridge | 171:3a7713b1edbc | 814 | * This is the logical OR of members of the enumeration :: enet_mac_interrupt_enable_t. |
AnnaBridge | 171:3a7713b1edbc | 815 | */ |
AnnaBridge | 171:3a7713b1edbc | 816 | void ENET_ClearMacInterruptStatus(ENET_Type *base, uint32_t mask); |
AnnaBridge | 171:3a7713b1edbc | 817 | |
AnnaBridge | 171:3a7713b1edbc | 818 | /* @} */ |
AnnaBridge | 171:3a7713b1edbc | 819 | |
AnnaBridge | 171:3a7713b1edbc | 820 | /*! |
AnnaBridge | 171:3a7713b1edbc | 821 | * @name Functional operation. |
AnnaBridge | 171:3a7713b1edbc | 822 | * @{ |
AnnaBridge | 171:3a7713b1edbc | 823 | */ |
AnnaBridge | 171:3a7713b1edbc | 824 | |
AnnaBridge | 171:3a7713b1edbc | 825 | /*! |
AnnaBridge | 171:3a7713b1edbc | 826 | * @brief Get the tx descriptor DMA Own flag. |
AnnaBridge | 171:3a7713b1edbc | 827 | * |
AnnaBridge | 171:3a7713b1edbc | 828 | * @param txDesc The given tx descriptor. |
AnnaBridge | 171:3a7713b1edbc | 829 | * @retval True the dma own tx descriptor, false application own tx descriptor. |
AnnaBridge | 171:3a7713b1edbc | 830 | * |
AnnaBridge | 171:3a7713b1edbc | 831 | */ |
AnnaBridge | 171:3a7713b1edbc | 832 | static inline bool ENET_IsTxDescriptorDmaOwn(enet_tx_bd_struct_t *txDesc) |
AnnaBridge | 171:3a7713b1edbc | 833 | { |
AnnaBridge | 171:3a7713b1edbc | 834 | return (txDesc->controlStat & ENET_TXDESCRIP_RD_OWN_MASK) ? true : false; |
AnnaBridge | 171:3a7713b1edbc | 835 | } |
AnnaBridge | 171:3a7713b1edbc | 836 | |
AnnaBridge | 171:3a7713b1edbc | 837 | /*! |
AnnaBridge | 171:3a7713b1edbc | 838 | * @brief Setup a given tx descriptor. |
AnnaBridge | 171:3a7713b1edbc | 839 | * This function is a low level functional API to setup or prepare |
AnnaBridge | 171:3a7713b1edbc | 840 | * a given tx descriptor. |
AnnaBridge | 171:3a7713b1edbc | 841 | * |
AnnaBridge | 171:3a7713b1edbc | 842 | * @param txDesc The given tx descriptor. |
AnnaBridge | 171:3a7713b1edbc | 843 | * @param buffer1 The first buffer address in the descriptor. |
AnnaBridge | 171:3a7713b1edbc | 844 | * @param bytes1 The bytes in the fist buffer. |
AnnaBridge | 171:3a7713b1edbc | 845 | * @param buffer2 The second buffer address in the descriptor. |
AnnaBridge | 171:3a7713b1edbc | 846 | * @param bytes1 The bytes in the second buffer. |
AnnaBridge | 171:3a7713b1edbc | 847 | * @param framelen The length of the frame to be transmitted. |
AnnaBridge | 171:3a7713b1edbc | 848 | * @param intEnable Interrupt enable flag. |
AnnaBridge | 171:3a7713b1edbc | 849 | * @param tsEnable The timestamp enable. |
AnnaBridge | 171:3a7713b1edbc | 850 | * @param flag The flag of this tx desciriptor, see "enet_desc_flag" . |
AnnaBridge | 171:3a7713b1edbc | 851 | * @param slotNum The slot num used for AV only. |
AnnaBridge | 171:3a7713b1edbc | 852 | * |
AnnaBridge | 171:3a7713b1edbc | 853 | * @note This must be called after all the ENET initilization. |
AnnaBridge | 171:3a7713b1edbc | 854 | * And should be called when the ENET receive/transmit is required. |
AnnaBridge | 171:3a7713b1edbc | 855 | * Transmit buffers are 'zero-copy' buffers, so the buffer must remain in |
AnnaBridge | 171:3a7713b1edbc | 856 | * memory until the packet has been fully transmitted. The buffers |
AnnaBridge | 171:3a7713b1edbc | 857 | * should be free or requeued in the transmit interrupt irq handler. |
AnnaBridge | 171:3a7713b1edbc | 858 | */ |
AnnaBridge | 171:3a7713b1edbc | 859 | void ENET_SetupTxDescriptor(enet_tx_bd_struct_t *txDesc, |
AnnaBridge | 171:3a7713b1edbc | 860 | void *buffer1, |
AnnaBridge | 171:3a7713b1edbc | 861 | uint32_t bytes1, |
AnnaBridge | 171:3a7713b1edbc | 862 | void *buffer2, |
AnnaBridge | 171:3a7713b1edbc | 863 | uint32_t bytes2, |
AnnaBridge | 171:3a7713b1edbc | 864 | uint32_t framelen, |
AnnaBridge | 171:3a7713b1edbc | 865 | bool intEnable, |
AnnaBridge | 171:3a7713b1edbc | 866 | bool tsEnable, |
AnnaBridge | 171:3a7713b1edbc | 867 | enet_desc_flag flag, |
AnnaBridge | 171:3a7713b1edbc | 868 | uint8_t slotNum); |
AnnaBridge | 171:3a7713b1edbc | 869 | |
AnnaBridge | 171:3a7713b1edbc | 870 | /*! |
AnnaBridge | 171:3a7713b1edbc | 871 | * @brief Update the tx descriptor tail pointer. |
AnnaBridge | 171:3a7713b1edbc | 872 | * This function is a low level functional API to update the |
AnnaBridge | 171:3a7713b1edbc | 873 | * the tx descriptor tail. |
AnnaBridge | 171:3a7713b1edbc | 874 | * This is called after you setup a new tx descriptor to update |
AnnaBridge | 171:3a7713b1edbc | 875 | * the tail pointer to make the new descritor accessable by DMA. |
AnnaBridge | 171:3a7713b1edbc | 876 | * |
AnnaBridge | 171:3a7713b1edbc | 877 | * @param base ENET peripheral base address. |
AnnaBridge | 171:3a7713b1edbc | 878 | * @param channel The tx DMA channel. |
AnnaBridge | 171:3a7713b1edbc | 879 | * @param txDescTailAddrAlign The new tx tail pointer address. |
AnnaBridge | 171:3a7713b1edbc | 880 | * |
AnnaBridge | 171:3a7713b1edbc | 881 | */ |
AnnaBridge | 171:3a7713b1edbc | 882 | static inline void ENET_UpdateTxDescriptorTail(ENET_Type *base, uint8_t channel, uint32_t txDescTailAddrAlign) |
AnnaBridge | 171:3a7713b1edbc | 883 | { |
AnnaBridge | 171:3a7713b1edbc | 884 | base->DMA_CH[channel].DMA_CHX_TXDESC_TAIL_PTR = txDescTailAddrAlign & ~ENET_ADDR_ALIGNMENT; |
AnnaBridge | 171:3a7713b1edbc | 885 | } |
AnnaBridge | 171:3a7713b1edbc | 886 | |
AnnaBridge | 171:3a7713b1edbc | 887 | /*! |
AnnaBridge | 171:3a7713b1edbc | 888 | * @brief Update the rx descriptor tail pointer. |
AnnaBridge | 171:3a7713b1edbc | 889 | * This function is a low level functional API to update the |
AnnaBridge | 171:3a7713b1edbc | 890 | * the rx descriptor tail. |
AnnaBridge | 171:3a7713b1edbc | 891 | * This is called after you setup a new rx descriptor to update |
AnnaBridge | 171:3a7713b1edbc | 892 | * the tail pointer to make the new descritor accessable by DMA |
AnnaBridge | 171:3a7713b1edbc | 893 | * and to anouse the rx poll command for DMA. |
AnnaBridge | 171:3a7713b1edbc | 894 | * |
AnnaBridge | 171:3a7713b1edbc | 895 | * @param base ENET peripheral base address. |
AnnaBridge | 171:3a7713b1edbc | 896 | * @param channel The rx DMA channel. |
AnnaBridge | 171:3a7713b1edbc | 897 | * @param rxDescTailAddrAlign The new rx tail pointer address. |
AnnaBridge | 171:3a7713b1edbc | 898 | * |
AnnaBridge | 171:3a7713b1edbc | 899 | */ |
AnnaBridge | 171:3a7713b1edbc | 900 | static inline void ENET_UpdateRxDescriptorTail(ENET_Type *base, uint8_t channel, uint32_t rxDescTailAddrAlign) |
AnnaBridge | 171:3a7713b1edbc | 901 | { |
AnnaBridge | 171:3a7713b1edbc | 902 | base->DMA_CH[channel].DMA_CHX_RXDESC_TAIL_PTR = rxDescTailAddrAlign & ~ENET_ADDR_ALIGNMENT; |
AnnaBridge | 171:3a7713b1edbc | 903 | } |
AnnaBridge | 171:3a7713b1edbc | 904 | |
AnnaBridge | 171:3a7713b1edbc | 905 | /*! |
AnnaBridge | 171:3a7713b1edbc | 906 | * @brief Gets the context in the ENET rx descriptor. |
AnnaBridge | 171:3a7713b1edbc | 907 | * This function is a low level functional API to get the |
AnnaBridge | 171:3a7713b1edbc | 908 | * the status flag from a given rx descriptor. |
AnnaBridge | 171:3a7713b1edbc | 909 | * |
AnnaBridge | 171:3a7713b1edbc | 910 | * @param rxDesc The given rx descriptor. |
AnnaBridge | 171:3a7713b1edbc | 911 | * @retval The RDES3 regions for write-back format rx buffer descriptor. |
AnnaBridge | 171:3a7713b1edbc | 912 | * |
AnnaBridge | 171:3a7713b1edbc | 913 | * @note This must be called after all the ENET initilization. |
AnnaBridge | 171:3a7713b1edbc | 914 | * And should be called when the ENET receive/transmit is required. |
AnnaBridge | 171:3a7713b1edbc | 915 | */ |
AnnaBridge | 171:3a7713b1edbc | 916 | static inline uint32_t ENET_GetRxDescriptor(enet_rx_bd_struct_t *rxDesc) |
AnnaBridge | 171:3a7713b1edbc | 917 | { |
AnnaBridge | 171:3a7713b1edbc | 918 | assert(rxDesc); |
AnnaBridge | 171:3a7713b1edbc | 919 | |
AnnaBridge | 171:3a7713b1edbc | 920 | return rxDesc->control; |
AnnaBridge | 171:3a7713b1edbc | 921 | } |
AnnaBridge | 171:3a7713b1edbc | 922 | /*! |
AnnaBridge | 171:3a7713b1edbc | 923 | * @brief Updates the buffers and the own status for a given rx descriptor. |
AnnaBridge | 171:3a7713b1edbc | 924 | * This function is a low level functional API to Updates the |
AnnaBridge | 171:3a7713b1edbc | 925 | * buffers and the own status for a given rx descriptor. |
AnnaBridge | 171:3a7713b1edbc | 926 | * |
AnnaBridge | 171:3a7713b1edbc | 927 | * @param rxDesc The given rx descriptor. |
AnnaBridge | 171:3a7713b1edbc | 928 | * @param buffer1 The first buffer address in the descriptor. |
AnnaBridge | 171:3a7713b1edbc | 929 | * @param buffer2 The second buffer address in the descriptor. |
AnnaBridge | 171:3a7713b1edbc | 930 | * @param intEnable Interrupt enable flag. |
AnnaBridge | 171:3a7713b1edbc | 931 | * @param doubleBuffEnable The double buffer enable flag. |
AnnaBridge | 171:3a7713b1edbc | 932 | * |
AnnaBridge | 171:3a7713b1edbc | 933 | * @note This must be called after all the ENET initilization. |
AnnaBridge | 171:3a7713b1edbc | 934 | * And should be called when the ENET receive/transmit is required. |
AnnaBridge | 171:3a7713b1edbc | 935 | */ |
AnnaBridge | 171:3a7713b1edbc | 936 | void ENET_UpdateRxDescriptor( |
AnnaBridge | 171:3a7713b1edbc | 937 | enet_rx_bd_struct_t *rxDesc, void *buffer1, void *buffer2, bool intEnable, bool doubleBuffEnable); |
AnnaBridge | 171:3a7713b1edbc | 938 | |
AnnaBridge | 171:3a7713b1edbc | 939 | /* @} */ |
AnnaBridge | 171:3a7713b1edbc | 940 | |
AnnaBridge | 171:3a7713b1edbc | 941 | /*! |
AnnaBridge | 171:3a7713b1edbc | 942 | * @name Transactional operation |
AnnaBridge | 171:3a7713b1edbc | 943 | * @{ |
AnnaBridge | 171:3a7713b1edbc | 944 | */ |
AnnaBridge | 171:3a7713b1edbc | 945 | |
AnnaBridge | 171:3a7713b1edbc | 946 | /*! |
AnnaBridge | 171:3a7713b1edbc | 947 | * @brief Create ENET Handler |
AnnaBridge | 171:3a7713b1edbc | 948 | * |
AnnaBridge | 171:3a7713b1edbc | 949 | * This is a transactional API and it's provided to store all datas which are needed |
AnnaBridge | 171:3a7713b1edbc | 950 | * during the whole transactional process. This API should not be used when you use |
AnnaBridge | 171:3a7713b1edbc | 951 | * functional APIs to do data tx/rx. This is funtion will store many data/flag for |
AnnaBridge | 171:3a7713b1edbc | 952 | * transactional use, so all configure API such as ENET_Init(), ENET_DescriptorInit(), |
AnnaBridge | 171:3a7713b1edbc | 953 | * ENET_EnableInterrupts() etc. |
AnnaBridge | 171:3a7713b1edbc | 954 | * |
AnnaBridge | 171:3a7713b1edbc | 955 | * @note as our transactional transmit API use the zero-copy transmit buffer. |
AnnaBridge | 171:3a7713b1edbc | 956 | * so there are two thing we emphasize here: |
AnnaBridge | 171:3a7713b1edbc | 957 | * 1. tx buffer free/requeue for application should be done in the tx |
AnnaBridge | 171:3a7713b1edbc | 958 | * interrupt handler. Please set callback: kENET_TxIntEvent with tx buffer free/requeue |
AnnaBridge | 171:3a7713b1edbc | 959 | * process APIs. |
AnnaBridge | 171:3a7713b1edbc | 960 | * 2. the tx interrupt is forced to open. |
AnnaBridge | 171:3a7713b1edbc | 961 | * |
AnnaBridge | 171:3a7713b1edbc | 962 | * @param base ENET peripheral base address. |
AnnaBridge | 171:3a7713b1edbc | 963 | * @param handle ENET handler. |
AnnaBridge | 171:3a7713b1edbc | 964 | * @param config ENET configuration. |
AnnaBridge | 171:3a7713b1edbc | 965 | * @param bufferConfig ENET buffer configuration. |
AnnaBridge | 171:3a7713b1edbc | 966 | * @param callback The callback function. |
AnnaBridge | 171:3a7713b1edbc | 967 | * @param userData The application data. |
AnnaBridge | 171:3a7713b1edbc | 968 | */ |
AnnaBridge | 171:3a7713b1edbc | 969 | void ENET_CreateHandler(ENET_Type *base, |
AnnaBridge | 171:3a7713b1edbc | 970 | enet_handle_t *handle, |
AnnaBridge | 171:3a7713b1edbc | 971 | enet_config_t *config, |
AnnaBridge | 171:3a7713b1edbc | 972 | enet_buffer_config_t *bufferConfig, |
AnnaBridge | 171:3a7713b1edbc | 973 | enet_callback_t callback, |
AnnaBridge | 171:3a7713b1edbc | 974 | void *userData); |
AnnaBridge | 171:3a7713b1edbc | 975 | |
AnnaBridge | 171:3a7713b1edbc | 976 | /*! |
AnnaBridge | 171:3a7713b1edbc | 977 | * @brief Gets the size of the read frame. |
AnnaBridge | 171:3a7713b1edbc | 978 | * This function gets a received frame size from the ENET buffer descriptors. |
AnnaBridge | 171:3a7713b1edbc | 979 | * @note The FCS of the frame is automatically removed by MAC and the size is the length without the FCS. |
AnnaBridge | 171:3a7713b1edbc | 980 | * After calling ENET_GetRxFrameSize, ENET_ReadFrame() should be called to update the |
AnnaBridge | 171:3a7713b1edbc | 981 | * receive buffers If the result is not "kStatus_ENET_RxFrameEmpty". |
AnnaBridge | 171:3a7713b1edbc | 982 | * |
AnnaBridge | 171:3a7713b1edbc | 983 | * @param handle The ENET handler structure. This is the same handler pointer used in the ENET_Init. |
AnnaBridge | 171:3a7713b1edbc | 984 | * @param length The length of the valid frame received. |
AnnaBridge | 171:3a7713b1edbc | 985 | * @param channel The DMAC channel for the rx. |
AnnaBridge | 171:3a7713b1edbc | 986 | * @retval kStatus_ENET_RxFrameEmpty No frame received. Should not call ENET_ReadFrame to read frame. |
AnnaBridge | 171:3a7713b1edbc | 987 | * @retval kStatus_ENET_RxFrameError Data error happens. ENET_ReadFrame should be called with NULL data |
AnnaBridge | 171:3a7713b1edbc | 988 | * and NULL length to update the receive buffers. |
AnnaBridge | 171:3a7713b1edbc | 989 | * @retval kStatus_Success Receive a frame Successfully then the ENET_ReadFrame |
AnnaBridge | 171:3a7713b1edbc | 990 | * should be called with the right data buffer and the captured data length input. |
AnnaBridge | 171:3a7713b1edbc | 991 | */ |
AnnaBridge | 171:3a7713b1edbc | 992 | status_t ENET_GetRxFrameSize(ENET_Type *base, enet_handle_t *handle, uint32_t *length, uint8_t channel); |
AnnaBridge | 171:3a7713b1edbc | 993 | |
AnnaBridge | 171:3a7713b1edbc | 994 | /*! |
AnnaBridge | 171:3a7713b1edbc | 995 | * @brief Reads a frame from the ENET device. |
AnnaBridge | 171:3a7713b1edbc | 996 | * This function reads a frame from the ENET DMA descriptors. |
AnnaBridge | 171:3a7713b1edbc | 997 | * The ENET_GetRxFrameSize should be used to get the size of the prepared data buffer. |
AnnaBridge | 171:3a7713b1edbc | 998 | * For example use rx dma channel 0: |
AnnaBridge | 171:3a7713b1edbc | 999 | * @code |
AnnaBridge | 171:3a7713b1edbc | 1000 | * uint32_t length; |
AnnaBridge | 171:3a7713b1edbc | 1001 | * enet_handle_t g_handle; |
AnnaBridge | 171:3a7713b1edbc | 1002 | * //Get the received frame size firstly. |
AnnaBridge | 171:3a7713b1edbc | 1003 | * status = ENET_GetRxFrameSize(&g_handle, &length, 0); |
AnnaBridge | 171:3a7713b1edbc | 1004 | * if (length != 0) |
AnnaBridge | 171:3a7713b1edbc | 1005 | * { |
AnnaBridge | 171:3a7713b1edbc | 1006 | * //Allocate memory here with the size of "length" |
AnnaBridge | 171:3a7713b1edbc | 1007 | * uint8_t *data = memory allocate interface; |
AnnaBridge | 171:3a7713b1edbc | 1008 | * if (!data) |
AnnaBridge | 171:3a7713b1edbc | 1009 | * { |
AnnaBridge | 171:3a7713b1edbc | 1010 | * ENET_ReadFrame(ENET, &g_handle, NULL, 0, 0); |
AnnaBridge | 171:3a7713b1edbc | 1011 | * //Add the console warning log. |
AnnaBridge | 171:3a7713b1edbc | 1012 | * } |
AnnaBridge | 171:3a7713b1edbc | 1013 | * else |
AnnaBridge | 171:3a7713b1edbc | 1014 | * { |
AnnaBridge | 171:3a7713b1edbc | 1015 | * status = ENET_ReadFrame(ENET, &g_handle, data, length, 0); |
AnnaBridge | 171:3a7713b1edbc | 1016 | * //Call stack input API to deliver the data to stack |
AnnaBridge | 171:3a7713b1edbc | 1017 | * } |
AnnaBridge | 171:3a7713b1edbc | 1018 | * } |
AnnaBridge | 171:3a7713b1edbc | 1019 | * else if (status == kStatus_ENET_RxFrameError) |
AnnaBridge | 171:3a7713b1edbc | 1020 | * { |
AnnaBridge | 171:3a7713b1edbc | 1021 | * //Update the received buffer when a error frame is received. |
AnnaBridge | 171:3a7713b1edbc | 1022 | * ENET_ReadFrame(ENET, &g_handle, NULL, 0, 0); |
AnnaBridge | 171:3a7713b1edbc | 1023 | * } |
AnnaBridge | 171:3a7713b1edbc | 1024 | * @endcode |
AnnaBridge | 171:3a7713b1edbc | 1025 | * @param base ENET peripheral base address. |
AnnaBridge | 171:3a7713b1edbc | 1026 | * @param handle The ENET handler structure. This is the same handler pointer used in the ENET_Init. |
AnnaBridge | 171:3a7713b1edbc | 1027 | * @param data The data buffer provided by user to store the frame which memory size should be at least "length". |
AnnaBridge | 171:3a7713b1edbc | 1028 | * @param length The size of the data buffer which is still the length of the received frame. |
AnnaBridge | 171:3a7713b1edbc | 1029 | * @param channel The rx DMA channel. shall not be larger than 2. |
AnnaBridge | 171:3a7713b1edbc | 1030 | * @return The execute status, successful or failure. |
AnnaBridge | 171:3a7713b1edbc | 1031 | */ |
AnnaBridge | 171:3a7713b1edbc | 1032 | status_t ENET_ReadFrame(ENET_Type *base, enet_handle_t *handle, uint8_t *data, uint32_t length, uint8_t channel); |
AnnaBridge | 171:3a7713b1edbc | 1033 | |
AnnaBridge | 171:3a7713b1edbc | 1034 | /*! |
AnnaBridge | 171:3a7713b1edbc | 1035 | * @brief Transmits an ENET frame. |
AnnaBridge | 171:3a7713b1edbc | 1036 | * @note The CRC is automatically appended to the data. Input the data |
AnnaBridge | 171:3a7713b1edbc | 1037 | * to send without the CRC. |
AnnaBridge | 171:3a7713b1edbc | 1038 | * |
AnnaBridge | 171:3a7713b1edbc | 1039 | * @param base ENET peripheral base address. |
AnnaBridge | 171:3a7713b1edbc | 1040 | * @param handle The ENET handler pointer. This is the same handler pointer used in the ENET_Init. |
AnnaBridge | 171:3a7713b1edbc | 1041 | * @param data The data buffer provided by user to be send. |
AnnaBridge | 171:3a7713b1edbc | 1042 | * @param length The length of the data to be send. |
AnnaBridge | 171:3a7713b1edbc | 1043 | * @retval kStatus_Success Send frame succeed. |
AnnaBridge | 171:3a7713b1edbc | 1044 | * @retval kStatus_ENET_TxFrameBusy Transmit buffer descriptor is busy under transmission. |
AnnaBridge | 171:3a7713b1edbc | 1045 | * The transmit busy happens when the data send rate is over the MAC capacity. |
AnnaBridge | 171:3a7713b1edbc | 1046 | * The waiting mechanism is recommended to be added after each call return with |
AnnaBridge | 171:3a7713b1edbc | 1047 | * kStatus_ENET_TxFrameBusy. |
AnnaBridge | 171:3a7713b1edbc | 1048 | */ |
AnnaBridge | 171:3a7713b1edbc | 1049 | status_t ENET_SendFrame(ENET_Type *base, enet_handle_t *handle, uint8_t *data, uint32_t length); |
AnnaBridge | 171:3a7713b1edbc | 1050 | |
AnnaBridge | 171:3a7713b1edbc | 1051 | /*! |
AnnaBridge | 171:3a7713b1edbc | 1052 | * @brief Reclaim tx descriptors. |
AnnaBridge | 171:3a7713b1edbc | 1053 | * This function is used to update the tx descriptor status and |
AnnaBridge | 171:3a7713b1edbc | 1054 | * store the tx timestamp when the 1588 feature is enabled. |
AnnaBridge | 171:3a7713b1edbc | 1055 | * This is called by the transmit interupt IRQ handler after the |
AnnaBridge | 171:3a7713b1edbc | 1056 | * complete of a frame transmission. |
AnnaBridge | 171:3a7713b1edbc | 1057 | * |
AnnaBridge | 171:3a7713b1edbc | 1058 | * @param base ENET peripheral base address. |
AnnaBridge | 171:3a7713b1edbc | 1059 | * @param handle The ENET handler pointer. This is the same handler pointer used in the ENET_Init. |
AnnaBridge | 171:3a7713b1edbc | 1060 | * @param channel The tx DMA channnel. |
AnnaBridge | 171:3a7713b1edbc | 1061 | * |
AnnaBridge | 171:3a7713b1edbc | 1062 | */ |
AnnaBridge | 171:3a7713b1edbc | 1063 | void ENET_ReclaimTxDescriptor(ENET_Type *base, enet_handle_t *handle, uint8_t channel); |
AnnaBridge | 171:3a7713b1edbc | 1064 | |
AnnaBridge | 171:3a7713b1edbc | 1065 | /*! |
AnnaBridge | 171:3a7713b1edbc | 1066 | * @brief The ENET PMT IRQ handler. |
AnnaBridge | 171:3a7713b1edbc | 1067 | * |
AnnaBridge | 171:3a7713b1edbc | 1068 | * @param base ENET peripheral base address. |
AnnaBridge | 171:3a7713b1edbc | 1069 | * @param handle The ENET handler pointer. |
AnnaBridge | 171:3a7713b1edbc | 1070 | */ |
AnnaBridge | 171:3a7713b1edbc | 1071 | void ENET_PMTIRQHandler(ENET_Type *base, enet_handle_t *handle); |
AnnaBridge | 171:3a7713b1edbc | 1072 | |
AnnaBridge | 171:3a7713b1edbc | 1073 | /*! |
AnnaBridge | 171:3a7713b1edbc | 1074 | * @brief The ENET IRQ handler. |
AnnaBridge | 171:3a7713b1edbc | 1075 | * |
AnnaBridge | 171:3a7713b1edbc | 1076 | * @param base ENET peripheral base address. |
AnnaBridge | 171:3a7713b1edbc | 1077 | * @param handle The ENET handler pointer. |
AnnaBridge | 171:3a7713b1edbc | 1078 | */ |
AnnaBridge | 171:3a7713b1edbc | 1079 | void ENET_IRQHandler(ENET_Type *base, enet_handle_t *handle); |
AnnaBridge | 171:3a7713b1edbc | 1080 | |
AnnaBridge | 171:3a7713b1edbc | 1081 | /* @} */ |
AnnaBridge | 171:3a7713b1edbc | 1082 | |
AnnaBridge | 171:3a7713b1edbc | 1083 | #ifdef ENET_PTP1588FEATURE_REQUIRED |
AnnaBridge | 171:3a7713b1edbc | 1084 | /*! |
AnnaBridge | 171:3a7713b1edbc | 1085 | * @name ENET Enhanced function operation |
AnnaBridge | 171:3a7713b1edbc | 1086 | * @{ |
AnnaBridge | 171:3a7713b1edbc | 1087 | */ |
AnnaBridge | 171:3a7713b1edbc | 1088 | |
AnnaBridge | 171:3a7713b1edbc | 1089 | /*! |
AnnaBridge | 171:3a7713b1edbc | 1090 | * @brief Starts the ENET PTP 1588 Timer. |
AnnaBridge | 171:3a7713b1edbc | 1091 | * This function is used to initialize the PTP timer. After the PTP starts, |
AnnaBridge | 171:3a7713b1edbc | 1092 | * the PTP timer starts running. |
AnnaBridge | 171:3a7713b1edbc | 1093 | * |
AnnaBridge | 171:3a7713b1edbc | 1094 | * @param base ENET peripheral base address. |
AnnaBridge | 171:3a7713b1edbc | 1095 | * @param ptpClkSrc The clock source of the PTP timer. |
AnnaBridge | 171:3a7713b1edbc | 1096 | */ |
AnnaBridge | 171:3a7713b1edbc | 1097 | void ENET_Ptp1588StartTimer(ENET_Type *base, uint32_t ptpClkSrc); |
AnnaBridge | 171:3a7713b1edbc | 1098 | |
AnnaBridge | 171:3a7713b1edbc | 1099 | /*! |
AnnaBridge | 171:3a7713b1edbc | 1100 | * @brief Coreect the ENET PTP 1588 timer in coarse method. |
AnnaBridge | 171:3a7713b1edbc | 1101 | * |
AnnaBridge | 171:3a7713b1edbc | 1102 | * @param base ENET peripheral base address. |
AnnaBridge | 171:3a7713b1edbc | 1103 | * @param operation The system time operation, refer to "enet_systime_op" |
AnnaBridge | 171:3a7713b1edbc | 1104 | * @param second The correction second. |
AnnaBridge | 171:3a7713b1edbc | 1105 | * @param nanosecond The correction nanosecond. |
AnnaBridge | 171:3a7713b1edbc | 1106 | */ |
AnnaBridge | 171:3a7713b1edbc | 1107 | void ENET_Ptp1588CorrectTimerInCoarse(ENET_Type *base, enet_systime_op operation, uint32_t second, uint32_t nanosecond); |
AnnaBridge | 171:3a7713b1edbc | 1108 | |
AnnaBridge | 171:3a7713b1edbc | 1109 | /*! |
AnnaBridge | 171:3a7713b1edbc | 1110 | * @brief Coreect the ENET PTP 1588 timer in fine method. |
AnnaBridge | 171:3a7713b1edbc | 1111 | * |
AnnaBridge | 171:3a7713b1edbc | 1112 | * |
AnnaBridge | 171:3a7713b1edbc | 1113 | * @param base ENET peripheral base address. |
AnnaBridge | 171:3a7713b1edbc | 1114 | * @param addend The addend value to be set in the fine method |
AnnaBridge | 171:3a7713b1edbc | 1115 | * @note Should take refer to the chapter "System time corretion" and |
AnnaBridge | 171:3a7713b1edbc | 1116 | * see the description for the "fine correction method". |
AnnaBridge | 171:3a7713b1edbc | 1117 | */ |
AnnaBridge | 171:3a7713b1edbc | 1118 | static inline void ENET_Ptp1588CorrectTimerInFine(ENET_Type *base, uint32_t addend) |
AnnaBridge | 171:3a7713b1edbc | 1119 | { |
AnnaBridge | 171:3a7713b1edbc | 1120 | /* Set the freqCompensation value. */ |
AnnaBridge | 171:3a7713b1edbc | 1121 | base->MAC_SYS_TIMESTMP_ADDEND = addend; |
AnnaBridge | 171:3a7713b1edbc | 1122 | base->MAC_TIMESTAMP_CTRL |= ENET_MAC_TIMESTAMP_CTRL_TADDREG_MASK; |
AnnaBridge | 171:3a7713b1edbc | 1123 | } |
AnnaBridge | 171:3a7713b1edbc | 1124 | |
AnnaBridge | 171:3a7713b1edbc | 1125 | /*! |
AnnaBridge | 171:3a7713b1edbc | 1126 | * @brief Get the ENET Time stamp current addend value. |
AnnaBridge | 171:3a7713b1edbc | 1127 | * |
AnnaBridge | 171:3a7713b1edbc | 1128 | * @param base ENET peripheral base address. |
AnnaBridge | 171:3a7713b1edbc | 1129 | * @return The addend value. |
AnnaBridge | 171:3a7713b1edbc | 1130 | */ |
AnnaBridge | 171:3a7713b1edbc | 1131 | static inline uint32_t ENET_Ptp1588GetAddend(ENET_Type *base) |
AnnaBridge | 171:3a7713b1edbc | 1132 | { |
AnnaBridge | 171:3a7713b1edbc | 1133 | return base->MAC_SYS_TIMESTMP_ADDEND; |
AnnaBridge | 171:3a7713b1edbc | 1134 | } |
AnnaBridge | 171:3a7713b1edbc | 1135 | |
AnnaBridge | 171:3a7713b1edbc | 1136 | /*! |
AnnaBridge | 171:3a7713b1edbc | 1137 | * @brief Gets the current ENET time from the PTP 1588 timer. |
AnnaBridge | 171:3a7713b1edbc | 1138 | * |
AnnaBridge | 171:3a7713b1edbc | 1139 | * @param base ENET peripheral base address. |
AnnaBridge | 171:3a7713b1edbc | 1140 | * @param second The PTP 1588 system timer second. |
AnnaBridge | 171:3a7713b1edbc | 1141 | * @param nanosecond The PTP 1588 system timer nanosecond. |
AnnaBridge | 171:3a7713b1edbc | 1142 | * For the unit of the nanosecond is 1ns. so the nanosecond is the real nanosecond. |
AnnaBridge | 171:3a7713b1edbc | 1143 | */ |
AnnaBridge | 171:3a7713b1edbc | 1144 | void ENET_Ptp1588GetTimer(ENET_Type *base, uint64_t *second, uint32_t *nanosecond); |
AnnaBridge | 171:3a7713b1edbc | 1145 | |
AnnaBridge | 171:3a7713b1edbc | 1146 | /*! |
AnnaBridge | 171:3a7713b1edbc | 1147 | * @brief Gets the time stamp of the received frame. |
AnnaBridge | 171:3a7713b1edbc | 1148 | * |
AnnaBridge | 171:3a7713b1edbc | 1149 | * This function is used for PTP stack to get the timestamp captured by the ENET driver. |
AnnaBridge | 171:3a7713b1edbc | 1150 | * |
AnnaBridge | 171:3a7713b1edbc | 1151 | * @param handle The ENET handler pointer.This is the same state pointer used in |
AnnaBridge | 171:3a7713b1edbc | 1152 | * ENET_Init. |
AnnaBridge | 171:3a7713b1edbc | 1153 | * @param ptpTimeData The special PTP timestamp data for search the receive timestamp. |
AnnaBridge | 171:3a7713b1edbc | 1154 | * @retval kStatus_Success Get 1588 timestamp success. |
AnnaBridge | 171:3a7713b1edbc | 1155 | * @retval kStatus_ENET_PtpTsRingEmpty 1588 timestamp ring empty. |
AnnaBridge | 171:3a7713b1edbc | 1156 | * @retval kStatus_ENET_PtpTsRingFull 1588 timestamp ring full. |
AnnaBridge | 171:3a7713b1edbc | 1157 | */ |
AnnaBridge | 171:3a7713b1edbc | 1158 | status_t ENET_GetRxFrameTime(enet_handle_t *handle, enet_ptp_time_data_t *ptpTimeData); |
AnnaBridge | 171:3a7713b1edbc | 1159 | |
AnnaBridge | 171:3a7713b1edbc | 1160 | /*! |
AnnaBridge | 171:3a7713b1edbc | 1161 | * @brief Gets the time stamp of the transmit frame. |
AnnaBridge | 171:3a7713b1edbc | 1162 | * |
AnnaBridge | 171:3a7713b1edbc | 1163 | * This function is used for PTP stack to get the timestamp captured by the ENET driver. |
AnnaBridge | 171:3a7713b1edbc | 1164 | * |
AnnaBridge | 171:3a7713b1edbc | 1165 | * @param handle The ENET handler pointer.This is the same state pointer used in |
AnnaBridge | 171:3a7713b1edbc | 1166 | * ENET_Init. |
AnnaBridge | 171:3a7713b1edbc | 1167 | * @param ptpTimeData The special PTP timestamp data for search the receive timestamp. |
AnnaBridge | 171:3a7713b1edbc | 1168 | * @retval kStatus_Success Get 1588 timestamp success. |
AnnaBridge | 171:3a7713b1edbc | 1169 | * @retval kStatus_ENET_PtpTsRingEmpty 1588 timestamp ring empty. |
AnnaBridge | 171:3a7713b1edbc | 1170 | * @retval kStatus_ENET_PtpTsRingFull 1588 timestamp ring full. |
AnnaBridge | 171:3a7713b1edbc | 1171 | */ |
AnnaBridge | 171:3a7713b1edbc | 1172 | status_t ENET_GetTxFrameTime(enet_handle_t *handle, enet_ptp_time_data_t *ptpTimeData); |
AnnaBridge | 171:3a7713b1edbc | 1173 | #endif /* ENET_PTP1588FEATURE_REQUIRED */ |
AnnaBridge | 171:3a7713b1edbc | 1174 | /* @} */ |
AnnaBridge | 171:3a7713b1edbc | 1175 | |
AnnaBridge | 171:3a7713b1edbc | 1176 | #if defined(__cplusplus) |
AnnaBridge | 171:3a7713b1edbc | 1177 | } |
AnnaBridge | 171:3a7713b1edbc | 1178 | #endif |
AnnaBridge | 171:3a7713b1edbc | 1179 | |
AnnaBridge | 171:3a7713b1edbc | 1180 | /*! @}*/ |
AnnaBridge | 171:3a7713b1edbc | 1181 | |
AnnaBridge | 171:3a7713b1edbc | 1182 | #endif /* _FSL_ENET_H_ */ |