FreeRTOS Support Archive
The FreeRTOS support forum is used to obtain active support directly from Real
Time Engineers Ltd. In return for using our top quality software and services for
free, we request you play fair and do your bit to help others too! Sign up
to receive notifications of new support topics then help where you can.
This is a read only archive of threads posted to the FreeRTOS support forum.
The archive is updated every week, so will not always contain the very latest posts.
Use these archive pages to search previous posts. Use the Live FreeRTOS Forum
link to reply to a post, or start a new support thread.
[FreeRTOS Home] [Live FreeRTOS Forum] [FAQ] [Archive Top] [October 2008 Threads] LPC2129 - GCC - No Timer InterruptPosted 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 InterruptPosted by Dave on October 19, 2008 Are you in Supervisor mode when main() is called?
RE: LPC2129 - GCC - No Timer InterruptPosted 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 InterruptPosted 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 InterruptPosted 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
Copyright (C) Amazon Web Services, Inc. or its affiliates. All rights reserved.
|