#include "NyLPC_os.h"\r
#include "LPC17xx.h"\r
/* If no buffers are available, then wait this long before looking again.... */\r
-#define emacBUFFER_WAIT_DELAY_MS 3\r
-#define emacBUFFER_WAIT_EMPTY_DELAY_MS 10\r
+#define emacBUFFER_WAIT_DELAY_MS 3\r
+#define emacBUFFER_WAIT_EMPTY_DELAY_MS 10\r
+#define emacSHORT_DELAY_MS 10\r
//--------------------------------------------------\r
// common function.\r
//--------------------------------------------------\r
LPC_EMAC->RxConsumeIndex = lIndex;\r
}\r
}\r
+\r
+\r
+/*-----------------------------------------------------------*/\r
+\r
+\r
+/*-----------------------------------------------------------*/\r
+#define ETHDEV_PHY_DEF_ADR 0x0100 /* Default PHY device address */\r
+\r
+NyLPC_TBool EthDev_LPC17xx_prvWritePHY( long lPhyReg, long lValue )\r
+{\r
+ const long lMaxTime = 10;\r
+ long x;\r
+\r
+ LPC_EMAC->MCMD = 0;\r
+ LPC_EMAC->MADR = ETHDEV_PHY_DEF_ADR | lPhyReg;\r
+ LPC_EMAC->MWTD = lValue;\r
+\r
+ for( x = 0; x < lMaxTime; x++ )\r
+ {\r
+ if( ( LPC_EMAC->MIND & MIND_BUSY ) == 0 )\r
+ {\r
+ /* Operation has finished. */\r
+ break;\r
+ }\r
+\r
+ NyLPC_cThread_sleep( emacSHORT_DELAY_MS );\r
+ }\r
+\r
+ if( x < lMaxTime )\r
+ {\r
+ return NyLPC_TBool_TRUE;\r
+ }\r
+ else\r
+ {\r
+ return NyLPC_TBool_FALSE;\r
+ }\r
+}\r
+/*-----------------------------------------------------------*/\r
+\r
+unsigned short EthDev_LPC17xx_prvReadPHY( unsigned int ucPhyReg, NyLPC_TBool* plStatus )\r
+{\r
+ long x;\r
+ const long lMaxTime = 10;\r
+\r
+ LPC_EMAC->MCMD = 1;\r
+ LPC_EMAC->MADR = ETHDEV_PHY_DEF_ADR | ucPhyReg;\r
+ LPC_EMAC->MCMD = MCMD_READ;\r
+\r
+ for( x = 0; x < lMaxTime; x++ )\r
+ {\r
+ /* Operation has finished. */\r
+ if( ( LPC_EMAC->MIND & MIND_BUSY ) == 0 )\r
+ {\r
+ break;\r
+ }\r
+ NyLPC_cThread_sleep( emacSHORT_DELAY_MS );\r
+ }\r
+\r
+ LPC_EMAC->MCMD = 0;\r
+\r
+ if( x >= lMaxTime )\r
+ {\r
+ *plStatus = NyLPC_TBool_FALSE;\r
+ }\r
+\r
+ return( LPC_EMAC->MRDD );\r
+}\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
#endif\r
\r