LWIP DP83848 使用初级

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, &ethernetif_init, &ethernet_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);
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
原文地址:https://www.cnblogs.com/2eggs/p/13298493.html