• 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);
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
  • 相关阅读:
    Mybatis多层嵌套查询
    UUID 唯一性实现原理
    oracle 多实例启动
    orcal启动多实例是报 ORA-00845: MEMORY_TARGET not supported onthis system
    java调用quartz 2.2.2方法总结。
    mybatis中like的使用(模糊查询)
    Orcal数据库实现主键ID自增
    spring cloud分布式关于熔断器
    spring cloud分布式健康检查
    spring cloud分布式整合zipkin的链路跟踪
  • 原文地址:https://www.cnblogs.com/2eggs/p/13298493.html
Copyright © 2020-2023  润新知