This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

CCS/EK-TM4C1294XL: web development by using ethernet connected tm4c1294xl

Part Number: EK-TM4C1294XL

Tool/software: Code Composer Studio

hello everyone

i want to display a webpage which is already designed is it possible to do it from tm4c. The page is showing some reports regarding temperature, voltage parameters measured from other device. so here i want to display the same page through EK-TM4C1294XL ethernet connected launchpad. any example code are there. how to begin with this process
 

  • Hi,
    There are some Ethernet examples that come with the TivaWare package. Please take a look at the enet_io and enet_lwip examples under TivaWare->examples->boards->ek-tm4c1294xl.
  • Hi sir,
    i have tried with the example programs i don understand what should be the output after debug. can you explain how i should analyse the output for enet_lwip
  • Hi Ashwini,

     The example is to demonstrate using the MCU as a web server. Open up your terminal window. Once the demo example start execution it will display the below notes in your terminal window. See below screenshot I got when I run it.

    You will then open your choice of browser and got the IP address that is displayed in the terminal widow. In my case the IP address is 10.219.14.213 after the EMAC acquires the IP address from DHCP. You will see your browser showing the webpage hosted by the MCU. See below after I go to 10.219.14.213.

  • hello sir,

    i am not getting anything on terminal when i debug enet_lwip program. i am using ubuntu 14.04 and ccsv6 my code is  shown below.

    //*****************************************************************************

    //

    // enet_lwip.c - Sample WebServer Application using lwIP.

    //

    // Copyright (c) 2013-2016 Texas Instruments Incorporated.  All rights reserved.

    // Software License Agreement

    //

    // Texas Instruments (TI) is supplying this software for use solely and

    // exclusively on TI's microcontroller products. The software is owned by

    // TI and/or its suppliers, and is protected under applicable copyright

    // laws. You may not combine this software with "viral" open-source

    // software in order to form a larger program.

    //

    // THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS.

    // NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT

    // NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR

    // A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY

    // CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL

    // DAMAGES, FOR ANY REASON WHATSOEVER.

    //

    // This is part of revision 2.1.3.156 of the EK-TM4C1294XL Firmware Package.

    //

    //*****************************************************************************

    #include <stdbool.h>

    #include <stdint.h>

    #include "inc/hw_ints.h"

    #include "inc/hw_memmap.h"

    #include "driverlib/flash.h"

    #include "driverlib/interrupt.h"

    #include "driverlib/gpio.h"

    #include "driverlib/rom_map.h"

    #include "driverlib/sysctl.h"

    #include "driverlib/systick.h"

    #include "utils/locator.h"

    #include "utils/lwiplib.h"

    #include "utils/ustdlib.h"

    #include "utils/uartstdio.h"

    #include "httpserver_raw/httpd.h"

    #include "drivers/pinout.h"

    //*****************************************************************************

    //

    //! \addtogroup example_list

    //! <h1>Ethernet with lwIP (enet_lwip)</h1>

    //!

    //! This example application demonstrates the operation of the Tiva

    //! Ethernet controller using the lwIP TCP/IP Stack.  DHCP is used to obtain

    //! an Ethernet address.  If DHCP times out without obtaining an address,

    //! AutoIP will be used to obtain a link-local address.  The address that is

    //! selected will be shown on the UART.

    //!

    //! UART0, connected to the ICDI virtual COM port and running at 115,200,

    //! 8-N-1, is used to display messages from this application. Use the

    //! following command to re-build the any file system files that change.

    //!

    //!     ../../../../tools/bin/makefsfile -i fs -o enet_fsdata.h -r -h -q

    //!

    //! For additional details on lwIP, refer to the lwIP web page at:

    //!

    //

    //*****************************************************************************

    //*****************************************************************************

    //

    // Defines for setting up the systemclock.

    //

    //*****************************************************************************

    #define SYSTICKHZ               100

    #define SYSTICKMS               (1000 / SYSTICKHZ)

    //*****************************************************************************

    //

    // Interrupt priority definitions.  The top 3 bits of these values are

    // significant with lower values indicating higher priority interrupts.

    //

    //*****************************************************************************

    #define SYSTICK_INT_PRIORITY    0x80

    #define ETHERNET_INT_PRIORITY   0xC0

    //*****************************************************************************

    //

    // The current IP address.

    //

    //*****************************************************************************

    uint32_t g_ui32IPAddress;

    //*****************************************************************************

    //

    // The system clock frequency.

    //

    //*****************************************************************************

    uint32_t g_ui32SysClock;

    //*****************************************************************************

    //

    // The error routine that is called if the driver library encounters an error.

    //

    //*****************************************************************************

    #ifdef DEBUG

    void

    __error__(char *pcFilename, uint32_t ui32Line)

    {

    }

    #endif

    //*****************************************************************************

    //

    // Display an lwIP type IP Address.

    //

    //*****************************************************************************

    void

    DisplayIPAddress(uint32_t ui32Addr)

    {

       char pcBuf[16];

       //

       // Convert the IP Address into a string.

       //

       usprintf(pcBuf, "%d.%d.%d.%d", ui32Addr & 0xff, (ui32Addr >> 8) & 0xff,

               (ui32Addr >> 16) & 0xff, (ui32Addr >> 24) & 0xff);

       //

       // Display the string.

       //

       UARTprintf(pcBuf);

    }

    //*****************************************************************************

    //

    // Required by lwIP library to support any host-related timer functions.

    //

    //*****************************************************************************

    void

    lwIPHostTimerHandler(void)

    {

       uint32_t ui32Idx, ui32NewIPAddress;

       //

       // Get the current IP address.

       //

       ui32NewIPAddress = lwIPLocalIPAddrGet();

       //

       // See if the IP address has changed.

       //

       if(ui32NewIPAddress != g_ui32IPAddress)

       {

           //

           // See if there is an IP address assigned.

           //

           if(ui32NewIPAddress == 0xffffffff)

           {

               //

               // Indicate that there is no link.

               //

               UARTprintf("Waiting for link.\n");

           }

           else if(ui32NewIPAddress == 0)

           {

               //

               // There is no IP address, so indicate that the DHCP process is

               // running.

               //

               UARTprintf("Waiting for IP address.\n");

           }

           else

           {

               //

               // Display the new IP address.

               //

               UARTprintf("IP Address: ");

               DisplayIPAddress(ui32NewIPAddress);

               UARTprintf("\nOpen a browser and enter the IP address.\n");

           }

           //

           // Save the new IP address.

           //

           g_ui32IPAddress = ui32NewIPAddress;

           //

           // Turn GPIO off.

           //

           MAP_GPIOPinWrite(GPIO_PORTN_BASE, GPIO_PIN_1, ~GPIO_PIN_1);

       }

       //

       // If there is not an IP address.

       //

       if((ui32NewIPAddress == 0) || (ui32NewIPAddress == 0xffffffff))

       {

           //

           // Loop through the LED animation.

           //

           for(ui32Idx = 1; ui32Idx < 17; ui32Idx++)

           {

               //

               // Toggle the GPIO

               //

               MAP_GPIOPinWrite(GPIO_PORTN_BASE, GPIO_PIN_1,

                       (MAP_GPIOPinRead(GPIO_PORTN_BASE, GPIO_PIN_1) ^

                        GPIO_PIN_1));

               SysCtlDelay(g_ui32SysClock/(ui32Idx << 1));

           }

       }

    }

    //*****************************************************************************

    //

    // The interrupt handler for the SysTick interrupt.

    //

    //*****************************************************************************

    void

    SysTickIntHandler(void)

    {

       //

       // Call the lwIP timer handler.

       //

       lwIPTimer(SYSTICKMS);

    }

    //*****************************************************************************

    //

    // This example demonstrates the use of the Ethernet Controller.

    //

    //*****************************************************************************

    int

    main(void)

    {

       uint32_t ui32User0, ui32User1;

       uint8_t pui8MACArray[8];

       //

       // Make sure the main oscillator is enabled because this is required by

       // the PHY.  The system must have a 25MHz crystal attached to the OSC

       // pins. The SYSCTL_MOSC_HIGHFREQ parameter is used when the crystal

       // frequency is 10MHz or higher.

       //

       SysCtlMOSCConfigSet(SYSCTL_MOSC_HIGHFREQ);

       //

       // Run from the PLL at 120 MHz.

       //

       g_ui32SysClock = MAP_SysCtlClockFreqSet((SYSCTL_XTAL_25MHZ |

                                                SYSCTL_OSC_MAIN |

                                                SYSCTL_USE_PLL |

                                                SYSCTL_CFG_VCO_480), 120000000);

       //

       // Configure the device pins.

       //

       PinoutSet(true, false);

       //

       // Configure UART.

       //

       UARTStdioConfig(0, 115200, g_ui32SysClock);

       //

       // Clear the terminal and print banner.

       //

       UARTprintf("\033[2J\033[H");

       UARTprintf("Ethernet lwIP example\n\n");

       //

       // Configure Port N1 for as an output for the animation LED.

       //

       MAP_GPIOPinTypeGPIOOutput(GPIO_PORTN_BASE, GPIO_PIN_1);

       //

       // Initialize LED to OFF (0)

       //

       MAP_GPIOPinWrite(GPIO_PORTN_BASE, GPIO_PIN_1, ~GPIO_PIN_1);

       //

       // Configure SysTick for a periodic interrupt.

       //

       MAP_SysTickPeriodSet(g_ui32SysClock / SYSTICKHZ);

       MAP_SysTickEnable();

       MAP_SysTickIntEnable();

       //

       //

       // Configure the hardware MAC address for Ethernet Controller filtering of

       // incoming packets.  The MAC address will be stored in the non-volatile

       // USER0 and USER1 registers.

       //

       MAP_FlashUserGet(&ui32User0, &ui32User1);

       if((ui32User0 == 0xffffffff) || (ui32User1 == 0xffffffff))

       {

           //

           // We should never get here.  This is an error if the MAC address has

           // not been programmed into the device.  Exit the program.

           // Let the user know there is no MAC address

           //

           UARTprintf("No MAC programmed!\n");

           while(1)

           {

           }

       }

       //

       // Tell the user what we are doing just now.

       //

       UARTprintf("Waiting for IP.\n");

       //

       // Convert the 24/24 split MAC address from NV ram into a 32/16 split MAC

       // address needed to program the hardware registers, then program the MAC

       // address into the Ethernet Controller registers.

       //

       pui8MACArray[0] = ((ui32User0 >>  0) & 0xff);

       pui8MACArray[1] = ((ui32User0 >>  8) & 0xff);

       pui8MACArray[2] = ((ui32User0 >> 16) & 0xff);

       pui8MACArray[3] = ((ui32User1 >>  0) & 0xff);

       pui8MACArray[4] = ((ui32User1 >>  8) & 0xff);

       pui8MACArray[5] = ((ui32User1 >> 16) & 0xff);

       //

       // Initialize the lwIP library, using DHCP.

       //

       lwIPInit(g_ui32SysClock, pui8MACArray, 0, 0, 0, IPADDR_USE_DHCP);

       //

       // Setup the device locator service.

       //

       LocatorInit();

       LocatorMACAddrSet(pui8MACArray);

       LocatorAppTitleSet("EK-TM4C1294XL enet_io");

       //

       // Initialize a sample httpd server.

       //

       httpd_init();

       //

       // Set the interrupt priorities.  We set the SysTick interrupt to a higher

       // priority than the Ethernet interrupt to ensure that the file system

       // tick is processed if SysTick occurs while the Ethernet handler is being

       // processed.  This is very likely since all the TCP/IP and HTTP work is

       // done in the context of the Ethernet interrupt.

       //

       MAP_IntPrioritySet(INT_EMAC0, ETHERNET_INT_PRIORITY);

       MAP_IntPrioritySet(FAULT_SYSTICK, SYSTICK_INT_PRIORITY);

       //

       // Loop forever.  All the work is done in interrupt handlers.

       //

       while(1)

       {

       }

    }

    i am just getting 'memory map initialisation complete' on my terminal console

  • i dont have UART connected to my board to get the display. what should be done to know the ip address in this case
  • I'm not that familiar with the Ubuntu OS. I did some google search and below links might be helpful to setup Virtual COM port in Unbuntu environment.

    askubuntu.com/.../setting-up-a-virtual-com-port
    help.ubuntu.com/.../VirtualSerialPort

  • i tried with the commands given in websites but that dint solve the problem. I want to know how lwip is getting the IP address how can we manipulate it.
  • Hi,

    Note that your DHCP server on the n/w will assign an IP address to the TCP server running on the TM4C1294. So you can't really manipulate the dynamic IP address (I'm not aware how to do it) unless you use the static IP address. The below post may be helpful to you if you are interested in static IP address.
    e2e.ti.com/.../1469006