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.

Concerto enet_uip demo not compiling

Other Parts Discussed in Thread: CONTROLSUITE

Has anyone been able to compile right out of the box the "enet_uip" demo project for Concerto. After installing ControlSuite, the default location for this project is C:\ti\controlSUITE\device_support\f28m35x\vBeta1\F28M35x_examples_Master\enet_uip. I am getting missing includes:

 

could not open source file "clock-arch.h" C:/ti/controlSUITE/device_support/f28m35x/vBeta1/MWare/third_party/uip-1.0/uip clock.h line 55

could not open source file "driverlib/debug.h" enet_uip_m3/utils ustdlib.c line 10

could not open source file "inc/hw_ints.h" enet_uip_m3 enet_uip.c line 9

could not open source file "inc/hw_ints.h" enet_uip_m3/utils uartstdio.c line 10

could not open source file "uip-conf.h" C:/ti/controlSUITE/device_support/f28m35x/vBeta1/MWare/third_party/uip-1.0/uip uipopt.h line 70

could not open source file "uip.h" enet_uip_m3 httpd.c line 34

could not open source file "uip.h" enet_uip_m3/third_party/uip-1.0/apps/dhcpc dhcpc.c line 37

They certainly can be fixed by hand, but I am wondering if anyone was able to compile and run this demo project "as is". 

 

Regards,

RGB

 

 

  • RGB said:

    Has anyone been able to compile right out of the box the "enet_uip" demo project for Concerto. After installing ControlSuite, the default location for this project is C:\ti\controlSUITE\device_support\f28m35x\vBeta1\F28M35x_examples_Master\enet_uip. I am getting missing includes:

     

     

     

    could not open source file "clock-arch.h" C:/ti/controlSUITE/device_support/f28m35x/vBeta1/MWare/third_party/uip-1.0/uip clock.h line 55

    could not open source file "driverlib/debug.h" enet_uip_m3/utils ustdlib.c line 10

    could not open source file "inc/hw_ints.h" enet_uip_m3 enet_uip.c line 9

    could not open source file "inc/hw_ints.h" enet_uip_m3/utils uartstdio.c line 10

    could not open source file "uip-conf.h" C:/ti/controlSUITE/device_support/f28m35x/vBeta1/MWare/third_party/uip-1.0/uip uipopt.h line 70

    could not open source file "uip.h" enet_uip_m3 httpd.c line 34

    could not open source file "uip.h" enet_uip_m3/third_party/uip-1.0/apps/dhcpc dhcpc.c line 37

     

     

    They certainly can be fixed by hand, but I am wondering if anyone was able to compile and run this demo project "as is". 

     

    Regards,

    RGB

     

     

    When you imported the project, did you select "copy to workspace"?  If so can you try it again without this option selected?

    Copying into the workspace can mess up linked resources, unfortunately.

    Regards

    Lori

     

  • I had the same problem; copying to workspace did not change the behavior.

    I had to follow these two undocumented steps. 

    1) Copy the folder “C:\TI\controlSUITE\device_support\f28m35x\v110\MWare” to “C:\”.

    2) Copy the files “clock-arch.h” and “uip-conf.h” from “C:\TI\controlSUITE\device_support\f28m35x\v110\F28M35x_examples_Master\enet_uip\m3” to a folder that is part of the include path.

    Hopefully in the future these instructions will appear in the comments at the top of the .c file named for a project, in this case “enet_uip.c”.

  • RGB,

    Are you use you have the latest version of controlSUITE?

    I see from your path that the project is in C:/ti/controlSUITE/device_support/f28m35x/vBeta1/, the latest should be C:/ti/controlSUITE/device_support/f28m35x/v110/

    Regards,

    Alvaro

  • Alvaro,

    At the time I ended up manually changing the include paths and it worked. I have installed the new version (v110), but have not tried it yet. 

    Regards,

    RGB

  • Good Afternoon,

    I was able to compile and run the program after removing the enet_uip_m3 project from my workspace and then re-importing it with the copy option off.  The project loads and runs, but I am still having problems, so I'm adding them to this series of postings because they are related to the same example code.

    1. I am running using an M36 Dock Kit, and I have stepped through the program and it is at the loop at the bottom of the main module now.  I can stop it and look around at variables.  The systick and its related variables are being updated.  The 500 ms delay is happening and the IP TX check routines are checking for data to transfer.  I have tried to set up the system using both the default MAC Address, and I have also updated it to match my board.  I am also never hitting the EthernetIntHandler breakpoint I set so I'm suspicious as to whether the chip setup is correct.

    2. I am watching traffic in my system using the WireShark Network Protocol Analyzer.  I can see pings requests on the network from my PC's trying to talk to the Card, but the card doesn't reply.  I can send pings between my pc's and watch the replies so I know the analyzer is working.

    3. Since the code I have specifically references the M35 in its comments I am wondering if there are other M35 to M36 port configuration setups that have not been updated in ControlSUITE yet, like I was notified in the blinky examples a week or so ago.  Has anyone completely gotten this example running on the M36 Kit?  If so, can you indicate all settings for jumpers and switches on the boards, plus any detailed changes to the code from the ControlSUITE supplied example that were required to actually run the program and communicate between the board and a PC.

    Sincerely,

    Mike Fontes

  • Good Afternoon,

    I am posting again to see if anyone has taken a look at the problem I described.  I can not get the Ethernet MAC to talk on the network.  There is no response to Pings or ARPs.  Has anyone run this example?  Is so please let me know what you had to do to get the connection going.

    Sincerely,

    Mike Fontes

  • Mike,

    Sorry for the slow response and the problems.  Yes the 36x examples had some problems with pin setup.  These are fixed internally and we are working on a new controlSUITE release for April 18th.

    In the meantime, try using these two source files instead of what you have now.  This should resolve your problem.

    //###########################################################################
    // FILE:   set_pinout_f28m35x.c
    // TITLE:  GPIO setup for the F28M35x controlCARD.
    //###########################################################################
    // $TI Release: F28M36x Support Library v160 $
    // $Release Date: Tue Apr  9 12:56:15 CDT 2013 $
    //###########################################################################
    
    #include "inc/hw_gpio.h"
    #include "inc/hw_memmap.h"
    #include "inc/hw_types.h"
    #include "driverlib/debug.h"
    #include "driverlib/epi.h"
    #include "driverlib/gpio.h"
    #include "driverlib/i2c.h"
    #include "driverlib/rom.h"
    #include "driverlib/sysctl.h"
    #include "board_drivers/set_pinout_f28m36x.h"
    
    //*****************************************************************************
    //
    //! \addtogroup set_pinout_api
    //! @{
    //
    //*****************************************************************************
    
    
    
    //*****************************************************************************
    //
    // Set the GPIO port control registers appropriately for the hardware.
    //
    // This function determines the correct port control settings to enable the
    // basic peripheral signals for the development board on their respective pins
    // and also ensures that all required EPI signals are correctly routed.  The
    // EPI signal configuration is determined from the daughter board information
    // structure passed via the \e psInfo parameter.
    //
    //*****************************************************************************
    static void
    PortControlSet(void)
    {
       
        //
        // To begin with, we set the port control values for all the non-EPI
        // peripherals.
        //
    
    
        //UART Setup
        GPIOPinConfigure(GPIO_PE4_U0RX);
        GPIOPinConfigure(GPIO_PE5_U0TX);
        
        //SSI SD Card Setup
        GPIOPinTypeSSI(SDC_GPIO_PORT_BASE, SDC_SSI_TX | SDC_SSI_RX | SDC_SSI_CLK);
        GPIOPinTypeGPIOOutput(SDCARD_CS_BASE, SDCARD_CS_PIN);
        GPIOPadConfigSet(SDC_GPIO_PORT_BASE, SDC_SSI_PINS,
                         GPIO_PIN_TYPE_STD_WPU);
        GPIOPadConfigSet(SDCARD_CS_BASE, SDCARD_CS_PIN,
                         GPIO_PIN_TYPE_STD_WPU);
        GPIOPinConfigure(GPIO_PD0_SSI0TX);
        GPIOPinConfigure(GPIO_PD1_SSI0RX);
        GPIOPinConfigure(GPIO_PD2_SSI0CLK);
        GPIOPinWrite(SDCARD_CS_BASE, SDCARD_CS_PIN, SDCARD_CS_PIN);
    
    
        // USB Pins
        GPIOPinConfigure(GPIO_PC5_USB0EPEN);
        GPIOPinConfigure(GPIO_PJ1_USB0PFLT);
        GPIOPinTypeUSBDigital(GPIO_PORTC_BASE, GPIO_PIN_5);
        GPIOPinTypeUSBDigital(GPIO_PORTJ_BASE, GPIO_PIN_1);
        GPIOPinTypeUSBAnalog(GPIO_PORTF_BASE, GPIO_PIN_6);
        GPIOPinTypeUSBAnalog(GPIO_PORTG_BASE, GPIO_PIN_2 | GPIO_PIN_5 | GPIO_PIN_6);
    
    
        //Ethernet pin setup
        GPIODirModeSet(GPIO_PORTK_BASE,
                       GPIO_PIN_4 | GPIO_PIN_5 | GPIO_PIN_7,
                       GPIO_DIR_MODE_HW);
    	GPIOPadConfigSet(GPIO_PORTK_BASE,
                         GPIO_PIN_4 | GPIO_PIN_5 | GPIO_PIN_7,
                         GPIO_PIN_TYPE_STD);
    	GPIOPinConfigure(GPIO_PK4_MIITXEN);
    	GPIOPinConfigure(GPIO_PK5_MIITXCK);
    	GPIOPinConfigure(GPIO_PK7_MIICRS);
    
    
    	GPIODirModeSet(GPIO_PORTL_BASE,
                       GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_3 |
                       GPIO_PIN_4 | GPIO_PIN_5 | GPIO_PIN_6 | GPIO_PIN_7,
                       GPIO_DIR_MODE_HW);
    	GPIOPadConfigSet(GPIO_PORTL_BASE,
                         GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_3 |
                         GPIO_PIN_4 | GPIO_PIN_5 | GPIO_PIN_6 | GPIO_PIN_7,
                         GPIO_PIN_TYPE_STD);
    	GPIOPinConfigure(GPIO_PL0_MIIRXD3);
    	GPIOPinConfigure(GPIO_PL1_MIIRXD2);
    	GPIOPinConfigure(GPIO_PL2_MIIRXD1);
    	GPIOPinConfigure(GPIO_PL3_MIIRXD0);
    	GPIOPinConfigure(GPIO_PL4_MIICOL);
    	GPIOPinConfigure(GPIO_PL5_MIIPHYRSTN);
    	GPIOPinConfigure(GPIO_PL6_MIIPHYINTRN);
    	GPIOPinConfigure(GPIO_PL7_MIIMDC);
    
    	GPIODirModeSet(GPIO_PORTM_BASE,
                       GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_3 |
                       GPIO_PIN_4 | GPIO_PIN_5 | GPIO_PIN_6 | GPIO_PIN_7,
                       GPIO_DIR_MODE_HW);
    	GPIOPadConfigSet(GPIO_PORTM_BASE,
                         GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_3 |
                         GPIO_PIN_4 | GPIO_PIN_5 | GPIO_PIN_6 | GPIO_PIN_7,
                         GPIO_PIN_TYPE_STD);
    	GPIOPinConfigure(GPIO_PM0_MIIMDIO);
    	GPIOPinConfigure(GPIO_PM1_MIITXD3);
    	GPIOPinConfigure(GPIO_PM2_MIITXD2);
    	GPIOPinConfigure(GPIO_PM3_MIITXD1);
    	GPIOPinConfigure(GPIO_PM4_MIITXD0);
    	GPIOPinConfigure(GPIO_PM5_MIIRXDV);
    	GPIOPinConfigure(GPIO_PM6_MIIRXER);
    	GPIOPinConfigure(GPIO_PM7_MIIRXCK);
    
    
    
    
    
    }
    
    //*****************************************************************************
    //
    //! Configures the device pinout for the development board.
    //!
    //! This function configures each pin of the device to route the! appropriate
    //! peripheral signal as required by the design of the development board.
    //!
    //! \note This module can be built in two ways.  If the label SIMPLE_PINOUT_SET
    //! is not defined, the PinoutSet() function will attempt to read an I2C EEPROM
    //! to determine which daughter board is attached to the development kit board
    //! and use information from that EEPROM to dynamically configure the EPI
    //! appropriately.  In this case, if no EEPROM is found, the EPI configuration
    //! will default to that required to use the SDRAM daughter board which is
    //! included with the base development kit.
    //!
    //! If SIMPLE_PINOUT_SET is defined, however, all the dynamic configuration
    //! code is replaced with a very simple function which merely sets the pinout
    //! and EPI configuration statically.  This is a better representation of how a
    //! real-world application would likely initialize the pinout and EPI timing
    //! and takes significantly less code space than the dynamic, daughter-board
    //! detecting version.  The example offered here sets the pinout and EPI
    //! configuration appropriately for the Flash/SRAM/LCD daughter board.
    //!
    //! \return None.
    //
    //*****************************************************************************
    void
    PinoutSet(void)
    {
        
        //
        // Enable all GPIO banks.
        //
        SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOA);
        SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOB);
        SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOC);
        SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOD);
        SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOE);
        SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOF);
        SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOG);
        SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOH);
        SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOJ);
        SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOK);
        SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOL);
        SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOM);
        SysCtlPeripheralEnable(SYSCTL_PERIPH_GPION);
        SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOP);
        SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOQ);
        SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOR);
        SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOS);
    
    
        //
        // Determine the port control settings required to enable the EPI pins
        // and other peripheral signals for this daughter board and set all the
        // GPIO port control registers.
        //
        PortControlSet();
    
    }
    
    //*****************************************************************************
    //
    // Close the Doxygen group.
    //! @}
    //
    //*****************************************************************************
    

    2234.set_pinout_f28m36x.h

    //###########################################################################
    // FILE:   enet_uip.c
    // TITLE:  Ethernet GPIO control using uIP TCP/IP stack
    //###########################################################################
    // $TI Release: F28M36x Support Library v160 $
    // $Release Date: Tue Apr  9 12:56:15 CDT 2013 $
    //###########################################################################
    
    #include "inc/hw_ints.h"
    #include "inc/hw_nvic.h"
    #include "inc/hw_gpio.h"
    #include "inc/hw_udma.h"
    #include "inc/hw_types.h"
    #include "inc/hw_memmap.h"
    #include "inc/hw_sysctl.h"
    #include "inc/hw_ethernet.h"
    
    #include "board_drivers/set_pinout_f28m36x.h"
    
    #include "driverlib/udma.h"
    #include "driverlib/gpio.h"
    #include "driverlib/debug.h"
    #include "driverlib/sysctl.h"
    #include "driverlib/systick.h"
    #include "driverlib/ethernet.h"
    #include "driverlib/interrupt.h"
    
    #include "utils/ustdlib.h"
    #include "utils/uartstdio.h"
    
    #include "uip/uip.h"
    #include "uip/uip_arp.h"
    #include "httpd.h"
    #include "dhcpc/dhcpc.h"
    
    //*****************************************************************************
    //! \addtogroup master_example_list
    //! <h1>Ethernet GPIO control using uIP stack (enet_uip)</h1>
    //!
    //! This example application demonstrates controlling a GPIO pin using ethernet
    //! communication. It makes use of the uIP TCP/IP stack.
    //! A basic web site is served over the Ethernet port. The web site displays
    //! a few lines of text, a Toggle LED button, an input to select an LED (6 or 7)
    //! and a get status button. The user specifies which LED needs to be toggled
    //! and presses the Toggle button. The user gets the status of the LED(ON or 
    //! OFF), by pressing the Get status button.
    //! This code uses a static IP address. Depending on the client machine,the user
    //! may need to manually set a fixed static IP address.
    //! Follow the following steps to assign a static IP address to the client
    //! machine
    //!  - disable any wireless connection that may be active.
    //!  - start-> control Panel->right click on "Network connection"->open.
    //!  - Identify the connection to use "Local Area connection" or "Wired
    //!    Network Connection" or some other name depending on the client machine.
    //!  - Right click on the connection -> click on properties. In the "Local Area
    //!    Connection" or "Wired Network connection" properties window under
    //!    "general" tab in the "This connection uses the following items:" list 
    //!    scroll down and click on "Internet Protocol (TCP/IP)" item(! don't 
    //!    uncheck it). click on properties. In the "Internet Protocol(TCP/IP) 
    //!    properties" window select "Use the following IP address" and enter the 
    //!    following:
    //!         IP address:   "169.254.42.86"
    //!         Subnet mask:  "255.255.0.0"
    //!  - click "ok" twice to close the open dialog boxes.
    //!  - Remember to revert back the above settings to their default values once
    //!    the use of this server is complete.
    //!  - The IP address for the server is "169.254.254.169"
    //!
    //! 
    //! \b Note
    //! - Connect the MAC with the PHY using the provided jumpers.
    //!	  Connect the first 15 pins of Row C to Row B using the jumpers.
    //!
    //! - All EMAC examples use a generic TI�s MAC address A8-63-F2-00-00-80. 
    //!   User defined MAC address can be programmed in a fixed non-volatile memory 
    //!   location. Refer to device data sheet and reference guides for details.
    //!
    //! \b Caution
    //! - If you have two concerto CCARDS communicating with each other, they 
    //!   need to have different EMAC addresses.
    //!
    //! For additional details on uIP, refer to the uIP web page at:
    //! http://www.sics.se/~adam/old-uip/
    //
    //*****************************************************************************
    
    //*****************************************************************************
    // Defines for setting up the system clock.
    //*****************************************************************************
    #define SYSTICKHZ               CLOCK_CONF_SECOND
    #define SYSTICKMS               (1000 / SYSTICKHZ)
    #define SYSTICKUS               (1000000 / SYSTICKHZ)
    #define SYSTICKNS               (1000000000 / SYSTICKHZ)
    
    //*****************************************************************************
    // Macro for accessing the Ethernet header information in the buffer.
    //*****************************************************************************
    u8_t ucUIPBuffer[UIP_BUFSIZE + 2];
    u8_t *uip_buf;
    
    #define BUF                     ((struct uip_eth_hdr *)uip_buf)
    
    //*****************************************************************************
    // A set of flags.  The flag bits are defined as follows:
    //     0 -> An indicator that a SysTick interrupt has occurred.
    //     1 -> An RX Packet has been received.
    //     2 -> A TX packet DMA transfer is pending.
    //     3 -> A RX packet DMA transfer is pending.
    //*****************************************************************************
    #define FLAG_SYSTICK            0
    #define FLAG_RXPKT              1
    #define FLAG_TXPKT              2
    #define FLAG_RXPKTPEND          3
    static volatile unsigned long g_ulFlags;
    
    //*****************************************************************************
    // A system tick counter, incremented every SYSTICKMS.
    //*****************************************************************************
    volatile unsigned long g_ulTickCounter = 0;
    
    //*****************************************************************************
    // The control table used by the uDMA controller.  This table must be aligned
    // to a 1024 byte boundary.  In this application uDMA is only used for USB,
    // so only the first 8 channels are needed.
    //*****************************************************************************
    #pragma DATA_ALIGN(g_sDMAControlTable, 1024)
    tDMAControlTable g_sDMAControlTable[8];
    
    //*****************************************************************************
    // Default TCP/IP Settings for this application.
    // Default to Link Local address ... (169.254.1.0 to 169.254.254.255).  Note:
    // This application does not implement the Zeroconf protocol.  No ARP query is
    // issued to determine if this static IP address is already in use.
    // TODO:  Uncomment the following #define statement to enable STATIC IP
    // instead of DHCP.
    //*****************************************************************************
    #define USE_STATIC_IP
    
    #ifndef DEFAULT_IPADDR0
    #define DEFAULT_IPADDR0         169
    #endif
    
    #ifndef DEFAULT_IPADDR1
    #define DEFAULT_IPADDR1         254
    #endif
    
    #ifndef DEFAULT_IPADDR2
    #define DEFAULT_IPADDR2         254
    #endif
    
    #ifndef DEFAULT_IPADDR3
    #define DEFAULT_IPADDR3         169
    #endif
    
    #ifndef DEFAULT_NETMASK0
    #define DEFAULT_NETMASK0        255
    #endif
    
    #ifndef DEFAULT_NETMASK1
    #define DEFAULT_NETMASK1        255
    #endif
    
    #ifndef DEFAULT_NETMASK2
    #define DEFAULT_NETMASK2        0
    #endif
    
    #ifndef DEFAULT_NETMASK3
    #define DEFAULT_NETMASK3        0
    #endif
    
    //*****************************************************************************
    // UIP Timers (in MS)
    //*****************************************************************************
    #define UIP_PERIODIC_TIMER_MS   500
    #define UIP_ARP_TIMER_MS        10000
    
    //*****************************************************************************
    // Defines for commands
    //*****************************************************************************
    #define TOGGLE_LED_6     0xA1
    #define TOGGLE_LED_7     0xA2
    #define GET_LED6_STATUS  0xA3
    #define GET_LED7_STATUS  0xA4
    #define INVALID_CMD      0xA5
    #define INVALID_INPUT    0xA6
    #define NO_CMD           0xA6
    
    //*****************************************************************************
    // functions added in httpd.c
    //*****************************************************************************
    extern void httpd_clear_command(void);
    extern void httpd_clear_command(void);
    extern int httpd_get_command(int *command_word);
    extern void httpd_insert_response(int data_length,char *data);
    
    //*****************************************************************************
    // Responses displayed to the user
    //*****************************************************************************
    const char led6_on[] = " LED6_ON";
    const char led6_off[] = "LED6_OFF";
    const char led7_on[] = " LED7_ON";
    const char led7_off[] = "LED7_OFF";
    
    //*****************************************************************************
    // The error routine that is called if the driver library encounters an error.
    //*****************************************************************************
    #ifdef DEBUG
    void
    __error__(char *pcFilename, unsigned long ulLine)
    {
    }
    
    #endif
    
    //*****************************************************************************
    // The interrupt handler for the SysTick interrupt.
    //*****************************************************************************
    void
    SysTickIntHandler(void)
    {
        // Increment the system tick count.
        g_ulTickCounter++;
    
        // Indicate that a SysTick interrupt has occurred.
        HWREGBITW(&g_ulFlags, FLAG_SYSTICK) = 1;
    }
    
    //*****************************************************************************
    // Display the current IP address on the screen and transmit it via the UART.
    //*****************************************************************************
    void
    ShowIPAddress(const uip_ipaddr_t sIPAddr)
    {
        char pcBuffer[24];
    
        usprintf(pcBuffer, "IP: %d.%d.%d.%d", sIPAddr[0] & 0xff,
                 sIPAddr[0] >> 8, sIPAddr[1] & 0xff, sIPAddr[1] >> 8);
    }
    
    //*****************************************************************************
    //! When using the timer module in UIP, this function is required to return
    //! the number of ticks.  Note that the file "clock-arch.h" must be provided
    //! by the application, and define CLOCK_CONF_SECONDS as the number of ticks
    //! per second, and must also define the typedef "clock_time_t".
    //*****************************************************************************
    clock_time_t
    clock_time(void)
    {
        return((clock_time_t)g_ulTickCounter);
    }
    
    //*****************************************************************************
    // The interrupt handler for the Ethernet interrupt.
    //*****************************************************************************
    void
    EthernetIntHandler(void)
    {
        unsigned long ulTemp;
    
        // Read and Clear the interrupt.
        ulTemp = EthernetIntStatus(ETH_BASE, false);
        EthernetIntClear(ETH_BASE, ulTemp);
    
        // Check to see if an RX Interrupt has occurred.
        if(ulTemp & ETH_INT_RX)
        {
            // Indicate that a packet has been received.
            HWREGBITW(&g_ulFlags, FLAG_RXPKT) = 1;
    
            // Disable Ethernet RX Interrupt.
            EthernetIntDisable(ETH_BASE, ETH_INT_RX);
        }
    
        // Check to see if waiting on a DMA to complete.
        if(HWREGBITW(&g_ulFlags, FLAG_RXPKTPEND) == 1)
        {
            // Verify the channel transfer is done
            if(uDMAChannelModeGet(UDMA_CHANNEL_ETH0RX) == UDMA_MODE_STOP)
            {
                // Indicate that a data has been read in.
                HWREGBITW(&g_ulFlags, FLAG_RXPKTPEND) = 0;
            }
        }
    
        // Check to see if the Ethernet TX uDMA channel was pending.
        if(HWREGBITW(&g_ulFlags, FLAG_TXPKT) == 1)
        {
            // Verify the channel transfer is done
            if(uDMAChannelModeGet(UDMA_CHANNEL_ETH0TX) == UDMA_MODE_STOP)
            {
                // Trigger the transmission of the data.
                HWREG(ETH_BASE + MAC_O_TR) = MAC_TR_NEWTX;
    
                // Indicate that a packet has been sent.
                HWREGBITW(&g_ulFlags, FLAG_TXPKT) = 0;
            }
        }
    }
    
    //*****************************************************************************
    // Callback for when DHCP client has been configured.
    //*****************************************************************************
    void
    dhcpc_configured(const struct dhcpc_state *s)
    {
        uip_sethostaddr(&s->ipaddr);
        uip_setnetmask(&s->netmask);
        uip_setdraddr(&s->default_router);
        ShowIPAddress(s->ipaddr);
    }
    
    //*****************************************************************************
    // Read a packet using DMA instead of directly reading the FIFO if the
    // alignment will allow it.
    //*****************************************************************************
    long
    EthernetPacketGetDMA(unsigned long ulBase, unsigned char *pucBuf, long lBufLen)
    {
        unsigned long ulTemp;
        unsigned char pucData[4];
        unsigned char *pucBuffer;
        long lTempLen, lFrameLen;
        long lRemainder;
        int iIdx;
    
        // Check the arguments.
        ASSERT(ulBase == ETH_BASE);
        ASSERT(pucBuf != 0);
        ASSERT(lBufLen > 0);
    
        // If the buffer is not aligned on an odd half-word then it cannot use DMA.
        // This is because the two packet length bytes are written in front of the
        // packet, and the packet data must have two bytes that can be pulled off
        // to become a word and leave the remainder of the buffer word aligned.
        if(((unsigned long)pucBuf & 3) != 2)
        {
            // If there is not proper alignment the packet must be sent without
            // using DMA.
            return(EthernetPacketGetNonBlocking(ulBase, pucBuf, lBufLen));
        }
    
        // Read WORD 0 from the FIFO, set the receive Frame Length and store the
        // first two bytes of the destination address in the receive buffer.
        ulTemp = HWREG(ulBase + MAC_O_DATA);
        lFrameLen = (long)(ulTemp & 0xffff);
        pucBuf[0] = (unsigned char)((ulTemp >> 16) & 0xff);
        pucBuf[1] = (unsigned char)((ulTemp >> 24) & 0xff);
    
        // The maximum DMA size is the frame size - the two bytes already read and
        // truncated to the nearest word size.
        lTempLen = (lFrameLen - 2) & 0xfffffffc;
        lRemainder = (lFrameLen - 2) & 3;
    
        // Don't allow writing beyond the end of the buffer.
        if(lBufLen < lTempLen)
        {
            lRemainder = lTempLen - lBufLen;
            lTempLen =  lBufLen;
        }
        else if(lBufLen >= (lFrameLen - 2 + 3))
        {
            // If there is room, just DMA the last word as well so that the
            // special copy after DMA is not required.
            lRemainder = 0;
            lTempLen = lFrameLen - 2 + 3;
        }
    
        // Mark the receive as pending.
        HWREGBITW(&g_ulFlags, FLAG_RXPKTPEND) = 1;
    
        // Set up the DMA to transfer the Ethernet header when a
        // packet is received
        uDMAChannelTransferSet(UDMA_CHANNEL_ETH0RX, UDMA_MODE_AUTO,
                               (void *)(ETH_BASE + MAC_O_DATA),
                               &pucBuf[2], lTempLen>>2);
        uDMAChannelEnable(UDMA_CHANNEL_ETH0RX);
    
        // Issue a software request to start the channel running.
        uDMAChannelRequest(UDMA_CHANNEL_ETH0RX);
    
        // Wait for the previous transmission to be complete.
        while(HWREGBITW(&g_ulFlags, FLAG_RXPKTPEND) == 1)
        {
        }
    
        // See if there are extra bytes to read into the buffer.
        if(lRemainder)
        {
            // If the remainder is more than 3 bytes then the buffer was never big
            // enough and data must be tossed.
            if(lRemainder > 3)
            {
                // Read any remaining WORDS (that did not fit into the buffer).
                while(lRemainder > 0)
                {
                    ulTemp = HWREG(ulBase + MAC_O_DATA);
                    lRemainder -= 4;
                }
            }
    
            // Read the last word from the FIFO.
            *((unsigned long *)&pucData[0]) = HWREG(ulBase + MAC_O_DATA);
    
            // The current buffer position is lTempLen plus the two bytes read
            // from the first word.
            pucBuffer = &pucBuf[lTempLen + 2];
    
            // Read off each individual byte and save it.
            for(iIdx = 0; iIdx < lRemainder; iIdx++)
            {
                pucBuffer[iIdx] = pucData[iIdx];
            }
        }
    
        // If frame was larger than the buffer, return the "negative" frame length.
        lFrameLen -= 6;
        if(lFrameLen > lBufLen)
        {
            return(-lFrameLen);
        }
    
        // Return the Frame Length
        return(lFrameLen);
    }
    
    //*****************************************************************************
    // Transmit a packet using DMA instead of directly writing the FIFO if the
    // alignment will allow it.
    //*****************************************************************************
    static long
    EthernetPacketPutDMA(unsigned long ulBase, unsigned char *pucBuf,
                         long lBufLen)
    {
        unsigned long ulTemp;
    
        // If the buffer is not aligned on an odd half-word then it cannot use DMA.
        // This is because the two packet length bytes are written in front of the
        // packet, and the packet data must have two bytes that can be pulled off
        // to become a word and leave the remainder of the buffer word aligned.
        if(((unsigned long)pucBuf & 3) != 2)
        {
            // If there is not proper aligment the packet must be sent without
            // using DMA.
            return(EthernetPacketPut(ulBase, pucBuf, lBufLen));
        }
    
        // Indicate that a packet is being sent.
        HWREGBITW(&g_ulFlags, FLAG_TXPKT) = 1;
    
        // Build and write WORD 0 (see format above) to the transmit FIFO.
        ulTemp = (unsigned long)(lBufLen - 14);
        ulTemp |= (*pucBuf++) << 16;
        ulTemp |= (*pucBuf++) << 24;
        HWREG(ulBase + MAC_O_DATA) = ulTemp;
    
        // Force an extra word to be transferred if the end of the buffer is not
        // aligned on a word boundary.  The math is actually lBufLen - 2 + 3 to
        // insure that the proper number of bytes are written.
        lBufLen += 1;
    
        // Configure the TX DMA channel to transfer the packet buffer.
        uDMAChannelTransferSet(UDMA_CHANNEL_ETH0TX, UDMA_MODE_AUTO,
                               pucBuf, (void *)(ETH_BASE + MAC_O_DATA),
                               lBufLen>>2);
    
        // Enable the Ethernet Transmit DMA channel.
        uDMAChannelEnable(UDMA_CHANNEL_ETH0TX);
    
        // Issue a software request to start the channel running.
        uDMAChannelRequest(UDMA_CHANNEL_ETH0TX);
    
        // Wait for the previous transmission to be complete.
        while((HWREGBITW(&g_ulFlags, FLAG_TXPKT) == 1) &&
              EthernetSpaceAvail(ETH_BASE))
        {
        }
    
        // Take back off the byte that we addeded above.
        return(lBufLen - 1);
    
    }
    
    //*****************************************************************************
    // respond to commands sent by the user (client)
    //
    //*****************************************************************************
    void EthernetProcessCMD(int command)
    {
    
        static unsigned char toggle_LED6 = 0;
        static unsigned char toggle_LED7 = 0;
    
        switch(command)
        {
        case TOGGLE_LED_7:
            toggle_LED7 = ~toggle_LED7;
            GPIOPinWrite(GPIO_PORTC_BASE, GPIO_PIN_6, toggle_LED7);
            break;
    
        case TOGGLE_LED_6:
            toggle_LED6 = ~toggle_LED6;
            GPIOPinWrite(GPIO_PORTC_BASE, GPIO_PIN_7, toggle_LED6);
            break;
    
        case GET_LED6_STATUS:
            if(GPIOPinRead(GPIO_PORTC_BASE,GPIO_PIN_7)& 0x80)
                httpd_insert_response(sizeof(led6_off)-1,(char *)led6_off);
            else
                httpd_insert_response(sizeof(led6_on)-1,(char *)led6_on);
            break;
    
        case GET_LED7_STATUS:
            if(GPIOPinRead(GPIO_PORTC_BASE,GPIO_PIN_6) & 0x40)
                httpd_insert_response(sizeof(led7_off)-1,(char *)led7_off);
            else
                httpd_insert_response(sizeof(led7_on)-1,(char *)led7_on);
            break;
    
        default:
    
            break;
        }
    }
    
    //*****************************************************************************
    // This example demonstrates the use of the Ethernet Controller with the uIP
    // TCP/IP stack.
    //*****************************************************************************
    int
    main(void)
    {
        uip_ipaddr_t ipaddr;
        static struct uip_eth_addr sTempAddr;
        long lPeriodicTimer, lARPTimer;
        unsigned long ulUser0, ulUser1;
        unsigned long ulTemp;
        int command_word;
    
        // Disable Protection
        HWREG(SYSCTL_MWRALLOW) =  0xA5A5A5A5;
    
    
        // Sets up PLL, M3 running at 100MHz and C28 running at 100MHz
        SysCtlClockConfigSet(SYSCTL_USE_PLL | (SYSCTL_SPLLIMULT_M & 0xA) |
                             SYSCTL_SYSDIV_1 | SYSCTL_M3SSDIV_1 |
                             SYSCTL_XCLKDIV_4);
    
        PinoutSet();
    
        // Enable clock supply for the following peripherals
        SysCtlPeripheralEnable(SYSCTL_PERIPH_UDMA);
        SysCtlPeripheralEnable(SYSCTL_PERIPH_ETH);
    
        // Disable clock supply for the watchdog modules
        SysCtlPeripheralDisable(SYSCTL_PERIPH_WDOG1);
        SysCtlPeripheralDisable(SYSCTL_PERIPH_WDOG0);
    
        // Set up LED7 pin
        GPIOPinTypeGPIOOutput(LED_0_BASE, LED_0_PIN);
        GPIOPinWrite(LED_0_BASE, LED_0_PIN, 0);
    
        // Set up LED6 pin
        GPIOPinTypeGPIOOutput(LED_1_BASE, LED_1_PIN);
        GPIOPinWrite(LED_1_BASE, LED_1_PIN, 0);
    
        // Adjust the pointer to be aligned on an odd half word address so that
        // DMA can be used.
        uip_buf = (u8_t *)(((unsigned long)ucUIPBuffer + 3) & 0xfffffffe);
    
        // Enable the uDMA controller and set up the control table base.
        SysCtlPeripheralEnable(SYSCTL_PERIPH_UDMA);
        uDMAEnable();
        uDMAControlBaseSet(g_sDMAControlTable);
    
        // Configure the DMA TX channel
        uDMAChannelAttributeDisable(UDMA_CHANNEL_ETH0TX, UDMA_ATTR_ALL);
        uDMAChannelControlSet(UDMA_CHANNEL_ETH0TX,
                              UDMA_SIZE_32 | UDMA_SRC_INC_32 |
                              UDMA_DST_INC_NONE | UDMA_ARB_8);
    
        // Set user/company specific MAC octets
        // (for this code we are using A8-63-F2-00-00-80)
        // 0x00 MACOCT3 MACOCT2 MACOCT1
        ulUser0 = 0x00F263A8;
    
        // 0x00 MACOCT6 MACOCT5 MACOCT4
        ulUser1 = 0x00800000;
    
        // User needs to program user specific MAC address into Flash
        // and read it on power up
        if((ulUser0 == 0xffffffff) || (ulUser1 == 0xffffffff))
        {
            // We should never get here.  This is an error if the MAC address has
            // not been programmed into the device.  Exit the program.
            while(1)
            {
            }
        }
    
        // Enable and Reset the Ethernet Controller.
        SysCtlPeripheralEnable(SYSCTL_PERIPH_ETH);
        SysCtlPeripheralReset(SYSCTL_PERIPH_ETH);
    
        // Configure SysTick for a periodic interrupt.
        SysTickPeriodSet(SysCtlClockGet(SYSTEM_CLOCK_SPEED) / SYSTICKHZ);
        SysTickEnable();
        IntRegister(FAULT_SYSTICK, SysTickIntHandler);
        SysTickIntEnable();
    
        // Configure the DMA channel for Ethernet receive.
        uDMAChannelAttributeDisable(UDMA_CHANNEL_ETH0RX, UDMA_ATTR_ALL);
        uDMAChannelControlSet(UDMA_CHANNEL_ETH0RX,
                              UDMA_SIZE_32 | UDMA_SRC_INC_NONE |
                              UDMA_DST_INC_32 | UDMA_ARB_8);
    
        // Initialize the Ethernet Controller and disable all Ethernet Controller
        // interrupt sources.
        EthernetIntDisable(ETH_BASE, (ETH_INT_PHY | ETH_INT_MDIO |
                                      ETH_INT_RXER | ETH_INT_RXOF |
                                      ETH_INT_TX | ETH_INT_TXER | ETH_INT_RX));
        ulTemp = EthernetIntStatus(ETH_BASE, false);
        EthernetIntClear(ETH_BASE, ulTemp);
    
        // Initialize the Ethernet Controller for operation.
        EthernetInitExpClk(ETH_BASE, SysCtlClockGet(SYSTEM_CLOCK_SPEED));
    
        // Configure the Ethernet Controller for normal operation.
        // - Full Duplex
        // - TX CRC Auto Generation
        // - TX Padding Enabled
        EthernetConfigSet(ETH_BASE, (ETH_CFG_TX_DPLXEN | ETH_CFG_TX_CRCEN |
                                     ETH_CFG_TX_PADEN));
    
        // Wait for the link to become active.
        while((EthernetPHYRead(ETH_BASE, PHY_MR1) & 0x0004) == 0)
        {
        }
    
        // Enable the Ethernet Controller.
        EthernetEnable(ETH_BASE);
        
        
    
        // Enable and register the Ethernet interrupt.
        IntRegister(INT_ETH, EthernetIntHandler);
        IntEnable(INT_ETH);
    
    
        // Enable the Ethernet RX Packet interrupt source.
        EthernetIntEnable(ETH_BASE, ETH_INT_RX);
    
        // Enable all processor interrupts.
        IntMasterEnable();
    
        // Initialize the uIP TCP/IP stack.
        uip_init();
    #ifdef USE_STATIC_IP
        uip_ipaddr(ipaddr, DEFAULT_IPADDR0, DEFAULT_IPADDR1, DEFAULT_IPADDR2,
                   DEFAULT_IPADDR3);
        uip_sethostaddr(ipaddr);
        ShowIPAddress(ipaddr);
        uip_ipaddr(ipaddr, DEFAULT_NETMASK0, DEFAULT_NETMASK1, DEFAULT_NETMASK2,
                   DEFAULT_NETMASK3);
        uip_setnetmask(ipaddr);
    #else
        uip_ipaddr(ipaddr, 0, 0, 0, 0);
        uip_sethostaddr(ipaddr);
        uip_ipaddr(ipaddr, 0, 0, 0, 0);
        uip_setnetmask(ipaddr);
    #endif
    
        // Convert the 24/24 split MAC address from ram into a 32/16 split MAC
        // address needed to program the hardware registers, then program the MAC
        // address into the Ethernet Controller registers.
        sTempAddr.addr[0] = ((ulUser0 >>  0) & 0xff);
        sTempAddr.addr[1] = ((ulUser0 >>  8) & 0xff);
        sTempAddr.addr[2] = ((ulUser0 >> 16) & 0xff);
        sTempAddr.addr[3] = ((ulUser1 >>  0) & 0xff);
        sTempAddr.addr[4] = ((ulUser1 >>  8) & 0xff);
        sTempAddr.addr[5] = ((ulUser1 >> 16) & 0xff);
    
        // Program the hardware with it's MAC address (for filtering).
        EthernetMACAddrSet(ETH_BASE, (unsigned char *)&sTempAddr);
        uip_setethaddr(sTempAddr);
    
        // Initialize the TCP/IP Application (e.g. web server).
        httpd_init();
    
    #ifndef USE_STATIC_IP
    
        // Initialize the DHCP Client Application.
        dhcpc_init(&sTempAddr.addr[0], 6);
        dhcpc_request();
    #endif
    
        // Main Application Loop.
        lPeriodicTimer = 0;
        lARPTimer = 0;
        httpd_clear_command();
        while(true)
        {
    
            // Wait for an event to occur.  This can be either a System Tick event,
            // or an RX Packet event.
            while(!g_ulFlags)
            {
            }
    
            // If SysTick, Clear the SysTick interrupt flag and increment the
            // timers.
            if(HWREGBITW(&g_ulFlags, FLAG_SYSTICK) == 1)
            {
                HWREGBITW(&g_ulFlags, FLAG_SYSTICK) = 0;
                lPeriodicTimer += SYSTICKMS;
                lARPTimer += SYSTICKMS;
            }
    
            // Check for an RX Packet and read it.
            if(HWREGBITW(&g_ulFlags, FLAG_RXPKT))
            {
                // Get the packet and set uip_len for uIP stack usage.
                uip_len = (unsigned short)EthernetPacketGetDMA(ETH_BASE, uip_buf,
                                                               sizeof(ucUIPBuffer));
    
                // Clear the RX Packet event and re-enable RX Packet interrupts.
                if(HWREGBITW(&g_ulFlags, FLAG_RXPKT) == 1)
                {
                    HWREGBITW(&g_ulFlags, FLAG_RXPKT) = 0;
                    EthernetIntEnable(ETH_BASE, ETH_INT_RX);
                }
    
                // Process incoming IP packets here.
                if(BUF->type == htons(UIP_ETHTYPE_IP))
                {
    
                    uip_arp_ipin();
                    uip_input(); //uip_process (calls uip_appcall())
    
                    if(httpd_get_command(&command_word))
                    {
                        httpd_clear_command();
                        EthernetProcessCMD(command_word);
                    }
    
                    // If the above function invocation resulted in data that
                    // should be sent out on the network, the global variable
                    // uip_len is set to a value > 0.
                    if(uip_len > 0)
                    {
                        uip_arp_out();
                        EthernetPacketPutDMA(ETH_BASE, uip_buf, uip_len);
                        uip_len = 0;
                    }
                }
    
                // Process incoming ARP packets here.
                else if(BUF->type == htons(UIP_ETHTYPE_ARP))
                {
                    uip_arp_arpin();
    
                    // If the above function invocation resulted in data that
                    // should be sent out on the network, the global variable
                    // uip_len is set to a value > 0.
                    if(uip_len > 0)
                    {
                        EthernetPacketPutDMA(ETH_BASE, uip_buf, uip_len);
                        uip_len = 0;
                    }
                }
            }
    
            // Process TCP/IP Periodic Timer here.
            if(lPeriodicTimer > UIP_PERIODIC_TIMER_MS)
            {
                lPeriodicTimer = 0;
                for(ulTemp = 0; ulTemp < UIP_CONNS; ulTemp++)
                {
                    uip_periodic(ulTemp);
    
                    // If the above function invocation resulted in data that
                    // should be sent out on the network, the global variable
                    // uip_len is set to a value > 0.
                    if(uip_len > 0)
                    {
                        uip_arp_out();
                        EthernetPacketPutDMA(ETH_BASE, uip_buf, uip_len);
                        uip_len = 0;
                    }
                }
    
    #if UIP_UDP
                for(ulTemp = 0; ulTemp < UIP_UDP_CONNS; ulTemp++)
                {
                    uip_udp_periodic(ulTemp);
    
                    // If the above function invocation resulted in data that
                    // should be sent out on the network, the global variable
                    // uip_len is set to a value > 0.
                    if(uip_len > 0)
                    {
                        uip_arp_out();
                        EthernetPacketPutDMA(ETH_BASE, uip_buf, uip_len);
                        uip_len = 0;
                    }
                }
    #endif
            }
    
            // Process ARP Timer here.
            if(lARPTimer > UIP_ARP_TIMER_MS)
            {
                lARPTimer = 0;
                uip_arp_timer();
            }
        }
    }
    
    
    
    

    Regards,

    Trey

  • Trey,

    Can you attach the files to an email to my mti instruments address?  The links in the post are broken.  I have a feeling they are to a server the outside world doesn't have access to.

    Sincerely,

    Mike Fontes

  • Hrmm...normally forum attachment works.

    I'm not sure I have your email address.  Will you email me real quick so I have it, and then I'll reply with the files.  My name (no spaces) @ti.com

    Trey

  • Trey,

    Had you just posted those files?  I just went back to them and instead of the error 401 broken links I got the files.  I must have tried each at least 4 times with no luck before I sent the previous post!  I won't bother you with a direct email as long ad I have the files. Thanks.

    Sincerely,

    Mike Fontes

  • Mike,

    The file attachment is part of the forum post, so they get uploaded when I submit the post.  I suspect that they went to some intermediate server before going to a public server at the link used in the post.

    Let me know if you have problems with these new files.

    Trey

  • Trey,

    I am trying to use the enet_uip example project and not having much luck. I did download the new Control Suite. The first error i get is the device is incoorect so i set to the F28M36 similar to the above entry. I then link all the files that are needed. I am curerntly stuck with the following error:

    --include_path="C:/ti/controlSUITE/device_support/f28m36x/v200/MWare" --include_path="C:/ti/controlSUITE/device_support/f28m36x/v200/MWare/third_party/uip-1.0/uip" --gcc --define=ccs --gen_func_subsections=on --ual --preproc_with_compile --preproc_dependency="enet_uip.pp"  "C:/ti/controlSUITE/device_support/f28m36x/v200/F28M36x_examples_Master/enet_uip/m3/enet_uip.c"

    "C:/ti/controlSUITE/device_support/f28m36x/v200/F28M36x_examples_Master/enet_uip/m3/enet_uip.c", line 99: error: declaration is incompatible with "u8_t uip_buf[422]" (declared at line 425 of "C:\ti\controlSUITE\device_support\f28m36x\v200\MWare\third_party\uip-1.0\uip/uip.h")

    1 error detected in the compilation of "C:/ti/controlSUITE/device_support/f28m36x/v200/F28M36x_examples_Master/enet_uip/m3/enet_uip.c".

    How do i resolve this?

    Galen

  • Galen,

    I re- installed the new controlSUITE and managed to build the enet_uip example with out any change.

    Do you see any errors when trying to import the project (before building) ?

    Thanks

    Noah

  • Noah,

    If I import the enet_uip demo (from F28M36... v200) into a new work space the first error i encounter is that the device is incorrect. This makes me need to set all the links just as the post that started this thread from the other customer. Once i get all the links set up the build error of declaration is incompatible comes up. 

    Could there be files left over from previous version of controlSUITE? 

    As coffee enters the body this Monday morning i seem to recall that there was an error of some sort duing import about could not open all linked files. I would need to clean out this workspace and reimport to get the full text from the window that poped up.

     

    Galen

  • Galen,

    Make sure you have added the update Trey German added to match the GPIO Headers question I had.  It fixes some update issues with the V200 release that left out some important defines in the headers, plus at least one library C file update.

    I have not gotten back to this original UIP project question since the updates were made, so I can't guarantee everything is fixed.  However i am certain that you need to perform the update from Trey in order to get the correct headers into your project.

    Sincerely,

    Mike Fontes

  • Galen,

    Try the following. Like you mentioned , It might be because of remnant settings from previous project. Try the following. I had just installed and managed to rebuild the project. 

    1. create a new workspace.

    2. Import the project (with the error message, don't modify anything)

    3. Once imported, right click on the project, click on properties. Once in "Properties for enet_uip_m3" window. select the following

         Variant - 28M36x Concerto    F28M36Pxxxxx(the device you are using)

    click ok, and try to build it.

    Thanks

    Noah

  • Noah,

    I followed the steps above and i have the same issue.

    "declaration is incompatible with "u8_t uip_buf[422]" (declared at line 425 of "C:\ti\controlSUITE\device_support\f28m36x\v200\MWare\third_party\uip-1.0\uip/uip.h"

     

    There is aslo a common waring Invalid Project Path; Referenced project is not accesible (this was in the old workspace aswell)

     

    Galen

  • Quick note.... I noticed that the chagnes i made to link files in the enet_uip.c where still present. I think i corrected the mand now i get the error:

    could not open source file "uip/uip.h"

    Can you check if my headers are correct?

    //###########################################################################

    // $TI Release: F28M36x Support Library v200 $

    // $Release Date: Wed Apr 17 14:46:03 CDT 2013 $

    //###########################################################################

    #include

    "inc/hw_ints.h"

    #include

    "inc/hw_nvic.h"

    #include

    "inc/hw_gpio.h"

    #include

    "inc/hw_udma.h"

    #include

    "inc/hw_types.h"

    #include

    "inc/hw_memmap.h"

    #include

    "inc/hw_sysctl.h"

    #include

    "inc/hw_ethernet.h"

    #include

    "board_drivers/set_pinout_f28m36x.h"

    #include

    "driverlib/udma.h"

    #include

    "driverlib/gpio.h"

    #include

    "driverlib/debug.h"

    #include

    "driverlib/sysctl.h"

    #include

    "driverlib/systick.h"

    #include

    "driverlib/ethernet.h"

    #include

    "driverlib/interrupt.h"

    #include

    "utils/ustdlib.h"

    #include

    "utils/uartstdio.h"

    #include

    "uip/uip.h"

    #include

    "uip/uip_arp.h"

    #include

    "httpd.h"

    #include

    "dhcpc/dhcpc.h"

  • Noah,

    Here is the latest.

    We tested on a different PC and it seemed to work. So i went and unistalled (even deleted folders left behind due to changes) and now i get and error when i try to change the device variant: "Problems encountered while initilizing build-configuration 'Flash' of project 'enet_uip_m3'. Please see 'project.log' file, in the root of the project, for detais.

    Then if i hit build i am back to the state of 9 errors could not open source file ......

     

    My include options are blank in the properties window.

    could this differance between one PC and another be the CCS version? 5.3.0.00090 vs. 5.4?

    Galen

     

  • So i copied the ccs folder from another PC and it now builds.  Iwil lhave to run a dif to see what happened.

     

    Galen