6053|3

6892

帖子

0

TA的资源

五彩晶圆(高级)

楼主
 

串口转以太网代码怎样改进 [复制链接]

int main(void)
{
    unsigned long ulUser0, ulUser1;
    unsigned char pucMACAddr[8];
    unsigned long ulLoop;

    //
    // If running on Rev A2 silicon, turn the LDO voltage up to 2.75V.  This is
    // a workaround to allow the PLL to operate reliably.
    //
    if(REVISION_IS_A2)
    {
        SysCtlLDOSet(SYSCTL_LDO_2_75V);
    }

    //
    // Set the processor to run at 50 MHz, allowing UART operation at up to
    // 3.125 MHz.
    //
    SysCtlClockSet(SYSCTL_SYSDIV_4 | SYSCTL_USE_PLL | SYSCTL_OSC_MAIN |
                   SYSCTL_XTAL_8MHZ);

    //
    // Enable the peripherals used by the application.
    //
    SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOA);
    SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOB);
    SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOD);
    SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOF);
    SysCtlPeripheralEnable(SYSCTL_PERIPH_UART0);
    SysCtlPeripheralEnable(SYSCTL_PERIPH_UART1);
    SysCtlPeripheralEnable(SYSCTL_PERIPH_ETH);

    //
    // Enable the peripherals that should continue to run when the processor
    // is sleeping.
    //
    SysCtlPeripheralSleepEnable(SYSCTL_PERIPH_GPIOA);
    SysCtlPeripheralSleepEnable(SYSCTL_PERIPH_GPIOB);
    SysCtlPeripheralSleepEnable(SYSCTL_PERIPH_GPIOD);
    SysCtlPeripheralSleepEnable(SYSCTL_PERIPH_GPIOF);
    SysCtlPeripheralSleepEnable(SYSCTL_PERIPH_UART0);
    SysCtlPeripheralSleepEnable(SYSCTL_PERIPH_UART1);
    SysCtlPeripheralSleepEnable(SYSCTL_PERIPH_ETH);

    //
    // Enable peripheral clock gating.  Note that this is required in order to
    // measure the the processor usage.
    //
    SysCtlPeripheralClockGating(true);

    //
    // Set the priorities of the interrupts used by the application.
    //
    IntPrioritySet(INT_UART0, 0x00);
    IntPrioritySet(INT_UART1, 0x00);
    IntPrioritySet(INT_ETH, 0x20);
    IntPrioritySet(FAULT_SYSTICK, 0x40);

    //
    // Configure SysTick for a periodic interrupt.
    //
    SysTickPeriodSet(SysCtlClockGet() / SYSTICKHZ);
    SysTickEnable();
    SysTickIntEnable();

    //
    // Enable Port F for Ethernet LEDs.
    //  LED0        Bit 3   Output
    //  LED1        Bit 2   Output
    //
    GPIODirModeSet(GPIO_PORTF_BASE, GPIO_PIN_2 | GPIO_PIN_3, GPIO_DIR_MODE_HW);
    GPIOPadConfigSet(GPIO_PORTF_BASE, GPIO_PIN_2 | GPIO_PIN_3,
                     GPIO_STRENGTH_2MA, GPIO_PIN_TYPE_STD);

    //
    // Set the link status based on the LED0 signal (which defaults to link
    // status in the PHY).
    //
    g_bLinkStatusUp = GPIOPinRead(GPIO_PORTF_BASE, GPIO_PIN_3) ? false : true;

    //
    // Initialize the configuration parameter module.
    //
    ConfigInit();

    //
    // Get the MAC address from the UART0 and UART1 registers in NV ram.
    //
    FlashUserGet(&ulUser0, &ulUser1);

    //
    // Convert the 24/24 split MAC address from NV ram into a MAC address
    // array.
    //
    pucMACAddr[0] = ulUser0 & 0xff;
    pucMACAddr[1] = (ulUser0 >> 8) & 0xff;
    pucMACAddr[2] = (ulUser0 >> 16) & 0xff;
    pucMACAddr[3] = ulUser1 & 0xff;
    pucMACAddr[4] = (ulUser1 >> 8) & 0xff;
    pucMACAddr[5] = (ulUser1 >> 16) & 0xff;

    //
    // Initialize the lwIP TCP/IP stack.
    //
    lwIPInit(pucMACAddr, g_sParameters.ulStaticIP, g_sParameters.ulSubnetMask,
             g_sParameters.ulGatewayIP, ((g_sParameters.ucFlags &
             CONFIG_FLAG_STATICIP) ? IPADDR_USE_STATIC : IPADDR_USE_DHCP));

    //
    // Setup the device locator service.
    //
    LocatorInit();
    LocatorMACAddrSet(pucMACAddr);
    LocatorAppTitleSet((char *)g_sParameters.ucModName);

    //
    // Initialize the serial port module.
    //
    SerialInit();

    //
    // Initialize the telnet module.
    //
    TelnetInit();

    //
    // Initialize the UPnP session.
    //
    UPnPInit();

    //
    // Initialize the HTTPD web server.
    //
    httpd_init();

    //
    // Configure SSI and CGI processing for our configuration web forms.
    //
    ConfigWebInit();

    //
    // Start the remote software update module.
    //
    SoftwareUpdateInit(SoftwareUpdateRequeSTCallback);

    //
    // Wait for an IP address to be assigned to the board before we try to
    // initiate any connections.
    //
    while(!lwIPLocalIPAddrGet())
    {
        //
        // Do nothing until we get our IP address assigned.
        //
        SysCtlSleep();
    }

    //
    // Initialize the telnet session(s).
    //
    for(ulLoop = 0; ulLoop < MAX_S2E_PORTS; ulLoop++)
    {
        //
        // Are we to operate as a telnet server?
        //
        if((g_sParameters.sPort[ulLoop].ucFlags & PORT_FLAG_TELNET_MODE) ==
           PORT_TELNET_SERVER)
        {
            //
            // Yes - start listening on the required port.
            //
            TelnetListen(g_sParameters.sPort[ulLoop].usTelnetLocalPort,
                         ulLoop);
        }
        else
        {
            //
            // No - we are a client so initiate a connection to the desired
            // IP address using the configured ports.
            //
            TelnetOpen(g_sParameters.sPort[ulLoop].ulTelnetIPAddr,
                       g_sParameters.sPort[ulLoop].usTelnetRemotePort,
                       g_sParameters.sPort[ulLoop].usTelnetLocalPort, ulLoop);
        }
    }

    //
    // Main Application Loop (for systems with no RTOS).  Run every SYSTICK.
    //
    while(true)
    {
        //
        // Wait for an event to occur.
        //
        SysCtlSleep();

        //
        // Check for an IP update request.
        //
        if(g_bChangeIPAddress == true)
        {
            //
            // Delay 2 seconds or so to allow the response page to get back
            // to the browser before we initiate the IP address change.
            //
            SysCtlDelay((SysCtlClockGet() / 3) * 2);

            //
            // Actually update the IP address.
            //
            g_bChangeIPAddress = false;
            ConfigUpdateIPAddress();
        }

        //
        // Check for bootloader request.
        //
        if((g_bStartBootloader == true) || (g_bFirmwareUpdate == true))
        {
            //
            // Delay a couple of seconds to let any pending web server
            // transmission to complete.  Each loop within SysCtlDelay is
            // 3 instructions long so this delays approximately 2 seconds.
            //
            SysCtlDelay((SysCtlClockGet() / 3) * 2);

            //
            // Initiate the Software Update Process in the Ethernet
            // Bootloader.
            //
            SoftwareUpdateBegin();

            //
            // Should never get here, but stall just in case.
            //
            while(1)
            {
            }
        }
    }
}

用上述代码解决下面的问题:

      解决以下问题:
1.串口收数并处理,然后通过网口传输出去。
2.网口收数处理,然后从串口发出。

最新回复

不明白你的目的,改成啥样啊  详情 回复 发表于 2010-9-30 16:19
 
点赞 关注
个人签名一个为理想不懈前进的人,一个永不言败人!
http://shop57496282.taobao.com/
欢迎光临网上店铺!

回复
举报

6892

帖子

0

TA的资源

五彩晶圆(高级)

沙发
 

大虾们,赶快帮我分析分析!等你们支招啊!

 
个人签名一个为理想不懈前进的人,一个永不言败人!
http://shop57496282.taobao.com/
欢迎光临网上店铺!
 

回复

2641

帖子

0

TA的资源

五彩晶圆(中级)

板凳
 
收发用中断,放缓冲区,主线程中处理就行了,我就是这样做的,现在双工1M都没有问题了,上位机编了个虚拟串口,当透明串口传输用
 
 
 

回复

16

帖子

0

TA的资源

一粒金砂(中级)

4
 
不明白你的目的,改成啥样啊
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表