看下是这个不,这个的话,是没问题的
#define REG_BMCR 0x00U /* Basic Control */
#define REG_BMSR 0x01U /* Basic Status */
/* Basic Status Register Bitmasks */
#define BMSR_100B_T4 0x8000U /* 100BASE-T4 Capable */
#define BMSR_100B_TX_FD 0x4000U /* 100BASE-TX Full Duplex Capable */
#define BMSR_100B_TX_HD 0x2000U /* 100BASE-TX Half Duplex Capable */
#define BMSR_10B_T_FD 0x1000U /* 10BASE-T Full Duplex Capable */
#define BMSR_10B_T_HD 0x0800U /* 10BASE-T Half Duplex Capable */
#define BMSR_NO_PREAMBLE 0x0040U /* Preamble suppression */
#define BMSR_ANEG_COMPLETE 0x0020U /* Auto Negotiation Complete */
#define BMSR_REMOTE_FAULT 0x0010U /* Remote Fault */
#define BMSR_ANEG_ABILITY 0x0008U /* Auto Negotiation Ability */
#define BMSR_LINK_STAT 0x0004U /* Link Status (1=link is up) */
#define BMSR_JABBER_DETECT 0x0002U /* Jabber Detect */
#define BMSR_EXT_CAPAB 0x0001U /* Extended Capability */
[C] 纯文本查看 复制代码 /**
\fn ARM_ETH_LINK_STATE GetLinkState (void)
\brief Get Ethernet PHY Device Link state.
\return current link status \ref ARM_ETH_LINK_STATE
*/
static ARM_ETH_LINK_STATE GetLinkState (void) {
ARM_ETH_LINK_STATE state;
uint16_t val = 0U;
if (PHY.flags & PHY_POWER) {
PHY.reg_rd(ETH_PHY_ADDR, REG_BMSR, &val);
}
state = (val & BMSR_LINK_STAT) ? ARM_ETH_LINK_UP : ARM_ETH_LINK_DOWN;
return (state);
} |