lwip-users
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[lwip-users] help: how to use interrupt in RAW_API mode under Xilinx-V2


From: ye wu
Subject: [lwip-users] help: how to use interrupt in RAW_API mode under Xilinx-V2
Date: Thu, 19 Oct 2006 21:37:43 +0800

Hi, all

I\'m using a Xilinx-Viterx2 with PowerPC 405 address@hidden

I\'v just start the develop under Xilinx-Viterx2 within a month and now got big problems with the use of lwip in that platform.

At first, i set up a Echo server just follow the example of xilinx\'s echo server under SOCKET_API. As it was discussed a lot in the forum, the trans speed is unbearable, i can get only 10-20kB/s at most, even set the systmr_interval to 1. I\'m not sure about the systmr_interval\'s function for the lwip under SOCKET_API mode, could any one tell me why the speed increased as the value of systmr_interval decrease? And is there any tricks to improve the speen under SOCKET_API mode?

And then i wrote a udp program use RAW_API mode, it works well in the polling mode. As we see, RAW_API are used mainly under standlone kernel, but i think we can use it under xilkernel too. i can get about 300kB/s with that mode. i see in the forum that if we use interrupt instead of polling, we can get much fast, so i write a program (as bellow) but it not work at all, i can not even ping the target from my PC. I don\'t know what wrong, could anyone help me?

1. There were mail messages that use the Standalone Board Support Package for set the interrupt, Can we use the RAW_API in interrupt mode under xilkernel, and registe the irq in xilkernel as we do in SOCKTE_API mode?

2. I\'ve read from the forum that the interupt was used to replase the \'xemacif_input\' in the while loop, so i just set the interupt and cancel the \'xemacif_input\', leave while a null loop to wait for interrupt after setup udp, is that right?

Could anybody help me why it not work? Really appreciate for your help.


the programe is:


void *receiveUDP(void *arg, struct udp_pcb *upcb, struct pbuf *p, struct ip_addr *addr, u16_t port)
{
    udp_send(udpstructreceive,p);
    pbuf_free(p);
}

void* main_main()
{    
    char low_mac[3] = {0x00,0x22,0x20};
    char fullmac[6] = {XILINX_MAC_OUI0, XILINX_MAC_OUI1, XILINX_MAC_OUI2,
                      low_mac[0], low_mac[2], low_mac[3]};

    char ip[4] = {192,168,0,102};
    //char remoteIP[4] = {192,168,0,6};
    char subnet[4] = {255,255,255,0};
    char gateway[4] = {192,168,0,254};
    char sendtoip[4] = {192,168,0,2};
    
    u16_t listenport,sendport;
    listenport = 5001;
    sendport = 5001;

    #ifdef STATS
        stats_init();
    #endif /* STATS */
    xil_printf(\"Initializing Memory Structures.\");
    sys_init();
    mem_init();
    xil_printf(\".\");
    memp_init();
    xil_printf(\".\");
    pbuf_init();
    xil_printf(\" done.\\r\\n\");

    xemacif_setmac(0, (u8_t *) fullmac); //Set MAC

    netif_init();
    udp_init();

    XEmacIf_Config *xemacif_ptr = &XEmacIf_ConfigTable[0];

    IP4_ADDR(&gw, 192,168,0,254); //Set gateway
    IP4_ADDR(&ipaddr, ip[0],ip[1],ip[2],ip[3]); //Set ip
    IP4_ADDR(&sendtoipaddr, sendtoip[0],sendtoip[1],sendtoip[2],sendtoip[3]); //Set ip
    IP4_ADDR(&netmask,subnet[0],subnet[1],subnet[2],subnet[3]); //Set subnet msk


    default_netif = mem_malloc(sizeof(struct netif));

    default_netif = netif_add(default_netif, &ipaddr, &netmask, &gw, &XEmacIf_ConfigTable[0], xemacif_init, ip_input);
    netif_set_default(default_netif);

    ret = register_int_handler(XPAR_OPB_INTC_0_ETHERNET_MAC_IP2INTC_IRPT_INTR,
                         (XInterruptHandler)XEmac_IntrHandlerFifo,
                         xemacif_ptr->instance_ptr);

    enable_interrupt(XPAR_OPB_INTC_0_ETHERNET_MAC_IP2INTC_IRPT_INTR);

    udpstructreceive = udp_new();

    udp_bind(udpstructreceive,IP_ADDR_ANY,listenport);

    udp_connect(udpstructreceive,&sendtoipaddr,sendport);

    udp_recv(udpstructreceive, receiveUDP, NULL);

    while(1){
        ;//xemacif_input(default_netif);
    }

    return 0;
}

int main(){
    xilkernel_main();
}


Thanks very much!
Ye Wu
reply via email to

[Prev in Thread] Current Thread [Next in Thread]