195 lines
4.9 KiB
C
195 lines
4.9 KiB
C
|
/**************************************************************************//**
|
||
|
* @file emac.h
|
||
|
* @version V1.00
|
||
|
* $Revision: 9 $
|
||
|
* $Date: 14/05/29 1:13p $
|
||
|
* @brief NUC472/NUC442 EMAC driver header file
|
||
|
*
|
||
|
* @note
|
||
|
* Copyright (C) 2013 Nuvoton Technology Corp. All rights reserved.
|
||
|
*****************************************************************************/
|
||
|
#ifndef __EMAC_H__
|
||
|
#define __EMAC_H__
|
||
|
|
||
|
#ifdef __cplusplus
|
||
|
extern "C"
|
||
|
{
|
||
|
#endif
|
||
|
|
||
|
|
||
|
/** @addtogroup NUC472_442_Device_Driver NUC472/NUC442 Device Driver
|
||
|
@{
|
||
|
*/
|
||
|
|
||
|
/** @addtogroup NUC472_442_EMAC_Driver EMAC Driver
|
||
|
@{
|
||
|
*/
|
||
|
|
||
|
/** @addtogroup NUC472_442_EMAC_EXPORTED_CONSTANTS EMAC Exported Constants
|
||
|
@{
|
||
|
*/
|
||
|
|
||
|
#define EMAC_PHY_ADDR 1 ///< PHY address, this address is board dependent
|
||
|
|
||
|
#define EMAC_RX_DESC_SIZE 4 ///< Number of Rx Descriptors, should be 2 at least
|
||
|
#define EMAC_TX_DESC_SIZE 4 ///< Number of Tx Descriptors, should be 2 at least
|
||
|
|
||
|
|
||
|
/*@}*/ /* end of group NUC472_442_EMAC_EXPORTED_CONSTANTS */
|
||
|
|
||
|
|
||
|
/** @addtogroup NUC472_442_EMAC_EXPORTED_FUNCTIONS EMAC Exported Functions
|
||
|
@{
|
||
|
*/
|
||
|
|
||
|
|
||
|
/**
|
||
|
* @brief Enable EMAC Tx function
|
||
|
* @param None
|
||
|
* @return None
|
||
|
* \hideinitializer
|
||
|
*/
|
||
|
#define EMAC_ENABLE_TX() (EMAC->CTL |= EMAC_CTL_TXON_Msk)
|
||
|
|
||
|
|
||
|
/**
|
||
|
* @brief Enable EMAC Rx function
|
||
|
* @param None
|
||
|
* @return None
|
||
|
* \hideinitializer
|
||
|
*/
|
||
|
#define EMAC_ENABLE_RX() do{EMAC->CTL |= EMAC_CTL_RXON_Msk; EMAC->RXST = 0;}while(0)
|
||
|
|
||
|
/**
|
||
|
* @brief Disable EMAC Tx function
|
||
|
* @param None
|
||
|
* @return None
|
||
|
* \hideinitializer
|
||
|
*/
|
||
|
#define EMAC_DISABLE_TX() (EMAC->CTL &= ~EMAC_CTL_TXON_Msk)
|
||
|
|
||
|
|
||
|
/**
|
||
|
* @brief Disable EMAC Rx function
|
||
|
* @param None
|
||
|
* @return None
|
||
|
* \hideinitializer
|
||
|
*/
|
||
|
#define EMAC_DISABLE_RX() (EMAC->CTL &= ~EMAC_CTL_RXON_Msk)
|
||
|
|
||
|
/**
|
||
|
* @brief Enable EMAC Magic Packet Wakeup function
|
||
|
* @param None
|
||
|
* @return None
|
||
|
* \hideinitializer
|
||
|
*/
|
||
|
#define EMAC_ENABLE_MAGIC_PKT_WAKEUP() (EMAC->CTL |= EMAC_CTL_WOLEN_Msk)
|
||
|
|
||
|
|
||
|
/**
|
||
|
* @brief Disable EMAC Magic Packet Wakeup function
|
||
|
* @param None
|
||
|
* @return None
|
||
|
* \hideinitializer
|
||
|
*/
|
||
|
#define EMAC_DISABLE_MAGIC_PKT_WAKEUP() (EMAC->CTL &= ~EMAC_CTL_WOLEN_Msk)
|
||
|
|
||
|
/**
|
||
|
* @brief Enable EMAC MII interface
|
||
|
* @param None
|
||
|
* @return None
|
||
|
* @details After calling \ref EMAC_Open, EMAC use RMII interface by default, but can switch to
|
||
|
* MII interface by calling this macro
|
||
|
* \hideinitializer
|
||
|
*/
|
||
|
#define EMAC_ENABLE_MII_INTF() (EMAC->CTL &= ~(EMAC_CTL_RMIIEN_Msk | EMAC_CTL_RMIIRXCTL_Msk))
|
||
|
|
||
|
/**
|
||
|
* @brief Enable EMAC to receive broadcast packets
|
||
|
* @param None
|
||
|
* @return None
|
||
|
* \hideinitializer
|
||
|
*/
|
||
|
#define EMAC_ENABLE_RECV_BCASTPKT() (EMAC->CAMCTL |= EMAC_CAMCTL_ABP_Msk)
|
||
|
|
||
|
/**
|
||
|
* @brief Disable EMAC to receive broadcast packets
|
||
|
* @param None
|
||
|
* @return None
|
||
|
* \hideinitializer
|
||
|
*/
|
||
|
#define EMAC_DISABLE_RECV_BCASTPKT() (EMAC->CAMCTL &= ~EMAC_CAMCTL_ABP_Msk)
|
||
|
|
||
|
/**
|
||
|
* @brief Enable EMAC to receive multicast packets
|
||
|
* @param None
|
||
|
* @return None
|
||
|
* \hideinitializer
|
||
|
*/
|
||
|
#define EMAC_ENABLE_RECV_MCASTPKT() (EMAC->CAMCTL |= EMAC_CAMCTL_AMP_Msk)
|
||
|
|
||
|
/**
|
||
|
* @brief Disable EMAC Magic Packet Wakeup function
|
||
|
* @param None
|
||
|
* @return None
|
||
|
* \hideinitializer
|
||
|
*/
|
||
|
#define EMAC_DISABLE_RECV_MCASTPKT() (EMAC->CAMCTL &= ~EMAC_CAMCTL_AMP_Msk)
|
||
|
|
||
|
/**
|
||
|
* @brief Check if EMAC time stamp alarm interrupt occurred or not
|
||
|
* @param None
|
||
|
* @return If time stamp alarm interrupt occurred or not
|
||
|
* @retval 0 Alarm interrupt does not occur
|
||
|
* @retval 1 Alarm interrupt occurred
|
||
|
* \hideinitializer
|
||
|
*/
|
||
|
#define EMAC_GET_ALARM_FLAG() (EMAC->INTSTS & EMAC_INTSTS_TSALMIF_Msk ? 1 : 0)
|
||
|
|
||
|
/**
|
||
|
* @brief Clear EMAC time stamp alarm interrupt flag
|
||
|
* @param None
|
||
|
* @return None
|
||
|
* \hideinitializer
|
||
|
*/
|
||
|
#define EMAC_CLR_ALARM_FLAG() (EMAC->INTSTS = EMAC_INTSTS_TSALMIF_Msk)
|
||
|
|
||
|
|
||
|
void EMAC_Open(uint8_t *pu8MacAddr);
|
||
|
void EMAC_Close(void);
|
||
|
void EMAC_SetMacAddr(uint8_t *pu8MacAddr);
|
||
|
void EMAC_EnableCamEntry(uint32_t u32Entry, uint8_t *pu8MacAddr);
|
||
|
void EMAC_DisableCamEntry(uint32_t u32Entry);
|
||
|
|
||
|
uint32_t EMAC_RecvPkt(uint8_t *pu8Data, uint32_t *pu32Size);
|
||
|
uint32_t EMAC_RecvPktTS(uint8_t *pu8Data, uint32_t *pu32Size, uint32_t *pu32Sec, uint32_t *pu32Nsec);
|
||
|
void EMAC_RecvPktDone(void);
|
||
|
|
||
|
uint32_t EMAC_SendPkt(uint8_t *pu8Data, uint32_t u32Size);
|
||
|
uint32_t EMAC_SendPktDone(void);
|
||
|
uint32_t EMAC_SendPktDoneTS(uint32_t *pu32Sec, uint32_t *pu32Nsec);
|
||
|
|
||
|
void EMAC_EnableTS(uint32_t u32Sec, uint32_t u32Nsec);
|
||
|
void EMAC_DisableTS(void);
|
||
|
void EMAC_GetTime(uint32_t *pu32Sec, uint32_t *pu32Nsec);
|
||
|
void EMAC_SetTime(uint32_t u32Sec, uint32_t u32Nsec);
|
||
|
void EMAC_UpdateTime(uint32_t u32Neg, uint32_t u32Sec, uint32_t u32Nsec);
|
||
|
void EMAC_EnableAlarm(uint32_t u32Sec, uint32_t u32Nsec);
|
||
|
void EMAC_DisableAlarm(void);
|
||
|
|
||
|
|
||
|
|
||
|
/*@}*/ /* end of group NUC472_442_EMAC_EXPORTED_FUNCTIONS */
|
||
|
|
||
|
/*@}*/ /* end of group NUC472_442_EMAC_Driver */
|
||
|
|
||
|
/*@}*/ /* end of group NUC472_442_Device_Driver */
|
||
|
|
||
|
#ifdef __cplusplus
|
||
|
}
|
||
|
#endif
|
||
|
|
||
|
#endif //__EMAC_H__
|
||
|
|
||
|
/*** (C) COPYRIGHT 2013 Nuvoton Technology Corp. ***/
|