ETH_BSP_Config(); //DP83848
LwIP_Init();
Set_IP4_ADDR(&ipaddr,IMT407G_IP);
Set_IP4_ADDR(&netmask, IMT407G_NETMASK);
Set_IP4_ADDR(&gw, IMT407G_WG);
//添加网络接口
netif_add(&netif, &ipaddr, &netmask, &gw, NULL, ðernetif_init, ðernet_input);
netif->input = input; //input 就是上面传进来的 ethernet_input
//初始化
ethernetif_init(struct netif *netif)
//发送函数
netif->output = etharp_output;
netif->linkoutput = low_level_output;
//初始化 netif 网络接口
low_level_init(netif);
//设置MAC地址
/* initialize MAC address in ethernet MAC */
ETH_MACAddressConfig(ETH_MAC_Address0, netif->hwaddr);
//设置 DMA 内存地址等信息
/* Initialize Tx Descriptors list: Chain Mode */
ETH_DMATxDescChainInit(DMATxDscrTab, &Tx_Buff[0][0], ETH_TXBUFNB);
/* Initialize Rx Descriptors list: Chain Mode */
ETH_DMARxDescChainInit(DMARxDscrTab, &Rx_Buff[0][0], ETH_RXBUFNB);
//接收
//以太网卡有数据,就会有中断
ETH_IRQHandler
LwIP_Pkt_Handle();
ethernetif_input(&netif);
把网络数据包放到新的buff里面
p = low_level_input(netif);
/* get received frame */
frame = ETH_Get_Received_Frame();
//从DMA 内存地址哪里获取 bufff数据
frame.buffer = DMARxDescToGet->Buffer1Addr;
//把数据包送到 LwIP 处理
err = netif->input(p, netif);
//input 就是上面传进来的 ethernet_input
ethernet_input
switch (type)
case ETHTYPE_IP:
//传到IP层
ip_input(p, netif);
case ETHTYPE_ARP:
发送
netif->output = etharp_output;
etharp_send_ip(netif, q, (struct eth_addr*)(netif->hwaddr), dest);
netif->linkoutput(netif, p)
//netif->linkoutput = low_level_output;
/* Prepare transmit descriptors to give to DMA*/
//启动DMA传输,让DMA从内存中把数据发送到 ETH 去
ETH_Prepare_Transmit_Descriptors(framelength);