emac.h 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194
  1. /**************************************************************************//**
  2. * @file emac.h
  3. * @version V1.00
  4. * $Revision: 9 $
  5. * $Date: 14/05/29 1:13p $
  6. * @brief NUC472/NUC442 EMAC driver header file
  7. *
  8. * @note
  9. * Copyright (C) 2013 Nuvoton Technology Corp. All rights reserved.
  10. *****************************************************************************/
  11. #ifndef __EMAC_H__
  12. #define __EMAC_H__
  13. #ifdef __cplusplus
  14. extern "C"
  15. {
  16. #endif
  17. /** @addtogroup NUC472_442_Device_Driver NUC472/NUC442 Device Driver
  18. @{
  19. */
  20. /** @addtogroup NUC472_442_EMAC_Driver EMAC Driver
  21. @{
  22. */
  23. /** @addtogroup NUC472_442_EMAC_EXPORTED_CONSTANTS EMAC Exported Constants
  24. @{
  25. */
  26. #define EMAC_PHY_ADDR 1 ///< PHY address, this address is board dependent
  27. #define EMAC_RX_DESC_SIZE 4 ///< Number of Rx Descriptors, should be 2 at least
  28. #define EMAC_TX_DESC_SIZE 4 ///< Number of Tx Descriptors, should be 2 at least
  29. /*@}*/ /* end of group NUC472_442_EMAC_EXPORTED_CONSTANTS */
  30. /** @addtogroup NUC472_442_EMAC_EXPORTED_FUNCTIONS EMAC Exported Functions
  31. @{
  32. */
  33. /**
  34. * @brief Enable EMAC Tx function
  35. * @param None
  36. * @return None
  37. * \hideinitializer
  38. */
  39. #define EMAC_ENABLE_TX() (EMAC->CTL |= EMAC_CTL_TXON_Msk)
  40. /**
  41. * @brief Enable EMAC Rx function
  42. * @param None
  43. * @return None
  44. * \hideinitializer
  45. */
  46. #define EMAC_ENABLE_RX() do{EMAC->CTL |= EMAC_CTL_RXON_Msk; EMAC->RXST = 0;}while(0)
  47. /**
  48. * @brief Disable EMAC Tx function
  49. * @param None
  50. * @return None
  51. * \hideinitializer
  52. */
  53. #define EMAC_DISABLE_TX() (EMAC->CTL &= ~EMAC_CTL_TXON_Msk)
  54. /**
  55. * @brief Disable EMAC Rx function
  56. * @param None
  57. * @return None
  58. * \hideinitializer
  59. */
  60. #define EMAC_DISABLE_RX() (EMAC->CTL &= ~EMAC_CTL_RXON_Msk)
  61. /**
  62. * @brief Enable EMAC Magic Packet Wakeup function
  63. * @param None
  64. * @return None
  65. * \hideinitializer
  66. */
  67. #define EMAC_ENABLE_MAGIC_PKT_WAKEUP() (EMAC->CTL |= EMAC_CTL_WOLEN_Msk)
  68. /**
  69. * @brief Disable EMAC Magic Packet Wakeup function
  70. * @param None
  71. * @return None
  72. * \hideinitializer
  73. */
  74. #define EMAC_DISABLE_MAGIC_PKT_WAKEUP() (EMAC->CTL &= ~EMAC_CTL_WOLEN_Msk)
  75. /**
  76. * @brief Enable EMAC MII interface
  77. * @param None
  78. * @return None
  79. * @details After calling \ref EMAC_Open, EMAC use RMII interface by default, but can switch to
  80. * MII interface by calling this macro
  81. * \hideinitializer
  82. */
  83. #define EMAC_ENABLE_MII_INTF() (EMAC->CTL &= ~(EMAC_CTL_RMIIEN_Msk | EMAC_CTL_RMIIRXCTL_Msk))
  84. /**
  85. * @brief Enable EMAC to receive broadcast packets
  86. * @param None
  87. * @return None
  88. * \hideinitializer
  89. */
  90. #define EMAC_ENABLE_RECV_BCASTPKT() (EMAC->CAMCTL |= EMAC_CAMCTL_ABP_Msk)
  91. /**
  92. * @brief Disable EMAC to receive broadcast packets
  93. * @param None
  94. * @return None
  95. * \hideinitializer
  96. */
  97. #define EMAC_DISABLE_RECV_BCASTPKT() (EMAC->CAMCTL &= ~EMAC_CAMCTL_ABP_Msk)
  98. /**
  99. * @brief Enable EMAC to receive multicast packets
  100. * @param None
  101. * @return None
  102. * \hideinitializer
  103. */
  104. #define EMAC_ENABLE_RECV_MCASTPKT() (EMAC->CAMCTL |= EMAC_CAMCTL_AMP_Msk)
  105. /**
  106. * @brief Disable EMAC Magic Packet Wakeup function
  107. * @param None
  108. * @return None
  109. * \hideinitializer
  110. */
  111. #define EMAC_DISABLE_RECV_MCASTPKT() (EMAC->CAMCTL &= ~EMAC_CAMCTL_AMP_Msk)
  112. /**
  113. * @brief Check if EMAC time stamp alarm interrupt occurred or not
  114. * @param None
  115. * @return If time stamp alarm interrupt occurred or not
  116. * @retval 0 Alarm interrupt does not occur
  117. * @retval 1 Alarm interrupt occurred
  118. * \hideinitializer
  119. */
  120. #define EMAC_GET_ALARM_FLAG() (EMAC->INTSTS & EMAC_INTSTS_TSALMIF_Msk ? 1 : 0)
  121. /**
  122. * @brief Clear EMAC time stamp alarm interrupt flag
  123. * @param None
  124. * @return None
  125. * \hideinitializer
  126. */
  127. #define EMAC_CLR_ALARM_FLAG() (EMAC->INTSTS = EMAC_INTSTS_TSALMIF_Msk)
  128. void EMAC_Open(uint8_t *pu8MacAddr);
  129. void EMAC_Close(void);
  130. void EMAC_SetMacAddr(uint8_t *pu8MacAddr);
  131. void EMAC_EnableCamEntry(uint32_t u32Entry, uint8_t *pu8MacAddr);
  132. void EMAC_DisableCamEntry(uint32_t u32Entry);
  133. uint32_t EMAC_RecvPkt(uint8_t *pu8Data, uint32_t *pu32Size);
  134. uint32_t EMAC_RecvPktTS(uint8_t *pu8Data, uint32_t *pu32Size, uint32_t *pu32Sec, uint32_t *pu32Nsec);
  135. void EMAC_RecvPktDone(void);
  136. uint32_t EMAC_SendPkt(uint8_t *pu8Data, uint32_t u32Size);
  137. uint32_t EMAC_SendPktDone(void);
  138. uint32_t EMAC_SendPktDoneTS(uint32_t *pu32Sec, uint32_t *pu32Nsec);
  139. void EMAC_EnableTS(uint32_t u32Sec, uint32_t u32Nsec);
  140. void EMAC_DisableTS(void);
  141. void EMAC_GetTime(uint32_t *pu32Sec, uint32_t *pu32Nsec);
  142. void EMAC_SetTime(uint32_t u32Sec, uint32_t u32Nsec);
  143. void EMAC_UpdateTime(uint32_t u32Neg, uint32_t u32Sec, uint32_t u32Nsec);
  144. void EMAC_EnableAlarm(uint32_t u32Sec, uint32_t u32Nsec);
  145. void EMAC_DisableAlarm(void);
  146. /*@}*/ /* end of group NUC472_442_EMAC_EXPORTED_FUNCTIONS */
  147. /*@}*/ /* end of group NUC472_442_EMAC_Driver */
  148. /*@}*/ /* end of group NUC472_442_Device_Driver */
  149. #ifdef __cplusplus
  150. }
  151. #endif
  152. #endif //__EMAC_H__
  153. /*** (C) COPYRIGHT 2013 Nuvoton Technology Corp. ***/