These are the examples provided for [[/users/frank26080115/libraries/LPC1700CMSIS_Lib/]] Note, the entire "program" is not compilable!

Committer:
frank26080115
Date:
Sun Mar 20 05:38:56 2011 +0000
Revision:
0:bf7b9fba3924

        

Who changed what in which revision?

UserRevisionLine numberNew contents of line
frank26080115 0:bf7b9fba3924 1 #include "emac.h"
frank26080115 0:bf7b9fba3924 2 #include "lpc17xx_emac.h"
frank26080115 0:bf7b9fba3924 3 #include "lpc17xx_pinsel.h"
frank26080115 0:bf7b9fba3924 4 #include <string.h>
frank26080115 0:bf7b9fba3924 5 #include <stdio.h>
frank26080115 0:bf7b9fba3924 6
frank26080115 0:bf7b9fba3924 7
frank26080115 0:bf7b9fba3924 8 /* For debugging... */
frank26080115 0:bf7b9fba3924 9 #include "debug_frmwrk.h"
frank26080115 0:bf7b9fba3924 10 #include <stdio.h>
frank26080115 0:bf7b9fba3924 11
frank26080115 0:bf7b9fba3924 12 /* Example group ----------------------------------------------------------- */
frank26080115 0:bf7b9fba3924 13 /** @defgroup EMAC_uIP uIP
frank26080115 0:bf7b9fba3924 14 * @ingroup EMAC_Examples
frank26080115 0:bf7b9fba3924 15 * @{
frank26080115 0:bf7b9fba3924 16 */
frank26080115 0:bf7b9fba3924 17
frank26080115 0:bf7b9fba3924 18 #define DB _DBG((uint8_t *)db)
frank26080115 0:bf7b9fba3924 19 char db[64];
frank26080115 0:bf7b9fba3924 20
frank26080115 0:bf7b9fba3924 21 /* Init the LPC17xx ethernet */
frank26080115 0:bf7b9fba3924 22 BOOL_8 tapdev_init(void)
frank26080115 0:bf7b9fba3924 23 {
frank26080115 0:bf7b9fba3924 24 /* EMAC configuration type */
frank26080115 0:bf7b9fba3924 25 EMAC_CFG_Type Emac_Config;
frank26080115 0:bf7b9fba3924 26 /* pin configuration */
frank26080115 0:bf7b9fba3924 27 PINSEL_CFG_Type PinCfg;
frank26080115 0:bf7b9fba3924 28 /* EMAC address */
frank26080115 0:bf7b9fba3924 29 uint8_t EMACAddr[] = {EMAC_ADDR0, EMAC_ADDR1, EMAC_ADDR2, \
frank26080115 0:bf7b9fba3924 30 EMAC_ADDR3, EMAC_ADDR4, EMAC_ADDR5};
frank26080115 0:bf7b9fba3924 31
frank26080115 0:bf7b9fba3924 32 #if AUTO_NEGOTIATION_ENA != 0
frank26080115 0:bf7b9fba3924 33 Emac_Config.Mode = EMAC_MODE_AUTO;
frank26080115 0:bf7b9fba3924 34 #else
frank26080115 0:bf7b9fba3924 35 #if (FIX_SPEED == SPEED_100)
frank26080115 0:bf7b9fba3924 36 #if (FIX_DUPLEX == FULL_DUPLEX)
frank26080115 0:bf7b9fba3924 37 Emac_Config.Mode = EMAC_MODE_100M_FULL;
frank26080115 0:bf7b9fba3924 38 #elif (FIX_DUPLEX == HALF_DUPLEX)
frank26080115 0:bf7b9fba3924 39 Emac_Config.Mode = EMAC_MODE_100M_HALF;
frank26080115 0:bf7b9fba3924 40 #else
frank26080115 0:bf7b9fba3924 41 #error Does not support this duplex option
frank26080115 0:bf7b9fba3924 42 #endif
frank26080115 0:bf7b9fba3924 43 #elif (FIX_SPEED == SPEED_10)
frank26080115 0:bf7b9fba3924 44 #if (FIX_DUPLEX == FULL_DUPLEX)
frank26080115 0:bf7b9fba3924 45 Emac_Config.Mode = EMAC_MODE_10M_FULL;
frank26080115 0:bf7b9fba3924 46 #elif (FIX_DUPLEX == HALF_DUPLEX)
frank26080115 0:bf7b9fba3924 47 Emac_Config.Mode = EMAC_MODE_10M_HALF;
frank26080115 0:bf7b9fba3924 48 #else
frank26080115 0:bf7b9fba3924 49 #error Does not support this duplex option
frank26080115 0:bf7b9fba3924 50 #endif
frank26080115 0:bf7b9fba3924 51 #else
frank26080115 0:bf7b9fba3924 52 #error Does not support this speed option
frank26080115 0:bf7b9fba3924 53 #endif
frank26080115 0:bf7b9fba3924 54 #endif
frank26080115 0:bf7b9fba3924 55
frank26080115 0:bf7b9fba3924 56 /*
frank26080115 0:bf7b9fba3924 57 * Enable P1 Ethernet Pins:
frank26080115 0:bf7b9fba3924 58 * P1.0 - ENET_TXD0
frank26080115 0:bf7b9fba3924 59 * P1.1 - ENET_TXD1
frank26080115 0:bf7b9fba3924 60 * P1.4 - ENET_TX_EN
frank26080115 0:bf7b9fba3924 61 * P1.8 - ENET_CRS
frank26080115 0:bf7b9fba3924 62 * P1.9 - ENET_RXD0
frank26080115 0:bf7b9fba3924 63 * P1.10 - ENET_RXD1
frank26080115 0:bf7b9fba3924 64 * P1.14 - ENET_RX_ER
frank26080115 0:bf7b9fba3924 65 * P1.15 - ENET_REF_CLK
frank26080115 0:bf7b9fba3924 66 * P1.16 - ENET_MDC
frank26080115 0:bf7b9fba3924 67 * P1.17 - ENET_MDIO
frank26080115 0:bf7b9fba3924 68 */
frank26080115 0:bf7b9fba3924 69 PinCfg.Funcnum = 1;
frank26080115 0:bf7b9fba3924 70 PinCfg.OpenDrain = 0;
frank26080115 0:bf7b9fba3924 71 PinCfg.Pinmode = 0;
frank26080115 0:bf7b9fba3924 72 PinCfg.Portnum = 1;
frank26080115 0:bf7b9fba3924 73
frank26080115 0:bf7b9fba3924 74 PinCfg.Pinnum = 0;
frank26080115 0:bf7b9fba3924 75 PINSEL_ConfigPin(&PinCfg);
frank26080115 0:bf7b9fba3924 76 PinCfg.Pinnum = 1;
frank26080115 0:bf7b9fba3924 77 PINSEL_ConfigPin(&PinCfg);
frank26080115 0:bf7b9fba3924 78 PinCfg.Pinnum = 4;
frank26080115 0:bf7b9fba3924 79 PINSEL_ConfigPin(&PinCfg);
frank26080115 0:bf7b9fba3924 80 PinCfg.Pinnum = 8;
frank26080115 0:bf7b9fba3924 81 PINSEL_ConfigPin(&PinCfg);
frank26080115 0:bf7b9fba3924 82 PinCfg.Pinnum = 9;
frank26080115 0:bf7b9fba3924 83 PINSEL_ConfigPin(&PinCfg);
frank26080115 0:bf7b9fba3924 84 PinCfg.Pinnum = 10;
frank26080115 0:bf7b9fba3924 85 PINSEL_ConfigPin(&PinCfg);
frank26080115 0:bf7b9fba3924 86 PinCfg.Pinnum = 14;
frank26080115 0:bf7b9fba3924 87 PINSEL_ConfigPin(&PinCfg);
frank26080115 0:bf7b9fba3924 88 PinCfg.Pinnum = 15;
frank26080115 0:bf7b9fba3924 89 PINSEL_ConfigPin(&PinCfg);
frank26080115 0:bf7b9fba3924 90 PinCfg.Pinnum = 16;
frank26080115 0:bf7b9fba3924 91 PINSEL_ConfigPin(&PinCfg);
frank26080115 0:bf7b9fba3924 92 PinCfg.Pinnum = 17;
frank26080115 0:bf7b9fba3924 93 PINSEL_ConfigPin(&PinCfg);
frank26080115 0:bf7b9fba3924 94
frank26080115 0:bf7b9fba3924 95 _DBG_("Init EMAC module");
frank26080115 0:bf7b9fba3924 96 sprintf(db,"MAC addr: %X-%X-%X-%X-%X-%X \n\r", \
frank26080115 0:bf7b9fba3924 97 EMACAddr[0], EMACAddr[1], EMACAddr[2], \
frank26080115 0:bf7b9fba3924 98 EMACAddr[3], EMACAddr[4], EMACAddr[5]);
frank26080115 0:bf7b9fba3924 99 DB;
frank26080115 0:bf7b9fba3924 100
frank26080115 0:bf7b9fba3924 101 Emac_Config.Mode = EMAC_MODE_AUTO;
frank26080115 0:bf7b9fba3924 102 Emac_Config.pbEMAC_Addr = EMACAddr;
frank26080115 0:bf7b9fba3924 103 // Initialize EMAC module with given parameter
frank26080115 0:bf7b9fba3924 104 if (EMAC_Init(&Emac_Config) == ERROR){
frank26080115 0:bf7b9fba3924 105 return (FALSE);
frank26080115 0:bf7b9fba3924 106 }
frank26080115 0:bf7b9fba3924 107
frank26080115 0:bf7b9fba3924 108 _DBG_("Init EMAC complete");
frank26080115 0:bf7b9fba3924 109
frank26080115 0:bf7b9fba3924 110 return (TRUE);
frank26080115 0:bf7b9fba3924 111 }
frank26080115 0:bf7b9fba3924 112
frank26080115 0:bf7b9fba3924 113 /* receive an Ethernet frame from MAC/DMA controller */
frank26080115 0:bf7b9fba3924 114 UNS_32 tapdev_read(void * pPacket)
frank26080115 0:bf7b9fba3924 115 {
frank26080115 0:bf7b9fba3924 116 UNS_32 Size = EMAC_MAX_PACKET_SIZE;
frank26080115 0:bf7b9fba3924 117 UNS_32 in_size;
frank26080115 0:bf7b9fba3924 118 EMAC_PACKETBUF_Type RxPack;
frank26080115 0:bf7b9fba3924 119
frank26080115 0:bf7b9fba3924 120 // Check Receive status
frank26080115 0:bf7b9fba3924 121 if (EMAC_CheckReceiveIndex() == FALSE){
frank26080115 0:bf7b9fba3924 122 return (0);
frank26080115 0:bf7b9fba3924 123 }
frank26080115 0:bf7b9fba3924 124
frank26080115 0:bf7b9fba3924 125 // Get size of receive data
frank26080115 0:bf7b9fba3924 126 in_size = EMAC_GetReceiveDataSize() + 1;
frank26080115 0:bf7b9fba3924 127
frank26080115 0:bf7b9fba3924 128 Size = MIN(Size,in_size);
frank26080115 0:bf7b9fba3924 129
frank26080115 0:bf7b9fba3924 130 // Setup Rx packet
frank26080115 0:bf7b9fba3924 131 RxPack.pbDataBuf = (uint32_t *)pPacket;
frank26080115 0:bf7b9fba3924 132 RxPack.ulDataLen = Size;
frank26080115 0:bf7b9fba3924 133 EMAC_ReadPacketBuffer(&RxPack);
frank26080115 0:bf7b9fba3924 134
frank26080115 0:bf7b9fba3924 135 // update receive status
frank26080115 0:bf7b9fba3924 136 EMAC_UpdateRxConsumeIndex();
frank26080115 0:bf7b9fba3924 137 return(Size);
frank26080115 0:bf7b9fba3924 138 }
frank26080115 0:bf7b9fba3924 139
frank26080115 0:bf7b9fba3924 140 /* transmit an Ethernet frame to MAC/DMA controller */
frank26080115 0:bf7b9fba3924 141 BOOL_8 tapdev_send(void *pPacket, UNS_32 size)
frank26080115 0:bf7b9fba3924 142 {
frank26080115 0:bf7b9fba3924 143 EMAC_PACKETBUF_Type TxPack;
frank26080115 0:bf7b9fba3924 144
frank26080115 0:bf7b9fba3924 145 // Check size
frank26080115 0:bf7b9fba3924 146 if(size == 0){
frank26080115 0:bf7b9fba3924 147 return(TRUE);
frank26080115 0:bf7b9fba3924 148 }
frank26080115 0:bf7b9fba3924 149
frank26080115 0:bf7b9fba3924 150 // check Tx Slot is available
frank26080115 0:bf7b9fba3924 151 if (EMAC_CheckTransmitIndex() == FALSE){
frank26080115 0:bf7b9fba3924 152 return (FALSE);
frank26080115 0:bf7b9fba3924 153 }
frank26080115 0:bf7b9fba3924 154
frank26080115 0:bf7b9fba3924 155 size = MIN(size,EMAC_MAX_PACKET_SIZE);
frank26080115 0:bf7b9fba3924 156
frank26080115 0:bf7b9fba3924 157 // Setup Tx Packet buffer
frank26080115 0:bf7b9fba3924 158 TxPack.ulDataLen = size;
frank26080115 0:bf7b9fba3924 159 TxPack.pbDataBuf = (uint32_t *)pPacket;
frank26080115 0:bf7b9fba3924 160 EMAC_WritePacketBuffer(&TxPack);
frank26080115 0:bf7b9fba3924 161 EMAC_UpdateTxProduceIndex();
frank26080115 0:bf7b9fba3924 162
frank26080115 0:bf7b9fba3924 163 return(TRUE);
frank26080115 0:bf7b9fba3924 164 }
frank26080115 0:bf7b9fba3924 165
frank26080115 0:bf7b9fba3924 166 /*
frank26080115 0:bf7b9fba3924 167 * @}
frank26080115 0:bf7b9fba3924 168 */