porting FreeRTOS v7.01 demo to LPCXpresso1769

skidev wrote on Monday, August 01, 2011:

Hi - I’m now trying to port the uIP portion of the CodeRed RDB1768 FreeRTOS v7.01 demo to use on the LPCXpresso1769/LPCXpresso Base Board combo. (all the base board (belongs to us…) brings to the party is an RJ-45 socket…)

Not sure about the RDB1768 hardware for which the demo was written - I had assumed (?) that it was written for the v2 with the SMC (LAN8720)  PHY chip; turns out it’s looking for the old DP83848 instead. Before I plow onward, has anyone ported the uIP PHY stuff to the SMC LAN8720?

Also, I set the clock frequency in the FreeRTOSConfig.h to 120MHz. Think that 's the configured clock speed.



brucesegal wrote on Tuesday, August 02, 2011:

Take a look here: http://code.google.com/p/micropendousx/

I belive he’s using a LAN8720 with the LPC1768. I’m not sure if the demo code is using UIP or LwIP so YMMV.

skidev wrote on Wednesday, August 03, 2011:

Thanks, Bruce - I’ll give it a shot.

skidev wrote on Friday, August 05, 2011:

OK - I tried the (now heavily modified) Micropendous port, after having commented out anything not related to the uIP task. The task gets created correctly and is executed by the scheduler, although my writes to the OLED on the LPCXpresso baseboard come very slowly, almost like an old teletype - character by character scrolling across the display.

Then I seem stuck in a loop waiting to receive a packet, but it never passes, although I’m poking away at it with my browser.

I copied the relevant settings to the FreeRTOSConfig.h file as well, although I reset the clock frequency to 120MHz.

Once again, any ideas?



skidev wrote on Friday, August 05, 2011:

Oh yeah, the Micropendous 17xx port does use uIP; it was the the 13xx port that used LwIP.

skidev wrote on Friday, August 05, 2011:

Also, the “slow” I/O to the OLED is relative to a non-FreeRTOS version (using a continuous loop in which I sample the ADC and serve it via easyweb) which works fine. I perform the display write *before* I start the scheduler, so I suspect something in my FreeRTOSConfig.h file.

Here it is: (I stripped the leading comments)

#define configUSE_PREEMPTION            1
#define configUSE_IDLE_HOOK                     0
#define configMAX_PRIORITIES            ( ( unsigned portBASE_TYPE ) 5 )
#define configUSE_TICK_HOOK 0
#define configCPU_CLOCK_HZ                      ( ( unsigned long ) 120000000 )
#define configTICK_RATE_HZ                      ( ( portTickType ) 1000 )
#define configMINIMAL_STACK_SIZE        ( ( unsigned short ) 80 )
#define configTOTAL_HEAP_SIZE           ( ( size_t ) ( 19 * 1024 ) )
#define configMAX_TASK_NAME_LEN         ( 12 )
#define configUSE_TRACE_FACILITY        1
#define configUSE_16_BIT_TICKS          0
#define configIDLE_SHOULD_YIELD         0
#define configUSE_CO_ROUTINES           0
#define configUSE_MUTEXES                       1
#define configMAX_CO_ROUTINE_PRIORITIES ( 2 )
#define configUSE_ALTERNATIVE_API               0
#define configUSE_RECURSIVE_MUTEXES             1
#define configQUEUE_REGISTRY_SIZE               10
/* Set the following definitions to 1 to include the API function, or zeroto exclude the API function. */
#define INCLUDE_vTaskPrioritySet                        1
#define INCLUDE_uxTaskPriorityGet                       1
#define INCLUDE_vTaskDelete                                     1
#define INCLUDE_vTaskCleanUpResources           0
#define INCLUDE_vTaskSuspend                            1
#define INCLUDE_vTaskDelayUntil                         1
#define INCLUDE_vTaskDelay                                      1
#define INCLUDE_uxTaskGetStackHighWaterMark     1
 * Ethernet configuration.
/* MAC address configuration. */
#define configMAC_ADDR0 0x00
#define configMAC_ADDR1 0x12
#define configMAC_ADDR2 0x13
#define configMAC_ADDR3 0x10
#define configMAC_ADDR4 0x15
#define configMAC_ADDR5 0x11
/* IP address configuration. */
#define configIP_ADDR0          192
#define configIP_ADDR1          168
#define configIP_ADDR2          13
#define configIP_ADDR3          237
/* Netmask configuration. */
#define configNET_MASK0         255
#define configNET_MASK1         255
#define configNET_MASK2         255
#define configNET_MASK3         0
/* Use the system definition, if there is one */
        #define configPRIO_BITS       __NVIC_PRIO_BITS
        #define configPRIO_BITS       5        /* 32 priority levels */
/* The lowest priority. */
#define configKERNEL_INTERRUPT_PRIORITY         ( 31 << (8 - configPRIO_BITS) )
/* Priority 5, or 160 as only the top three bits are implemented. */
#define configMAX_SYSCALL_INTERRUPT_PRIORITY    ( 5 << (8 - configPRIO_BITS) )
/* Priorities passed to NVIC_SetPriority() do not require shifting as the
function does the shifting itself.  Note these priorities need to be equal to
or lower than configMAX_SYSCALL_INTERRUPT_PRIORITY - therefore the numeric
value needs to be equal to or greater than 5 (on the Cortex-M3 the lower the
numeric value the higher the interrupt priority). */
#define configEMAC_INTERRUPT_PRIORITY           5
#define configUSB_INTERRUPT_PRIORITY            6
 * Macros required to setup the timer for the run time stats.
extern void vConfigureTimerForRunTimeStats( void );
#endif /* FREERTOS_CONFIG_H */

skidev wrote on Monday, August 08, 2011:

OK - running now.

I made a bonehead mistake - address mismatch -  and didn’t notice that my local machine reverted to a hard manual 169.xx.xx.xx IP address when the WiFi was deactivated. With wireless under DHCP it’s in the 192.168.13.xx range. (my board was plugged directly into my machine), which conflicted with my ptototype’s 192.168.13.xx address…

<slaps forehead>. The 8270 code I added earlier worked like a champ. Thanks to those who responded.