想問大老如何用LAN8742A實現熱插拔功能,
我目前做法是用一個 Thread 去掃網路晶片狀態 , 但這種方法不太穩定, 還是會有連不上的情況發生 , 想問大佬有沒有更好的方法 , 懇請開示
[C] 纯文本查看 复制代码 void ETH_PHY_CHECK(ULONG thread_open)
{
UINT nx_link_status = 0;
INT phy_status = 0;
while(1)
{
tx_thread_sleep(1000);
phy_status = nx_eth_phy_get_link_state();
nx_link_status = ip_0.nx_ip_interface[0].nx_interface_link_up;
if(ETH_PHY_Flag == 0)
{
if(phy_status > LAN8742_STATUS_LINK_DOWN)
{
ip_0.nx_ip_interface[0].nx_interface_link_status_change = TX_TRUE;
_tx_event_flags_set(&ip_0.nx_ip_events,NX_IP_LINK_STATUS_EVENT,NX_TRUE);
ETH_PHY_Flag = 1;
}
}
else if(((nx_link_status == TX_TRUE) && phy_status <= LAN8742_STATUS_LINK_DOWN) || (nx_link_status == TX_FALSE && phy_status > LAN8742_STATUS_LINK_DOWN))
{
ip_0.nx_ip_interface[0].nx_interface_link_status_change = TX_TRUE;
_tx_event_flags_set(&ip_0.nx_ip_events,NX_IP_LINK_STATUS_EVENT,TX_OR);
}
//Data_Send(Send_To_Logsrv,Title_STGX,"ETH_PHY_CHECK test!!!");
}
} |