Quality RTOS & Embedded Software

 Real time embedded FreeRTOS RSS feed 
Real time embedded FreeRTOS mailing list 
Quick Start Supported MCUs PDF Books Trace Tools Ecosystem TCP & FAT Training


LPC2129 - GCC - No Timer Interrupt

Posted by Mike Young on October 18, 2008

I am trying to get FreeRTOS running on a LPC2129 using the GCC port. I am using a custom board, running an LPC2129 with a 12Mhz oscillator.

I checked I am able to run simple programs, that drive LEDs and write on the serial port. I can also step in my code using the debugger.

I compile using the GCC port and heap1.c. I have defined the following macro to compile: GCC_ARM7.

Here is what is in FreeRTOSConfig.h

FreeRTOS.org V5.0.4 - Copyright (C) 2003-2008 Richard Barry.

This file is part of the FreeRTOS.org distribution.

FreeRTOS.org is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.

FreeRTOS.org is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with FreeRTOS.org; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA

A special exception to the GPL can be applied should you wish to distribute
a combined work that includes FreeRTOS.org, without being obliged to provide
the source code for any proprietary components. See the licensing section
of http://www.FreeRTOS.org for full details of how and when the exception
can be applied.

* *
* SAVE TIME AND MONEY! We can port FreeRTOS.org to your own hardware, *
* and even write all or part of your application on your behalf. *
* See http://www.OpenRTOS.com for details of the services we provide to *
* expedite your project. *
* *

Please ensure to read the configuration and relevant port sections of the
online documentation.

http://www.FreeRTOS.org - Documentation, latest information, license and
contact details.

http://www.SafeRTOS.com - A version that is certified for use in safety
critical systems.

http://www.OpenRTOS.com - Commercial support, development, porting,
licensing and training services.


#include <lpc21xx.h>

* Application specific definitions.
* These definitions should be adjusted for your particular hardware and
* application requirements.
* See http://www.freertos.org/a00110.html.

#define configUSE_PREEMPTION1
#define configUSE_IDLE_HOOK0
#define configUSE_TICK_HOOK0
#define configCPU_CLOCK_HZ( ( unsigned portLONG ) 60000000 )/* =12.0MHz xtal multiplied by 5 using the PLL. */
#define configTICK_RATE_HZ( ( portTickType ) 1000 )
#define configMAX_PRIORITIES( ( unsigned portBASE_TYPE ) 5 )
#define configMINIMAL_STACK_SIZE( ( unsigned portSHORT ) 1000 )
#define configTOTAL_HEAP_SIZE( ( size_t ) 10*1024 )
#define configMAX_TASK_NAME_LEN( 16 )
#define configUSE_TRACE_FACILITY0
#define configUSE_16_BIT_TICKS0
#define configIDLE_SHOULD_YIELD1

/* Co-routine definitions. */
#define configUSE_CO_ROUTINES 0
#define configMAX_CO_ROUTINE_PRIORITIES ( 2 )

/* Set the following definitions to 1 to include the API function, or zero
to exclude the API function. */

#define INCLUDE_vTaskPrioritySet1
#define INCLUDE_uxTaskPriorityGet1
#define INCLUDE_vTaskDelete1
#define INCLUDE_vTaskCleanUpResources0
#define INCLUDE_vTaskSuspend1
#define INCLUDE_vTaskDelayUntil1
#define INCLUDE_vTaskDelay1

#endif /* FREERTOS_CONFIG_H */

This is the startup code I use:

static void SerialPortTask( void *pvParameters );

int main(void)
/*Initialize the Hardware, PCB, serial ports etc */

/* Initialize the stdout capability (serial port) */

SysIoPrintf("\r\nmain invoked");

xTaskCreate( SerialPortTask, "Serial", configMINIMAL_STACK_SIZE, NULL, tskIDLE_PRIORITY + 2, NULL );


return 0;
} /* main */

static void SerialPortTask( void *pvParameters )
SysIoPrintf("\r\nThe serial task");
vTaskDelay( ( ( portTickType ) 1000 / portTICK_RATE_MS ) );
} /* SerialPortTask */

I ran the code step by step to see that eventually vTaskStartScheduler() reaches a point where it proceeds with a context switch, to start the first task. The program ends here I'm unable to debugger further, but I guess this is ok.
Eventually I never see any timer interrupt happening. The timer 0 interrupt is never asserted. Also, the SerialPortTask never gets called.

The same behavior happens when I leave the code free-running.

I tried enabling global interrupts from Lpc2129CanEvaluationInit() and just before calling vTaskStartScheduler() but this did not help.

Any idea why I cannot see any interrupt happening?


RE: LPC2129 - GCC - No Timer Interrupt

Posted by Dave on October 19, 2008
Are you in Supervisor mode when main() is called?

RE: LPC2129 - GCC - No Timer Interrupt

Posted by Mike Young on October 19, 2008

That I'm not sure... I keep the default settings at reset.

RE: LPC2129 - GCC - No Timer Interrupt

Posted by Richard on October 19, 2008
Normally this will be done in the C startup file. Are you using a C startup file from the FreeRTOS.org download? If so then you will probably have it set correctly.

If you look in the startup file you should see that it sets the processor into each mode (IRQ, Supervisor, FIQ, etc.) and while in each mode sets the stack pointer to be used by that mode. FreeRTOS.org requires stacks to be setup for Supervisor and IRQ mode as a minimum as the stacks used by the tasks are setup when the task is created.

Check that in this code sequence the asm code leaves the processor in Supervisor mode prior to calling main().

You can also stop on the debugger while in main and inspect the CPSR register to determine which mode you are in. You cannot start the scheduler unless you are in Supervisor mode.


RE: LPC2129 - GCC - No Timer Interrupt

Posted by Mike Young on October 19, 2008

Thanks for the heads up. I did switch to supervisor mode, and I could observe a few timer interrupts happening... Though they died after a few instances...

I am thinking my GCC/eclipse/ARM-USB-OCD-JTAG install may not be right... I wouldn't mind starting something from scratch, specific to freeRTOS.

Any recommendations for this setup with regards to running freeRTOS?


[ Back to the top ]    [ About FreeRTOS ]    [ Sitemap ]    [ ]

Copyright (C) 2004-2010 Richard Barry. Copyright (C) 2010-2016 Real Time Engineers Ltd.
Any and all data, files, source code, html content and documentation included in the FreeRTOSTM distribution or available on this site are the exclusive property of Real Time Engineers Ltd.. See the files license.txt (included in the distribution) and this copyright notice for more information. FreeRTOSTM and FreeRTOS.orgTM are trade marks of Real Time Engineers Ltd.

Latest News:

FreeRTOS V9.0.0 is now available for download.

Free TCP/IP and file system demos for the RTOS

Sponsored Links

⇓ Now With No Code Size Limit! ⇓
⇑ Free Download Without Registering ⇑

FreeRTOS Partners

ARM Connected RTOS partner for all ARM microcontroller cores

Renesas Electronics Gold Alliance RTOS Partner.jpg

Microchip Premier RTOS Partner

RTOS partner of NXP for all NXP ARM microcontrollers

Atmel RTOS partner supporting ARM Cortex-M3 and AVR32 microcontrollers

STMicro RTOS partner supporting ARM7, ARM Cortex-M3, ARM Cortex-M4 and ARM Cortex-M0

Xilinx Microblaze and Zynq partner

Silicon Labs low power RTOS partner

Altera RTOS partner for Nios II and Cortex-A9 SoC

Freescale Alliance RTOS Member supporting ARM and ColdFire microcontrollers

Infineon ARM Cortex-M microcontrollers

Texas Instruments MCU Developer Network RTOS partner for ARM and MSP430 microcontrollers

Cypress RTOS partner supporting ARM Cortex-M3

Fujitsu RTOS partner supporting ARM Cortex-M3 and FM3

Microsemi (previously Actel) RTOS partner supporting ARM Cortex-M3

Atollic Partner

IAR Partner

Keil ARM Partner

Embedded Artists