Rewrite from scratch a TCP/IP stack for mbed. So far the following parts are usable: Drivers: - EMAC driver (from CMSIS 2.0) Protocols: - Ethernet protocol - ARP over ethernet for IPv4 - IPv4 over Ethernet - ICMPv4 over IPv4 - UDPv4 over IPv4 APIs: - Sockets for UDPv4 The structure of this stack is designed to be very modular. Each protocol can register one or more protocol to handle its payload, and in each protocol, an API can be hooked (like Sockets for example). This is an early release.
lpc17xx_emac.h
00001 /* @cond */ 00002 /***********************************************************************//** 00003 * @file lpc17xx_emac.h 00004 * @brief Contains all macro definitions and function prototypes 00005 * support for Ethernet MAC firmware library on LPC17xx 00006 * @version 2.0 00007 * @date 21. May. 2010 00008 * @author NXP MCU SW Application Team 00009 ************************************************************************** 00010 * Software that is described herein is for illustrative purposes only 00011 * which provides customers with programming information regarding the 00012 * products. This software is supplied "AS IS" without any warranties. 00013 * NXP Semiconductors assumes no responsibility or liability for the 00014 * use of the software, conveys no license or title under any patent, 00015 * copyright, or mask work right to the product. NXP Semiconductors 00016 * reserves the right to make changes in the software without 00017 * notification. NXP Semiconductors also make no representation or 00018 * warranty that such application will be suitable for the specified 00019 * use without further testing or modification. 00020 **************************************************************************/ 00021 00022 /* Peripheral group ----------------------------------------------------------- */ 00023 /** @defgroup EMAC EMAC 00024 * @ingroup LPC1700CMSIS_FwLib_Drivers 00025 * @{ 00026 */ 00027 00028 #ifndef LPC17XX_EMAC_H_ 00029 #define LPC17XX_EMAC_H_ 00030 00031 /* Includes ------------------------------------------------------------------- */ 00032 #include "LPC17xx.h" 00033 #include "lpc_types.h" 00034 00035 00036 #ifdef __cplusplus 00037 extern "C" 00038 { 00039 #endif 00040 00041 #define MCB_LPC_1768 00042 //#define IAR_LPC_1768 00043 00044 /* Public Macros -------------------------------------------------------------- */ 00045 /** @defgroup EMAC_Public_Macros EMAC Public Macros 00046 * @{ 00047 */ 00048 00049 00050 /* EMAC PHY status type definitions */ 00051 #define EMAC_PHY_STAT_LINK (0) /**< Link Status */ 00052 #define EMAC_PHY_STAT_SPEED (1) /**< Speed Status */ 00053 #define EMAC_PHY_STAT_DUP (2) /**< Duplex Status */ 00054 00055 /* EMAC PHY device Speed definitions */ 00056 #define EMAC_MODE_AUTO (0) /**< Auto-negotiation mode */ 00057 #define EMAC_MODE_10M_FULL (1) /**< 10Mbps FullDuplex mode */ 00058 #define EMAC_MODE_10M_HALF (2) /**< 10Mbps HalfDuplex mode */ 00059 #define EMAC_MODE_100M_FULL (3) /**< 100Mbps FullDuplex mode */ 00060 #define EMAC_MODE_100M_HALF (4) /**< 100Mbps HalfDuplex mode */ 00061 00062 /** 00063 * @} 00064 */ 00065 /* Private Macros ------------------------------------------------------------- */ 00066 /** @defgroup EMAC_Private_Macros EMAC Private Macros 00067 * @{ 00068 */ 00069 00070 00071 /* EMAC Memory Buffer configuration for 16K Ethernet RAM */ 00072 #define EMAC_NUM_RX_FRAG 6 /**< Num.of RX Fragments 6*1536= 9kB */ 00073 #define EMAC_NUM_TX_FRAG 4 /**< Num.of TX Fragments 4*1536= 6kB */ 00074 #define EMAC_ETH_MAX_FLEN 1536 /**< Max. Ethernet Frame Size */ 00075 #define EMAC_TX_FRAME_TOUT 0x00100000 /**< Frame Transmit timeout count */ 00076 00077 /* --------------------- BIT DEFINITIONS -------------------------------------- */ 00078 /*********************************************************************//** 00079 * Macro defines for MAC Configuration Register 1 00080 **********************************************************************/ 00081 #define EMAC_MAC1_REC_EN 0x00000001 /**< Receive Enable */ 00082 #define EMAC_MAC1_PASS_ALL 0x00000002 /**< Pass All Receive Frames */ 00083 #define EMAC_MAC1_RX_FLOWC 0x00000004 /**< RX Flow Control */ 00084 #define EMAC_MAC1_TX_FLOWC 0x00000008 /**< TX Flow Control */ 00085 #define EMAC_MAC1_LOOPB 0x00000010 /**< Loop Back Mode */ 00086 #define EMAC_MAC1_RES_TX 0x00000100 /**< Reset TX Logic */ 00087 #define EMAC_MAC1_RES_MCS_TX 0x00000200 /**< Reset MAC TX Control Sublayer */ 00088 #define EMAC_MAC1_RES_RX 0x00000400 /**< Reset RX Logic */ 00089 #define EMAC_MAC1_RES_MCS_RX 0x00000800 /**< Reset MAC RX Control Sublayer */ 00090 #define EMAC_MAC1_SIM_RES 0x00004000 /**< Simulation Reset */ 00091 #define EMAC_MAC1_SOFT_RES 0x00008000 /**< Soft Reset MAC */ 00092 00093 /*********************************************************************//** 00094 * Macro defines for MAC Configuration Register 2 00095 **********************************************************************/ 00096 #define EMAC_MAC2_FULL_DUP 0x00000001 /**< Full-Duplex Mode */ 00097 #define EMAC_MAC2_FRM_LEN_CHK 0x00000002 /**< Frame Length Checking */ 00098 #define EMAC_MAC2_HUGE_FRM_EN 0x00000004 /**< Huge Frame Enable */ 00099 #define EMAC_MAC2_DLY_CRC 0x00000008 /**< Delayed CRC Mode */ 00100 #define EMAC_MAC2_CRC_EN 0x00000010 /**< Append CRC to every Frame */ 00101 #define EMAC_MAC2_PAD_EN 0x00000020 /**< Pad all Short Frames */ 00102 #define EMAC_MAC2_VLAN_PAD_EN 0x00000040 /**< VLAN Pad Enable */ 00103 #define EMAC_MAC2_ADET_PAD_EN 0x00000080 /**< Auto Detect Pad Enable */ 00104 #define EMAC_MAC2_PPREAM_ENF 0x00000100 /**< Pure Preamble Enforcement */ 00105 #define EMAC_MAC2_LPREAM_ENF 0x00000200 /**< Long Preamble Enforcement */ 00106 #define EMAC_MAC2_NO_BACKOFF 0x00001000 /**< No Backoff Algorithm */ 00107 #define EMAC_MAC2_BACK_PRESSURE 0x00002000 /**< Backoff Presurre / No Backoff */ 00108 #define EMAC_MAC2_EXCESS_DEF 0x00004000 /**< Excess Defer */ 00109 00110 /*********************************************************************//** 00111 * Macro defines for Back-to-Back Inter-Packet-Gap Register 00112 **********************************************************************/ 00113 /** Programmable field representing the nibble time offset of the minimum possible period 00114 * between the end of any transmitted packet to the beginning of the next */ 00115 #define EMAC_IPGT_BBIPG(n) (n&0x7F) 00116 /** Recommended value for Full Duplex of Programmable field representing the nibble time 00117 * offset of the minimum possible period between the end of any transmitted packet to the 00118 * beginning of the next */ 00119 #define EMAC_IPGT_FULL_DUP (EMAC_IPGT_BBIPG(0x15)) 00120 /** Recommended value for Half Duplex of Programmable field representing the nibble time 00121 * offset of the minimum possible period between the end of any transmitted packet to the 00122 * beginning of the next */ 00123 #define EMAC_IPGT_HALF_DUP (EMAC_IPGT_BBIPG(0x12)) 00124 00125 /*********************************************************************//** 00126 * Macro defines for Non Back-to-Back Inter-Packet-Gap Register 00127 **********************************************************************/ 00128 /** Programmable field representing the Non-Back-to-Back Inter-Packet-Gap */ 00129 #define EMAC_IPGR_NBBIPG_P2(n) (n&0x7F) 00130 /** Recommended value for Programmable field representing the Non-Back-to-Back Inter-Packet-Gap Part 1 */ 00131 #define EMAC_IPGR_P2_DEF (EMAC_IPGR_NBBIPG_P2(0x12)) 00132 /** Programmable field representing the optional carrierSense window referenced in 00133 * IEEE 802.3/4.2.3.2.1 'Carrier Deference' */ 00134 #define EMAC_IPGR_NBBIPG_P1(n) ((n&0x7F)<<8) 00135 /** Recommended value for Programmable field representing the Non-Back-to-Back Inter-Packet-Gap Part 2 */ 00136 #define EMAC_IPGR_P1_DEF EMAC_IPGR_NBBIPG_P1(0x0C) 00137 00138 /*********************************************************************//** 00139 * Macro defines for Collision Window/Retry Register 00140 **********************************************************************/ 00141 /** Programmable field specifying the number of retransmission attempts following a collision before 00142 * aborting the packet due to excessive collisions */ 00143 #define EMAC_CLRT_MAX_RETX(n) (n&0x0F) 00144 /** Programmable field representing the slot time or collision window during which collisions occur 00145 * in properly configured networks */ 00146 #define EMAC_CLRT_COLL(n) ((n&0x3F)<<8) 00147 /** Default value for Collision Window / Retry register */ 00148 #define EMAC_CLRT_DEF ((EMAC_CLRT_MAX_RETX(0x0F))|(EMAC_CLRT_COLL(0x37))) 00149 00150 /*********************************************************************//** 00151 * Macro defines for Maximum Frame Register 00152 **********************************************************************/ 00153 /** Represents a maximum receive frame of 1536 octets */ 00154 #define EMAC_MAXF_MAXFRMLEN(n) (n&0xFFFF) 00155 00156 /*********************************************************************//** 00157 * Macro defines for PHY Support Register 00158 **********************************************************************/ 00159 #define EMAC_SUPP_SPEED 0x00000100 /**< Reduced MII Logic Current Speed */ 00160 #define EMAC_SUPP_RES_RMII 0x00000800 /**< Reset Reduced MII Logic */ 00161 00162 /*********************************************************************//** 00163 * Macro defines for Test Register 00164 **********************************************************************/ 00165 #define EMAC_TEST_SHCUT_PQUANTA 0x00000001 /**< Shortcut Pause Quanta */ 00166 #define EMAC_TEST_TST_PAUSE 0x00000002 /**< Test Pause */ 00167 #define EMAC_TEST_TST_BACKP 0x00000004 /**< Test Back Pressure */ 00168 00169 /*********************************************************************//** 00170 * Macro defines for MII Management Configuration Register 00171 **********************************************************************/ 00172 #define EMAC_MCFG_SCAN_INC 0x00000001 /**< Scan Increment PHY Address */ 00173 #define EMAC_MCFG_SUPP_PREAM 0x00000002 /**< Suppress Preamble */ 00174 #define EMAC_MCFG_CLK_SEL(n) ((n&0x0F)<<2) /**< Clock Select Field */ 00175 #define EMAC_MCFG_RES_MII 0x00008000 /**< Reset MII Management Hardware */ 00176 #define EMAC_MCFG_MII_MAXCLK 2500000UL /**< MII Clock max */ 00177 00178 /*********************************************************************//** 00179 * Macro defines for MII Management Command Register 00180 **********************************************************************/ 00181 #define EMAC_MCMD_READ 0x00000001 /**< MII Read */ 00182 #define EMAC_MCMD_SCAN 0x00000002 /**< MII Scan continuously */ 00183 00184 #define EMAC_MII_WR_TOUT 0x00050000 /**< MII Write timeout count */ 00185 #define EMAC_MII_RD_TOUT 0x00050000 /**< MII Read timeout count */ 00186 00187 /*********************************************************************//** 00188 * Macro defines for MII Management Address Register 00189 **********************************************************************/ 00190 #define EMAC_MADR_REG_ADR(n) (n&0x1F) /**< MII Register Address field */ 00191 #define EMAC_MADR_PHY_ADR(n) ((n&0x1F)<<8) /**< PHY Address Field */ 00192 00193 /*********************************************************************//** 00194 * Macro defines for MII Management Write Data Register 00195 **********************************************************************/ 00196 #define EMAC_MWTD_DATA(n) (n&0xFFFF) /**< Data field for MMI Management Write Data register */ 00197 00198 /*********************************************************************//** 00199 * Macro defines for MII Management Read Data Register 00200 **********************************************************************/ 00201 #define EMAC_MRDD_DATA(n) (n&0xFFFF) /**< Data field for MMI Management Read Data register */ 00202 00203 /*********************************************************************//** 00204 * Macro defines for MII Management Indicators Register 00205 **********************************************************************/ 00206 #define EMAC_MIND_BUSY 0x00000001 /**< MII is Busy */ 00207 #define EMAC_MIND_SCAN 0x00000002 /**< MII Scanning in Progress */ 00208 #define EMAC_MIND_NOT_VAL 0x00000004 /**< MII Read Data not valid */ 00209 #define EMAC_MIND_MII_LINK_FAIL 0x00000008 /**< MII Link Failed */ 00210 00211 /* Station Address 0 Register */ 00212 /* Station Address 1 Register */ 00213 /* Station Address 2 Register */ 00214 00215 00216 /* Control register definitions --------------------------------------------------------------------------- */ 00217 /*********************************************************************//** 00218 * Macro defines for Command Register 00219 **********************************************************************/ 00220 #define EMAC_CR_RX_EN 0x00000001 /**< Enable Receive */ 00221 #define EMAC_CR_TX_EN 0x00000002 /**< Enable Transmit */ 00222 #define EMAC_CR_REG_RES 0x00000008 /**< Reset Host Registers */ 00223 #define EMAC_CR_TX_RES 0x00000010 /**< Reset Transmit Datapath */ 00224 #define EMAC_CR_RX_RES 0x00000020 /**< Reset Receive Datapath */ 00225 #define EMAC_CR_PASS_RUNT_FRM 0x00000040 /**< Pass Runt Frames */ 00226 #define EMAC_CR_PASS_RX_FILT 0x00000080 /**< Pass RX Filter */ 00227 #define EMAC_CR_TX_FLOW_CTRL 0x00000100 /**< TX Flow Control */ 00228 #define EMAC_CR_RMII 0x00000200 /**< Reduced MII Interface */ 00229 #define EMAC_CR_FULL_DUP 0x00000400 /**< Full Duplex */ 00230 00231 /*********************************************************************//** 00232 * Macro defines for Status Register 00233 **********************************************************************/ 00234 #define EMAC_SR_RX_EN 0x00000001 /**< Enable Receive */ 00235 #define EMAC_SR_TX_EN 0x00000002 /**< Enable Transmit */ 00236 00237 /*********************************************************************//** 00238 * Macro defines for Transmit Status Vector 0 Register 00239 **********************************************************************/ 00240 #define EMAC_TSV0_CRC_ERR 0x00000001 /**< CRC error */ 00241 #define EMAC_TSV0_LEN_CHKERR 0x00000002 /**< Length Check Error */ 00242 #define EMAC_TSV0_LEN_OUTRNG 0x00000004 /**< Length Out of Range */ 00243 #define EMAC_TSV0_DONE 0x00000008 /**< Tramsmission Completed */ 00244 #define EMAC_TSV0_MCAST 0x00000010 /**< Multicast Destination */ 00245 #define EMAC_TSV0_BCAST 0x00000020 /**< Broadcast Destination */ 00246 #define EMAC_TSV0_PKT_DEFER 0x00000040 /**< Packet Deferred */ 00247 #define EMAC_TSV0_EXC_DEFER 0x00000080 /**< Excessive Packet Deferral */ 00248 #define EMAC_TSV0_EXC_COLL 0x00000100 /**< Excessive Collision */ 00249 #define EMAC_TSV0_LATE_COLL 0x00000200 /**< Late Collision Occured */ 00250 #define EMAC_TSV0_GIANT 0x00000400 /**< Giant Frame */ 00251 #define EMAC_TSV0_UNDERRUN 0x00000800 /**< Buffer Underrun */ 00252 #define EMAC_TSV0_BYTES 0x0FFFF000 /**< Total Bytes Transferred */ 00253 #define EMAC_TSV0_CTRL_FRAME 0x10000000 /**< Control Frame */ 00254 #define EMAC_TSV0_PAUSE 0x20000000 /**< Pause Frame */ 00255 #define EMAC_TSV0_BACK_PRESS 0x40000000 /**< Backpressure Method Applied */ 00256 #define EMAC_TSV0_VLAN 0x80000000 /**< VLAN Frame */ 00257 00258 /*********************************************************************//** 00259 * Macro defines for Transmit Status Vector 1 Register 00260 **********************************************************************/ 00261 #define EMAC_TSV1_BYTE_CNT 0x0000FFFF /**< Transmit Byte Count */ 00262 #define EMAC_TSV1_COLL_CNT 0x000F0000 /**< Transmit Collision Count */ 00263 00264 /*********************************************************************//** 00265 * Macro defines for Receive Status Vector Register 00266 **********************************************************************/ 00267 #define EMAC_RSV_BYTE_CNT 0x0000FFFF /**< Receive Byte Count */ 00268 #define EMAC_RSV_PKT_IGNORED 0x00010000 /**< Packet Previously Ignored */ 00269 #define EMAC_RSV_RXDV_SEEN 0x00020000 /**< RXDV Event Previously Seen */ 00270 #define EMAC_RSV_CARR_SEEN 0x00040000 /**< Carrier Event Previously Seen */ 00271 #define EMAC_RSV_REC_CODEV 0x00080000 /**< Receive Code Violation */ 00272 #define EMAC_RSV_CRC_ERR 0x00100000 /**< CRC Error */ 00273 #define EMAC_RSV_LEN_CHKERR 0x00200000 /**< Length Check Error */ 00274 #define EMAC_RSV_LEN_OUTRNG 0x00400000 /**< Length Out of Range */ 00275 #define EMAC_RSV_REC_OK 0x00800000 /**< Frame Received OK */ 00276 #define EMAC_RSV_MCAST 0x01000000 /**< Multicast Frame */ 00277 #define EMAC_RSV_BCAST 0x02000000 /**< Broadcast Frame */ 00278 #define EMAC_RSV_DRIB_NIBB 0x04000000 /**< Dribble Nibble */ 00279 #define EMAC_RSV_CTRL_FRAME 0x08000000 /**< Control Frame */ 00280 #define EMAC_RSV_PAUSE 0x10000000 /**< Pause Frame */ 00281 #define EMAC_RSV_UNSUPP_OPC 0x20000000 /**< Unsupported Opcode */ 00282 #define EMAC_RSV_VLAN 0x40000000 /**< VLAN Frame */ 00283 00284 /*********************************************************************//** 00285 * Macro defines for Flow Control Counter Register 00286 **********************************************************************/ 00287 #define EMAC_FCC_MIRR_CNT(n) (n&0xFFFF) /**< Mirror Counter */ 00288 #define EMAC_FCC_PAUSE_TIM(n) ((n&0xFFFF)<<16) /**< Pause Timer */ 00289 00290 /*********************************************************************//** 00291 * Macro defines for Flow Control Status Register 00292 **********************************************************************/ 00293 #define EMAC_FCS_MIRR_CNT(n) (n&0xFFFF) /**< Mirror Counter Current */ 00294 00295 00296 /* Receive filter register definitions -------------------------------------------------------- */ 00297 /*********************************************************************//** 00298 * Macro defines for Receive Filter Control Register 00299 **********************************************************************/ 00300 #define EMAC_RFC_UCAST_EN 0x00000001 /**< Accept Unicast Frames Enable */ 00301 #define EMAC_RFC_BCAST_EN 0x00000002 /**< Accept Broadcast Frames Enable */ 00302 #define EMAC_RFC_MCAST_EN 0x00000004 /**< Accept Multicast Frames Enable */ 00303 #define EMAC_RFC_UCAST_HASH_EN 0x00000008 /**< Accept Unicast Hash Filter Frames */ 00304 #define EMAC_RFC_MCAST_HASH_EN 0x00000010 /**< Accept Multicast Hash Filter Fram.*/ 00305 #define EMAC_RFC_PERFECT_EN 0x00000020 /**< Accept Perfect Match Enable */ 00306 #define EMAC_RFC_MAGP_WOL_EN 0x00001000 /**< Magic Packet Filter WoL Enable */ 00307 #define EMAC_RFC_PFILT_WOL_EN 0x00002000 /**< Perfect Filter WoL Enable */ 00308 00309 /*********************************************************************//** 00310 * Macro defines for Receive Filter WoL Status/Clear Registers 00311 **********************************************************************/ 00312 #define EMAC_WOL_UCAST 0x00000001 /**< Unicast Frame caused WoL */ 00313 #define EMAC_WOL_BCAST 0x00000002 /**< Broadcast Frame caused WoL */ 00314 #define EMAC_WOL_MCAST 0x00000004 /**< Multicast Frame caused WoL */ 00315 #define EMAC_WOL_UCAST_HASH 0x00000008 /**< Unicast Hash Filter Frame WoL */ 00316 #define EMAC_WOL_MCAST_HASH 0x00000010 /**< Multicast Hash Filter Frame WoL */ 00317 #define EMAC_WOL_PERFECT 0x00000020 /**< Perfect Filter WoL */ 00318 #define EMAC_WOL_RX_FILTER 0x00000080 /**< RX Filter caused WoL */ 00319 #define EMAC_WOL_MAG_PACKET 0x00000100 /**< Magic Packet Filter caused WoL */ 00320 #define EMAC_WOL_BITMASK 0x01BF /**< Receive Filter WoL Status/Clear bitmasl value */ 00321 00322 00323 /* Module control register definitions ---------------------------------------------------- */ 00324 /*********************************************************************//** 00325 * Macro defines for Interrupt Status/Enable/Clear/Set Registers 00326 **********************************************************************/ 00327 #define EMAC_INT_RX_OVERRUN 0x00000001 /**< Overrun Error in RX Queue */ 00328 #define EMAC_INT_RX_ERR 0x00000002 /**< Receive Error */ 00329 #define EMAC_INT_RX_FIN 0x00000004 /**< RX Finished Process Descriptors */ 00330 #define EMAC_INT_RX_DONE 0x00000008 /**< Receive Done */ 00331 #define EMAC_INT_TX_UNDERRUN 0x00000010 /**< Transmit Underrun */ 00332 #define EMAC_INT_TX_ERR 0x00000020 /**< Transmit Error */ 00333 #define EMAC_INT_TX_FIN 0x00000040 /**< TX Finished Process Descriptors */ 00334 #define EMAC_INT_TX_DONE 0x00000080 /**< Transmit Done */ 00335 #define EMAC_INT_SOFT_INT 0x00001000 /**< Software Triggered Interrupt */ 00336 #define EMAC_INT_WAKEUP 0x00002000 /**< Wakeup Event Interrupt */ 00337 00338 /*********************************************************************//** 00339 * Macro defines for Power Down Register 00340 **********************************************************************/ 00341 #define EMAC_PD_POWER_DOWN 0x80000000 /**< Power Down MAC */ 00342 00343 /* Descriptor and status formats ---------------------------------------------------- */ 00344 /*********************************************************************//** 00345 * Macro defines for RX Descriptor Control Word 00346 **********************************************************************/ 00347 #define EMAC_RCTRL_SIZE(n) (n&0x7FF) /**< Buffer size field */ 00348 #define EMAC_RCTRL_INT 0x80000000 /**< Generate RxDone Interrupt */ 00349 00350 /*********************************************************************//** 00351 * Macro defines for RX Status Hash CRC Word 00352 **********************************************************************/ 00353 #define EMAC_RHASH_SA 0x000001FF /**< Hash CRC for Source Address */ 00354 #define EMAC_RHASH_DA 0x001FF000 /**< Hash CRC for Destination Address */ 00355 00356 /*********************************************************************//** 00357 * Macro defines for RX Status Information Word 00358 **********************************************************************/ 00359 #define EMAC_RINFO_SIZE 0x000007FF /**< Data size in bytes */ 00360 #define EMAC_RINFO_CTRL_FRAME 0x00040000 /**< Control Frame */ 00361 #define EMAC_RINFO_VLAN 0x00080000 /**< VLAN Frame */ 00362 #define EMAC_RINFO_FAIL_FILT 0x00100000 /**< RX Filter Failed */ 00363 #define EMAC_RINFO_MCAST 0x00200000 /**< Multicast Frame */ 00364 #define EMAC_RINFO_BCAST 0x00400000 /**< Broadcast Frame */ 00365 #define EMAC_RINFO_CRC_ERR 0x00800000 /**< CRC Error in Frame */ 00366 #define EMAC_RINFO_SYM_ERR 0x01000000 /**< Symbol Error from PHY */ 00367 #define EMAC_RINFO_LEN_ERR 0x02000000 /**< Length Error */ 00368 #define EMAC_RINFO_RANGE_ERR 0x04000000 /**< Range Error (exceeded max. size) */ 00369 #define EMAC_RINFO_ALIGN_ERR 0x08000000 /**< Alignment Error */ 00370 #define EMAC_RINFO_OVERRUN 0x10000000 /**< Receive overrun */ 00371 #define EMAC_RINFO_NO_DESCR 0x20000000 /**< No new Descriptor available */ 00372 #define EMAC_RINFO_LAST_FLAG 0x40000000 /**< Last Fragment in Frame */ 00373 #define EMAC_RINFO_ERR 0x80000000 /**< Error Occured (OR of all errors) */ 00374 #define EMAC_RINFO_ERR_MASK (EMAC_RINFO_FAIL_FILT | EMAC_RINFO_CRC_ERR | EMAC_RINFO_SYM_ERR | \ 00375 EMAC_RINFO_LEN_ERR | EMAC_RINFO_ALIGN_ERR | EMAC_RINFO_OVERRUN) 00376 00377 /*********************************************************************//** 00378 * Macro defines for TX Descriptor Control Word 00379 **********************************************************************/ 00380 #define EMAC_TCTRL_SIZE 0x000007FF /**< Size of data buffer in bytes */ 00381 #define EMAC_TCTRL_OVERRIDE 0x04000000 /**< Override Default MAC Registers */ 00382 #define EMAC_TCTRL_HUGE 0x08000000 /**< Enable Huge Frame */ 00383 #define EMAC_TCTRL_PAD 0x10000000 /**< Pad short Frames to 64 bytes */ 00384 #define EMAC_TCTRL_CRC 0x20000000 /**< Append a hardware CRC to Frame */ 00385 #define EMAC_TCTRL_LAST 0x40000000 /**< Last Descriptor for TX Frame */ 00386 #define EMAC_TCTRL_INT 0x80000000 /**< Generate TxDone Interrupt */ 00387 00388 /*********************************************************************//** 00389 * Macro defines for TX Status Information Word 00390 **********************************************************************/ 00391 #define EMAC_TINFO_COL_CNT 0x01E00000 /**< Collision Count */ 00392 #define EMAC_TINFO_DEFER 0x02000000 /**< Packet Deferred (not an error) */ 00393 #define EMAC_TINFO_EXCESS_DEF 0x04000000 /**< Excessive Deferral */ 00394 #define EMAC_TINFO_EXCESS_COL 0x08000000 /**< Excessive Collision */ 00395 #define EMAC_TINFO_LATE_COL 0x10000000 /**< Late Collision Occured */ 00396 #define EMAC_TINFO_UNDERRUN 0x20000000 /**< Transmit Underrun */ 00397 #define EMAC_TINFO_NO_DESCR 0x40000000 /**< No new Descriptor available */ 00398 #define EMAC_TINFO_ERR 0x80000000 /**< Error Occured (OR of all errors) */ 00399 00400 #ifdef MCB_LPC_1768 00401 /* DP83848C PHY definition ------------------------------------------------------------ */ 00402 00403 /** PHY device reset time out definition */ 00404 #define EMAC_PHY_RESP_TOUT 0x100000UL 00405 00406 /* ENET Device Revision ID */ 00407 #define EMAC_OLD_EMAC_MODULE_ID 0x39022000 /**< Rev. ID for first rev '-' */ 00408 00409 /*********************************************************************//** 00410 * Macro defines for DP83848C PHY Registers 00411 **********************************************************************/ 00412 #define EMAC_PHY_REG_BMCR 0x00 /**< Basic Mode Control Register */ 00413 #define EMAC_PHY_REG_BMSR 0x01 /**< Basic Mode Status Register */ 00414 #define EMAC_PHY_REG_IDR1 0x02 /**< PHY Identifier 1 */ 00415 #define EMAC_PHY_REG_IDR2 0x03 /**< PHY Identifier 2 */ 00416 #define EMAC_PHY_REG_ANAR 0x04 /**< Auto-Negotiation Advertisement */ 00417 #define EMAC_PHY_REG_ANLPAR 0x05 /**< Auto-Neg. Link Partner Abitily */ 00418 #define EMAC_PHY_REG_ANER 0x06 /**< Auto-Neg. Expansion Register */ 00419 #define EMAC_PHY_REG_ANNPTR 0x07 /**< Auto-Neg. Next Page TX */ 00420 #define EMAC_PHY_REG_LPNPA 0x08 00421 00422 /*********************************************************************//** 00423 * Macro defines for PHY Extended Registers 00424 **********************************************************************/ 00425 #define EMAC_PHY_REG_STS 0x10 /**< Status Register */ 00426 #define EMAC_PHY_REG_MICR 0x11 /**< MII Interrupt Control Register */ 00427 #define EMAC_PHY_REG_MISR 0x12 /**< MII Interrupt Status Register */ 00428 #define EMAC_PHY_REG_FCSCR 0x14 /**< False Carrier Sense Counter */ 00429 #define EMAC_PHY_REG_RECR 0x15 /**< Receive Error Counter */ 00430 #define EMAC_PHY_REG_PCSR 0x16 /**< PCS Sublayer Config. and Status */ 00431 #define EMAC_PHY_REG_RBR 0x17 /**< RMII and Bypass Register */ 00432 #define EMAC_PHY_REG_LEDCR 0x18 /**< LED Direct Control Register */ 00433 #define EMAC_PHY_REG_PHYCR 0x19 /**< PHY Control Register */ 00434 #define EMAC_PHY_REG_10BTSCR 0x1A /**< 10Base-T Status/Control Register */ 00435 #define EMAC_PHY_REG_CDCTRL1 0x1B /**< CD Test Control and BIST Extens. */ 00436 #define EMAC_PHY_REG_EDCR 0x1D /**< Energy Detect Control Register */ 00437 00438 /*********************************************************************//** 00439 * Macro defines for PHY Basic Mode Control Register 00440 **********************************************************************/ 00441 #define EMAC_PHY_BMCR_RESET (1<<15) /**< Reset bit */ 00442 #define EMAC_PHY_BMCR_LOOPBACK (1<<14) /**< Loop back */ 00443 #define EMAC_PHY_BMCR_SPEED_SEL (1<<13) /**< Speed selection */ 00444 #define EMAC_PHY_BMCR_AN (1<<12) /**< Auto Negotiation */ 00445 #define EMAC_PHY_BMCR_POWERDOWN (1<<11) /**< Power down mode */ 00446 #define EMAC_PHY_BMCR_ISOLATE (1<<10) /**< Isolate */ 00447 #define EMAC_PHY_BMCR_RE_AN (1<<9) /**< Restart auto negotiation */ 00448 #define EMAC_PHY_BMCR_DUPLEX (1<<8) /**< Duplex mode */ 00449 00450 /*********************************************************************//** 00451 * Macro defines for PHY Basic Mode Status Status Register 00452 **********************************************************************/ 00453 #define EMAC_PHY_BMSR_100BE_T4 (1<<15) /**< 100 base T4 */ 00454 #define EMAC_PHY_BMSR_100TX_FULL (1<<14) /**< 100 base full duplex */ 00455 #define EMAC_PHY_BMSR_100TX_HALF (1<<13) /**< 100 base half duplex */ 00456 #define EMAC_PHY_BMSR_10BE_FULL (1<<12) /**< 10 base T full duplex */ 00457 #define EMAC_PHY_BMSR_10BE_HALF (1<<11) /**< 10 base T half duplex */ 00458 #define EMAC_PHY_BMSR_NOPREAM (1<<6) /**< MF Preamable Supress */ 00459 #define EMAC_PHY_BMSR_AUTO_DONE (1<<5) /**< Auto negotiation complete */ 00460 #define EMAC_PHY_BMSR_REMOTE_FAULT (1<<4) /**< Remote fault */ 00461 #define EMAC_PHY_BMSR_NO_AUTO (1<<3) /**< Auto Negotiation ability */ 00462 #define EMAC_PHY_BMSR_LINK_ESTABLISHED (1<<2) /**< Link status */ 00463 00464 /*********************************************************************//** 00465 * Macro defines for PHY Status Register 00466 **********************************************************************/ 00467 #define EMAC_PHY_SR_REMOTE_FAULT (1<<6) /**< Remote Fault */ 00468 #define EMAC_PHY_SR_JABBER (1<<5) /**< Jabber detect */ 00469 #define EMAC_PHY_SR_AUTO_DONE (1<<4) /**< Auto Negotiation complete */ 00470 #define EMAC_PHY_SR_LOOPBACK (1<<3) /**< Loop back status */ 00471 #define EMAC_PHY_SR_DUP (1<<2) /**< Duplex status */ 00472 #define EMAC_PHY_SR_SPEED (1<<1) /**< Speed status */ 00473 #define EMAC_PHY_SR_LINK (1<<0) /**< Link Status */ 00474 00475 #define EMAC_PHY_FULLD_100M 0x2100 /**< Full Duplex 100Mbit */ 00476 #define EMAC_PHY_HALFD_100M 0x2000 /**< Half Duplex 100Mbit */ 00477 #define EMAC_PHY_FULLD_10M 0x0100 /**< Full Duplex 10Mbit */ 00478 #define EMAC_PHY_HALFD_10M 0x0000 /**< Half Duplex 10MBit */ 00479 #define EMAC_PHY_AUTO_NEG 0x3000 /**< Select Auto Negotiation */ 00480 00481 #define EMAC_DEF_ADR 0x0100 /**< Default PHY device address */ 00482 #define EMAC_DP83848C_ID 0x20005C90 /**< PHY Identifier */ 00483 00484 #define EMAC_PHY_SR_100_SPEED ((1<<14)|(1<<13)) 00485 #define EMAC_PHY_SR_FULL_DUP ((1<<14)|(1<<12)) 00486 #define EMAC_PHY_BMSR_LINK_STATUS (1<<2) /**< Link status */ 00487 00488 #elif defined(IAR_LPC_1768) 00489 /* KSZ8721BL PHY definition ------------------------------------------------------------ */ 00490 /** PHY device reset time out definition */ 00491 #define EMAC_PHY_RESP_TOUT 0x100000UL 00492 00493 /* ENET Device Revision ID */ 00494 #define EMAC_OLD_EMAC_MODULE_ID 0x39022000 /**< Rev. ID for first rev '-' */ 00495 00496 /*********************************************************************//** 00497 * Macro defines for KSZ8721BL PHY Registers 00498 **********************************************************************/ 00499 #define EMAC_PHY_REG_BMCR 0x00 /**< Basic Mode Control Register */ 00500 #define EMAC_PHY_REG_BMSR 0x01 /**< Basic Mode Status Register */ 00501 #define EMAC_PHY_REG_IDR1 0x02 /**< PHY Identifier 1 */ 00502 #define EMAC_PHY_REG_IDR2 0x03 /**< PHY Identifier 2 */ 00503 #define EMAC_PHY_REG_ANAR 0x04 /**< Auto-Negotiation Advertisement */ 00504 #define EMAC_PHY_REG_ANLPAR 0x05 /**< Auto-Neg. Link Partner Abitily */ 00505 #define EMAC_PHY_REG_ANER 0x06 /**< Auto-Neg. Expansion Register */ 00506 #define EMAC_PHY_REG_ANNPTR 0x07 /**< Auto-Neg. Next Page TX */ 00507 #define EMAC_PHY_REG_LPNPA 0x08 /**< Link Partner Next Page Ability */ 00508 #define EMAC_PHY_REG_REC 0x15 /**< RXError Counter Register */ 00509 #define EMAC_PHY_REG_ISC 0x1b /**< Interrupt Control/Status Register */ 00510 #define EMAC_PHY_REG_100BASE 0x1f /**< 100BASE-TX PHY Control Register */ 00511 00512 /*********************************************************************//** 00513 * Macro defines for PHY Basic Mode Control Register 00514 **********************************************************************/ 00515 #define EMAC_PHY_BMCR_RESET (1<<15) /**< Reset bit */ 00516 #define EMAC_PHY_BMCR_LOOPBACK (1<<14) /**< Loop back */ 00517 #define EMAC_PHY_BMCR_SPEED_SEL (1<<13) /**< Speed selection */ 00518 #define EMAC_PHY_BMCR_AN (1<<12) /**< Auto Negotiation */ 00519 #define EMAC_PHY_BMCR_POWERDOWN (1<<11) /**< Power down mode */ 00520 #define EMAC_PHY_BMCR_ISOLATE (1<<10) /**< Isolate */ 00521 #define EMAC_PHY_BMCR_RE_AN (1<<9) /**< Restart auto negotiation */ 00522 #define EMAC_PHY_BMCR_DUPLEX (1<<8) /**< Duplex mode */ 00523 #define EMAC_PHY_BMCR_COLLISION (1<<7) /**< Collision test */ 00524 #define EMAC_PHY_BMCR_TXDIS (1<<0) /**< Disable transmit */ 00525 00526 /*********************************************************************//** 00527 * Macro defines for PHY Basic Mode Status Register 00528 **********************************************************************/ 00529 #define EMAC_PHY_BMSR_100BE_T4 (1<<15) /**< 100 base T4 */ 00530 #define EMAC_PHY_BMSR_100TX_FULL (1<<14) /**< 100 base full duplex */ 00531 #define EMAC_PHY_BMSR_100TX_HALF (1<<13) /**< 100 base half duplex */ 00532 #define EMAC_PHY_BMSR_10BE_FULL (1<<12) /**< 10 base T full duplex */ 00533 #define EMAC_PHY_BMSR_10BE_HALF (1<<11) /**< 10 base T half duplex */ 00534 #define EMAC_PHY_BMSR_NOPREAM (1<<6) /**< MF Preamable Supress */ 00535 #define EMAC_PHY_BMSR_AUTO_DONE (1<<5) /**< Auto negotiation complete */ 00536 #define EMAC_PHY_BMSR_REMOTE_FAULT (1<<4) /**< Remote fault */ 00537 #define EMAC_PHY_BMSR_NO_AUTO (1<<3) /**< Auto Negotiation ability */ 00538 #define EMAC_PHY_BMSR_LINK_STATUS (1<<2) /**< Link status */ 00539 #define EMAC_PHY_BMSR_JABBER_DETECT (1<<1) /**< Jabber detect */ 00540 #define EMAC_PHY_BMSR_EXTEND (1<<0) /**< Extended support */ 00541 00542 /*********************************************************************//** 00543 * Macro defines for PHY Identifier 00544 **********************************************************************/ 00545 /* PHY Identifier 1 bitmap definitions */ 00546 #define EMAC_PHY_IDR1(n) (n & 0xFFFF) /**< PHY ID1 Number */ 00547 00548 /* PHY Identifier 2 bitmap definitions */ 00549 #define EMAC_PHY_IDR2(n) (n & 0xFFFF) /**< PHY ID2 Number */ 00550 00551 /*********************************************************************//** 00552 * Macro defines for Auto-Negotiation Advertisement 00553 **********************************************************************/ 00554 #define EMAC_PHY_AN_NEXTPAGE (1<<15) /**< Next page capable */ 00555 #define EMAC_PHY_AN_REMOTE_FAULT (1<<13) /**< Remote Fault support */ 00556 #define EMAC_PHY_AN_PAUSE (1<<10) /**< Pause support */ 00557 #define EMAC_PHY_AN_100BASE_T4 (1<<9) /**< T4 capable */ 00558 #define EMAC_PHY_AN_100BASE_TX_FD (1<<8) /**< TX with Full-duplex capable */ 00559 #define EMAC_PHY_AN_100BASE_TX (1<<7) /**< TX capable */ 00560 #define EMAC_PHY_AN_10BASE_T_FD (1<<6) /**< 10Mbps with full-duplex capable */ 00561 #define EMAC_PHY_AN_10BASE_T (1<<5) /**< 10Mbps capable */ 00562 #define EMAC_PHY_AN_FIELD(n) (n & 0x1F) /**< Selector Field */ 00563 00564 #define EMAC_PHY_FULLD_100M 0x2100 /**< Full Duplex 100Mbit */ 00565 #define EMAC_PHY_HALFD_100M 0x2000 /**< Half Duplex 100Mbit */ 00566 #define EMAC_PHY_FULLD_10M 0x0100 /**< Full Duplex 10Mbit */ 00567 #define EMAC_PHY_HALFD_10M 0x0000 /**< Half Duplex 10MBit */ 00568 #define EMAC_PHY_AUTO_NEG 0x3000 /**< Select Auto Negotiation */ 00569 00570 #define EMAC_PHY_SR_100_SPEED ((1<<14)|(1<<13)) 00571 #define EMAC_PHY_SR_FULL_DUP ((1<<14)|(1<<12)) 00572 00573 #define EMAC_DEF_ADR (0x01<<8) /**< Default PHY device address */ 00574 #define EMAC_KSZ8721BL_ID ((0x22 << 16) | 0x1619 ) /**< PHY Identifier */ 00575 #endif 00576 00577 /** 00578 * @} 00579 */ 00580 00581 00582 /* Public Types --------------------------------------------------------------- */ 00583 /** @defgroup EMAC_Public_Types EMAC Public Types 00584 * @{ 00585 */ 00586 00587 /* Descriptor and status formats ---------------------------------------------- */ 00588 00589 /** 00590 * @brief RX Descriptor structure type definition 00591 */ 00592 typedef struct { 00593 uint32_t Packet; /**< Receive Packet Descriptor */ 00594 uint32_t Ctrl; /**< Receive Control Descriptor */ 00595 } RX_Desc; 00596 00597 /** 00598 * @brief RX Status structure type definition 00599 */ 00600 typedef struct { 00601 uint32_t Info; /**< Receive Information Status */ 00602 uint32_t HashCRC; /**< Receive Hash CRC Status */ 00603 } RX_Stat; 00604 00605 /** 00606 * @brief TX Descriptor structure type definition 00607 */ 00608 typedef struct { 00609 uint32_t Packet; /**< Transmit Packet Descriptor */ 00610 uint32_t Ctrl; /**< Transmit Control Descriptor */ 00611 } TX_Desc; 00612 00613 /** 00614 * @brief TX Status structure type definition 00615 */ 00616 typedef struct { 00617 uint32_t Info; /**< Transmit Information Status */ 00618 } TX_Stat; 00619 00620 00621 /** 00622 * @brief TX Data Buffer structure definition 00623 */ 00624 typedef struct { 00625 uint32_t ulDataLen; /**< Data length */ 00626 uint32_t *pbDataBuf; /**< A word-align data pointer to data buffer */ 00627 } EMAC_PACKETBUF_Type; 00628 00629 /** 00630 * @brief EMAC configuration structure definition 00631 */ 00632 typedef struct { 00633 uint32_t Mode; /**< Supported EMAC PHY device speed, should be one of the following: 00634 - EMAC_MODE_AUTO 00635 - EMAC_MODE_10M_FULL 00636 - EMAC_MODE_10M_HALF 00637 - EMAC_MODE_100M_FULL 00638 - EMAC_MODE_100M_HALF 00639 */ 00640 uint8_t *pbEMAC_Addr; /**< Pointer to EMAC Station address that contains 6-bytes 00641 of MAC address, it must be sorted in order (bEMAC_Addr[0]..[5]) 00642 */ 00643 } EMAC_CFG_Type; 00644 00645 00646 /** 00647 * @} 00648 */ 00649 00650 00651 /* Public Functions ----------------------------------------------------------- */ 00652 /** @defgroup EMAC_Public_Functions EMAC Public Functions 00653 * @{ 00654 */ 00655 /* Init/DeInit EMAC peripheral */ 00656 Status EMAC_Init(EMAC_CFG_Type *EMAC_ConfigStruct); 00657 void EMAC_DeInit(void); 00658 00659 /* PHY functions --------------*/ 00660 int32_t EMAC_CheckPHYStatus(uint32_t ulPHYState); 00661 int32_t EMAC_SetPHYMode(uint32_t ulPHYMode); 00662 int32_t EMAC_UpdatePHYStatus(void); 00663 00664 /* Filter functions ----------*/ 00665 void EMAC_SetHashFilter(uint8_t dstMAC_addr[], FunctionalState NewState); 00666 void EMAC_SetFilterMode(uint32_t ulFilterMode, FunctionalState NewState); 00667 00668 /* EMAC Packet Buffer functions */ 00669 void EMAC_WritePacketBuffer(EMAC_PACKETBUF_Type *pDataStruct); 00670 void EMAC_ReadPacketBuffer(EMAC_PACKETBUF_Type *pDataStruct); 00671 00672 /* EMAC Interrupt functions -------*/ 00673 void EMAC_IntCmd(uint32_t ulIntType, FunctionalState NewState); 00674 IntStatus EMAC_IntGetStatus(uint32_t ulIntType); 00675 00676 /* EMAC Index functions -----------*/ 00677 Bool EMAC_CheckReceiveIndex(void); 00678 Bool EMAC_CheckTransmitIndex(void); 00679 void EMAC_UpdateRxConsumeIndex(void); 00680 void EMAC_UpdateTxProduceIndex(void); 00681 00682 FlagStatus EMAC_CheckReceiveDataStatus(uint32_t ulRxStatType); 00683 uint32_t EMAC_GetReceiveDataSize(void); 00684 FlagStatus EMAC_GetWoLStatus(uint32_t ulWoLMode); 00685 00686 /** 00687 * @} 00688 */ 00689 00690 #ifdef __cplusplus 00691 } 00692 #endif 00693 00694 #endif /* LPC17XX_EMAC_H_ */ 00695 00696 /** 00697 * @} 00698 */ 00699 00700 /* --------------------------------- End Of File ------------------------------ */ 00701 /* @endcond */
Generated on Wed Jul 13 2022 06:09:33 by 1.7.2