Subversion Repositories Projects

Compare Revisions

Ignore whitespace Rev 317 → Rev 318

/free-rtos/mbed/flash-led/FreeRTOSConfig.h
0,0 → 1,117
/*
FreeRTOS V6.0.4 - Copyright (C) 2010 Real Time Engineers Ltd.
 
***************************************************************************
* *
* If you are: *
* *
* + New to FreeRTOS, *
* + Wanting to learn FreeRTOS or multitasking in general quickly *
* + Looking for basic training, *
* + Wanting to improve your FreeRTOS skills and productivity *
* *
* then take a look at the FreeRTOS eBook *
* *
* "Using the FreeRTOS Real Time Kernel - a Practical Guide" *
* http://www.FreeRTOS.org/Documentation *
* *
* A pdf reference manual is also available. Both are usually delivered *
* to your inbox within 20 minutes to two hours when purchased between 8am *
* and 8pm GMT (although please allow up to 24 hours in case of *
* exceptional circumstances). Thank you for your support! *
* *
***************************************************************************
 
This file is part of the FreeRTOS distribution.
 
FreeRTOS is free software; you can redistribute it and/or modify it under
the terms of the GNU General Public License (version 2) as published by the
Free Software Foundation AND MODIFIED BY the FreeRTOS exception.
***NOTE*** The exception to the GPL is included to allow you to distribute
a combined work that includes FreeRTOS without being obliged to provide the
source code for proprietary components outside of the FreeRTOS kernel.
FreeRTOS 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 and the FreeRTOS license exception along with FreeRTOS; if not it
can be viewed here: http://www.freertos.org/a00114.html and also obtained
by writing to Richard Barry, contact details for whom are available on the
FreeRTOS WEB site.
 
1 tab == 4 spaces!
 
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 "LPC17xx.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.
*----------------------------------------------------------*/
 
#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 ) 99000000 )
#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_COUNTING_SEMAPHORES 0
#define configUSE_ALTERNATIVE_API 0
#define configCHECK_FOR_STACK_OVERFLOW 0
#define configUSE_RECURSIVE_MUTEXES 1
#define configQUEUE_REGISTRY_SIZE 10
#define configGENERATE_RUN_TIME_STATS 0
 
/* Set the following definitions to 1 to include the API function, or zero
to 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
 
/* Use the system definition, if there is one */
#ifdef __NVIC_PRIO_BITS
#define configPRIO_BITS __NVIC_PRIO_BITS
#else
#define configPRIO_BITS 5 /* 32 priority levels */
#endif
 
/* 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) )
 
#endif /* FREERTOS_CONFIG_H */
/free-rtos/mbed/flash-led/main.c
0,0 → 1,212
/****************************************************************************
*
* A super simple program which launches a single task which flashes
* the red led on the robovero.
*
****************************************************************************/
 
/* ---- Include Files ---------------------------------------------------- */
 
#include "stdio.h"
#include "FreeRTOS.h"
#include "task.h"
 
/* ----------------------------------------------------------------------- */
 
#define HEARBEAT_PRIORITY ( tskIDLE_PRIORITY + 1 )
 
#define HEARTBEAT_STACK_SIZE configMINIMAL_STACK_SIZE
 
#define LED_0 ( 1UL << 18UL )
#define LED_1 ( 1UL << 20UL )
#define LED_2 ( 1UL << 21UL )
#define LED_3 ( 1UL << 23UL )
 
static unsigned long gLed[] = { LED_0, LED_1, LED_2, LED_3 };
 
/***************************************************************************
*
* Initialize the GPIO pin that the LED is connected to.
*
***************************************************************************/
 
static void LED_Init( void )
{
LPC_GPIO1->FIODIR = LED_0 | LED_1 | LED_2 | LED_3;
LPC_GPIO1->FIOCLR = LED_0 | LED_1 | LED_2 | LED_3;
}
 
/***************************************************************************
*
* Turns the LED on or off. On the robovero, driving the pin low turns the
* LED on.
*
***************************************************************************/
 
static void SetLED( unsigned led, unsigned value )
{
if( value )
LPC_GPIO1->FIOSET = gLed[led];
else
LPC_GPIO1->FIOCLR = gLed[led];
}
 
/***************************************************************************
*
* Initializes the chip.
*
***************************************************************************/
 
static void InitHardware( void )
{
/* Disable peripherals power. */
LPC_SC->PCONP = 0;
 
/* Enable GPIO power. */
LPC_SC->PCONP = PCONP_PCGPIO;
 
/* Disable TPIU. */
LPC_PINCON->PINSEL10 = 0;
 
if ( LPC_SC->PLL0STAT & ( 1 << 25 ) )
{
/* Enable PLL, disconnected. */
LPC_SC->PLL0CON = 1;
LPC_SC->PLL0FEED = PLLFEED_FEED1;
LPC_SC->PLL0FEED = PLLFEED_FEED2;
}
/* Disable PLL, disconnected. */
LPC_SC->PLL0CON = 0;
LPC_SC->PLL0FEED = PLLFEED_FEED1;
LPC_SC->PLL0FEED = PLLFEED_FEED2;
/* Enable main OSC. */
LPC_SC->SCS |= 0x20;
while( !( LPC_SC->SCS & 0x40 ) );
/* select main OSC, 12MHz, as the PLL clock source. */
LPC_SC->CLKSRCSEL = 0x1;
LPC_SC->PLL0CFG = 0x20031;
LPC_SC->PLL0FEED = PLLFEED_FEED1;
LPC_SC->PLL0FEED = PLLFEED_FEED2;
/* Enable PLL, disconnected. */
LPC_SC->PLL0CON = 1;
LPC_SC->PLL0FEED = PLLFEED_FEED1;
LPC_SC->PLL0FEED = PLLFEED_FEED2;
/* Set clock divider. */
LPC_SC->CCLKCFG = 0x03;
/* Configure flash accelerator. */
LPC_SC->FLASHCFG = 0x403a;
/* Check lock bit status. */
while( ( ( LPC_SC->PLL0STAT & ( 1 << 26 ) ) == 0 ) );
/* Enable and connect. */
LPC_SC->PLL0CON = 3;
LPC_SC->PLL0FEED = PLLFEED_FEED1;
LPC_SC->PLL0FEED = PLLFEED_FEED2;
while( ( ( LPC_SC->PLL0STAT & ( 1 << 25 ) ) == 0 ) );
/* Configure the clock for the USB. */
if( LPC_SC->PLL1STAT & ( 1 << 9 ) )
{
/* Enable PLL, disconnected. */
LPC_SC->PLL1CON = 1;
LPC_SC->PLL1FEED = PLLFEED_FEED1;
LPC_SC->PLL1FEED = PLLFEED_FEED2;
}
/* Disable PLL, disconnected. */
LPC_SC->PLL1CON = 0;
LPC_SC->PLL1FEED = PLLFEED_FEED1;
LPC_SC->PLL1FEED = PLLFEED_FEED2;
LPC_SC->PLL1CFG = 0x23;
LPC_SC->PLL1FEED = PLLFEED_FEED1;
LPC_SC->PLL1FEED = PLLFEED_FEED2;
/* Enable PLL, disconnected. */
LPC_SC->PLL1CON = 1;
LPC_SC->PLL1FEED = PLLFEED_FEED1;
LPC_SC->PLL1FEED = PLLFEED_FEED2;
while( ( ( LPC_SC->PLL1STAT & ( 1 << 10 ) ) == 0 ) );
/* Enable and connect. */
LPC_SC->PLL1CON = 3;
LPC_SC->PLL1FEED = PLLFEED_FEED1;
LPC_SC->PLL1FEED = PLLFEED_FEED2;
while( ( ( LPC_SC->PLL1STAT & ( 1 << 9 ) ) == 0 ) );
 
/* Setup the peripheral bus to be the same as the PLL output (64 MHz). */
LPC_SC->PCLKSEL0 = 0x05555555;
 
/* Setup the LED */
LED_Init();
}
 
/***************************************************************************
*
* The Hearbeat task
*
***************************************************************************/
 
static portTASK_FUNCTION( Heartbeat_Task, parameters )
{
(void)parameters;
unsigned int led[] = { 0, 1, 2, 3, 2, 1 };
unsigned int led_idx = 0;
 
for(;;)
{
SetLED(led[led_idx], 1);
vTaskDelay( 100 / portTICK_RATE_MS );
SetLED(led[led_idx], 0);
vTaskDelay( 100 / portTICK_RATE_MS );
SetLED(led[led_idx], 1);
vTaskDelay( 100 / portTICK_RATE_MS );
SetLED(led[led_idx], 0);
vTaskDelay( 700 / portTICK_RATE_MS );
 
led_idx++;
if( led_idx >=6 )
{
led_idx = 0;
}
}
}
 
/***************************************************************************
*
* main
*
***************************************************************************/
 
int main( void )
{
InitHardware();
 
xTaskCreate( Heartbeat_Task, // Task Function
"Heartbeat", // Task Name
HEARTBEAT_STACK_SIZE, // Stack Size
NULL, // Parameters
HEARBEAT_PRIORITY, // Task Priority
NULL ); // Place to store task handle
 
vTaskStartScheduler();
 
/*
* Will only get here if there was insufficient memory to create the idle
* task. The idle task is created within vTaskStartScheduler().
*/
 
for( ;; )
;
}
 
/free-rtos/mbed/flash-led/Makefile
0,0 → 1,20
###########################################################################
#
# robovero flash-led
#
# A simple LED flasher
#
###########################################################################
 
TARGET = flash-led
 
SRCS = cr_startup_lpc17.c \
main.c \
tasks.c \
queue.c \
list.c \
port.c \
heap_1.c
 
include ../../lpc17xx/lpc17xx.mk