Quality RTOS & Embedded Software

 Real time embedded FreeRTOS RSS feed 
Quick Start Supported MCUs PDF Books Trace Tools Ecosystem


Loading

LPC2129 - GCC - No Timer Interrupt

Posted by Mike Young on October 18, 2008
Hi,

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
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
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.
*/

#ifndef FREERTOS_CONFIG_H
#define FREERTOS_CONFIG_H

#include <lpc21xx.h>

/*-----------------------------------------------------------
* Application specific definitions.
*
* These definitions should be adjusted for your particular hardware and
* application requirements.
*
* THESE PARAMETERS ARE DESCRIBED WITHIN THE 'CONFIGURATION' SECTION OF THE
* FreeRTOS API DOCUMENTATION AVAILABLE ON THE FreeRTOS.org WEB SITE.
*
* 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 */
Lpc2129CanEvaluationInit();

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

SysIoPrintf("\r\nmain invoked");

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

vTaskStartScheduler();

return 0;
} /* main */

static void SerialPortTask( void *pvParameters )
{
for(;;)
{
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?

Thanks!




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
Hi,

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.

Regards.

RE: LPC2129 - GCC - No Timer Interrupt

Posted by Mike Young on October 19, 2008
Hi,

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?

Thanks


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


Copyright (C) Amazon Web Services, Inc. or its affiliates. All rights reserved.

Latest News

NXP tweet showing LPC5500 (ARMv8-M Cortex-M33) running FreeRTOS.

Meet Richard Barry and learn about running FreeRTOS on RISC-V at FOSDEM 2019

Version 10.1.1 of the FreeRTOS kernel is available for immediate download. MIT licensed.

View a recording of the "OTA Update Security and Reliability" webinar, presented by TI and AWS.


Careers

FreeRTOS and other embedded software careers at AWS.



FreeRTOS Partners

ARM Connected RTOS partner for all ARM microcontroller cores

Espressif ESP32

IAR Partner

Microchip Premier RTOS Partner

RTOS partner of NXP for all NXP ARM microcontrollers

Renesas

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

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

OpenRTOS and SafeRTOS

Xilinx Microblaze and Zynq partner