Added PSoC5 demo applications.
parent
b77d801de0
commit
3ff33205eb
@ -0,0 +1,22 @@
|
|||||||
|
<?xml version="1.0"?>
|
||||||
|
<CyXmlSerializer>
|
||||||
|
<!--This file is machine generated and read. It is not intended to be edited by hand.-->
|
||||||
|
<!--Due to this, there is no schema for this file.-->
|
||||||
|
<CyGuid_2867d519-54d2-4c01-9830-c51cb08bc3dd type_name="CyDesigner.Common.ProjMgmt.Model.CyPrjMgmtWrkspc" version="5" name="FreeRTOS_Demo Workspace" persistent="" config="Debug" platform="c9323d49-d323-40b8-9b59-cc008d68a989">
|
||||||
|
<current_project name="./FreeRTOS_Demo.cydsn/FreeRTOS_Demo.cyprj" />
|
||||||
|
<wrkspc_folders />
|
||||||
|
<files />
|
||||||
|
<projects>
|
||||||
|
<name_val_pair name="FreeRTOS_Demo" v="./FreeRTOS_Demo.cydsn/FreeRTOS_Demo.cyprj" />
|
||||||
|
</projects>
|
||||||
|
<workspace_id v="dd096e2f-e89d-42b3-a9f0-d771ecfa166f" />
|
||||||
|
<WriteAppVersionLastSavedWith v="1.0.0.7006" />
|
||||||
|
<WriteAppMarketingVersionLastSavedWith v="1.0 Beta 5.0" />
|
||||||
|
<CyGuid_dcbd9771-0334-43dc-9cc3-fe99dc3c5316 type_name="CyDesigner.Common.ProjMgmt.Model.CyPrjDependencyList" version="3">
|
||||||
|
<wrkspc_dependencies />
|
||||||
|
</CyGuid_dcbd9771-0334-43dc-9cc3-fe99dc3c5316>
|
||||||
|
<CyGuid_63b68103-67f5-4406-8da6-5c8625765b82 type_name="CyDesigner.Common.ProjMgmt.Model.CyIgnoredSystemDepsList" version="1">
|
||||||
|
<wrkspc_dependencies />
|
||||||
|
</CyGuid_63b68103-67f5-4406-8da6-5c8625765b82>
|
||||||
|
</CyGuid_2867d519-54d2-4c01-9830-c51cb08bc3dd>
|
||||||
|
</CyXmlSerializer>
|
@ -0,0 +1,120 @@
|
|||||||
|
/*
|
||||||
|
FreeRTOS V6.1.0 - 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 books - available as PDF or paperback *
|
||||||
|
* *
|
||||||
|
* "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
|
||||||
|
|
||||||
|
/*-----------------------------------------------------------
|
||||||
|
* 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.
|
||||||
|
*----------------------------------------------------------*/
|
||||||
|
|
||||||
|
#include <device.h>
|
||||||
|
|
||||||
|
#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 ) BCLK__BUS_CLK__HZ )
|
||||||
|
#define configTICK_RATE_HZ ( ( portTickType ) 1000 )
|
||||||
|
#define configMINIMAL_STACK_SIZE ( ( unsigned short ) 100 )
|
||||||
|
#define configTOTAL_HEAP_SIZE ( ( size_t ) ( 32 * 1024 ) )
|
||||||
|
#define configMAX_TASK_NAME_LEN ( 12 )
|
||||||
|
#define configUSE_TRACE_FACILITY 0
|
||||||
|
#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 1
|
||||||
|
#define configUSE_ALTERNATIVE_API 0
|
||||||
|
#define configCHECK_FOR_STACK_OVERFLOW 2
|
||||||
|
#define configUSE_RECURSIVE_MUTEXES 1
|
||||||
|
#define configQUEUE_REGISTRY_SIZE 10
|
||||||
|
#define configGENERATE_RUN_TIME_STATS 0
|
||||||
|
#define configUSE_MALLOC_FAILED_HOOK 1
|
||||||
|
|
||||||
|
/* 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
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Configure the number of priority bits. This is normally
|
||||||
|
* __NVIC_PRIO_BITS but PSoC Creator beta 5 contained a larger
|
||||||
|
* value for the priority than is implemented in the hardware so
|
||||||
|
* set it here to what the data sheet describes.
|
||||||
|
*/
|
||||||
|
#define configPRIO_BITS 3 /* 8 priority levels */
|
||||||
|
|
||||||
|
/* The lowest priority. */
|
||||||
|
#define configKERNEL_INTERRUPT_PRIORITY ( 7 << (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 */
|
Binary file not shown.
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,98 @@
|
|||||||
|
/*
|
||||||
|
FreeRTOS V6.1.0 - 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 books - available as PDF or paperback *
|
||||||
|
* *
|
||||||
|
* "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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <device.h>
|
||||||
|
#include "FreeRTOS.h"
|
||||||
|
#include "task.h"
|
||||||
|
/*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
extern portBASE_TYPE xFirstTimerHandler( void );
|
||||||
|
extern portBASE_TYPE xSecondTimerHandler( void );
|
||||||
|
/*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
CY_ISR_PROTO(vHighFrequencyFirstISR);
|
||||||
|
CY_ISR_PROTO(vHighFrequencySecondISR);
|
||||||
|
/*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Installs and starts the ISRs that drive the Interupt Queue Tests.
|
||||||
|
*/
|
||||||
|
void vInitialiseTimerForIntQueueTest( void )
|
||||||
|
{
|
||||||
|
taskENTER_CRITICAL();
|
||||||
|
{
|
||||||
|
/* Initialise and start the First Timer ISR. */
|
||||||
|
isr_High_Frequency_2000Hz_ClearPending();
|
||||||
|
isr_High_Frequency_2000Hz_StartEx((cyisraddress)vHighFrequencyFirstISR);
|
||||||
|
|
||||||
|
/* Initialise and start the Second Timer ISR. */
|
||||||
|
isr_High_Frequency_2001Hz_ClearPending();
|
||||||
|
isr_High_Frequency_2001Hz_StartEx((cyisraddress)vHighFrequencySecondISR);
|
||||||
|
}
|
||||||
|
taskEXIT_CRITICAL();
|
||||||
|
}
|
||||||
|
/*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
CY_ISR(vHighFrequencyFirstISR)
|
||||||
|
{
|
||||||
|
/* Call back into the test code and context switch if necessary. */
|
||||||
|
portEND_SWITCHING_ISR( xFirstTimerHandler() );
|
||||||
|
}
|
||||||
|
/*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
CY_ISR(vHighFrequencySecondISR)
|
||||||
|
{
|
||||||
|
/* Call back into the test code and context switch if necessary. */
|
||||||
|
portEND_SWITCHING_ISR( xSecondTimerHandler() );
|
||||||
|
}
|
||||||
|
/*---------------------------------------------------------------------------*/
|
@ -0,0 +1,62 @@
|
|||||||
|
/*
|
||||||
|
FreeRTOS V6.1.0 - 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 books - available as PDF or paperback *
|
||||||
|
* *
|
||||||
|
* "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 INT_QUEUE_TIMER_H_
|
||||||
|
#define INT_QUEUE_TIMER_H_
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Install and start the ISRs that drive the Interupt Queue Tests.
|
||||||
|
*/
|
||||||
|
void vInitialiseTimerForIntQueueTest( void );
|
||||||
|
|
||||||
|
#endif /* INT_QUEUE_TIMER_H_ */
|
@ -0,0 +1,117 @@
|
|||||||
|
/*
|
||||||
|
FreeRTOS V6.1.0 - 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 books - available as PDF or paperback *
|
||||||
|
* *
|
||||||
|
* "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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <device.h>
|
||||||
|
|
||||||
|
#include "FreeRTOS.h"
|
||||||
|
#include "task.h"
|
||||||
|
#include "partest.h"
|
||||||
|
/*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
#define partstMAX_LED ( 4 )
|
||||||
|
/*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
static volatile char cLedOutput[ partstMAX_LED ];
|
||||||
|
/*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
void vParTestInitialise( void )
|
||||||
|
{
|
||||||
|
long lIndex;
|
||||||
|
for ( lIndex = 0; lIndex < partstMAX_LED; lIndex++ )
|
||||||
|
{
|
||||||
|
cLedOutput[ lIndex ] = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
void vParTestSetLED( unsigned portBASE_TYPE uxLED, signed portBASE_TYPE xValue )
|
||||||
|
{
|
||||||
|
taskENTER_CRITICAL();
|
||||||
|
{
|
||||||
|
switch ( uxLED )
|
||||||
|
{
|
||||||
|
case 0:
|
||||||
|
Pin_LED_0_Write( xValue & 0x1 );
|
||||||
|
break;
|
||||||
|
case 1:
|
||||||
|
Pin_LED_1_Write( xValue & 0x1 );
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
Pin_LED_2_Write( xValue & 0x1 );
|
||||||
|
break;
|
||||||
|
case 3:
|
||||||
|
Pin_LED_3_Write( xValue & 0x1 );
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
/* Do nothing. */
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
taskEXIT_CRITICAL();
|
||||||
|
|
||||||
|
/* Record the output for the sake of toggling. */
|
||||||
|
if ( uxLED < partstMAX_LED )
|
||||||
|
{
|
||||||
|
cLedOutput[ uxLED ] = ( xValue & 0x1 );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
void vParTestToggleLED( unsigned portBASE_TYPE uxLED )
|
||||||
|
{
|
||||||
|
if ( uxLED < partstMAX_LED )
|
||||||
|
{
|
||||||
|
vParTestSetLED( uxLED, !cLedOutput[ uxLED ] );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/*---------------------------------------------------------------------------*/
|
@ -0,0 +1,226 @@
|
|||||||
|
/*
|
||||||
|
FreeRTOS V6.1.0 - 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 books - available as PDF or paperback *
|
||||||
|
* *
|
||||||
|
* "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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <device.h>
|
||||||
|
#include "FreeRTOS.h"
|
||||||
|
#include "queue.h"
|
||||||
|
#include "task.h"
|
||||||
|
#include "serial.h"
|
||||||
|
/*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
#define serialSTRING_DELAY_TICKS ( portMAX_DELAY )
|
||||||
|
/*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
CY_ISR_PROTO(vUartRxISR);
|
||||||
|
CY_ISR_PROTO(vUartTxISR);
|
||||||
|
/*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
static xQueueHandle xSerialTxQueue = NULL;
|
||||||
|
static xQueueHandle xSerialRxQueue = NULL;
|
||||||
|
/*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
xComPortHandle xSerialPortInitMinimal( unsigned long ulWantedBaud, unsigned portBASE_TYPE uxQueueLength )
|
||||||
|
{
|
||||||
|
/* Configure Rx. */
|
||||||
|
xSerialRxQueue = xQueueCreate( uxQueueLength, sizeof( signed char ) );
|
||||||
|
isr_UART1_RX_BYTE_RECEIVED_ClearPending();
|
||||||
|
isr_UART1_RX_BYTE_RECEIVED_StartEx(vUartRxISR);
|
||||||
|
|
||||||
|
/* Configure Tx */
|
||||||
|
xSerialTxQueue = xQueueCreate( uxQueueLength, sizeof( signed char ) );
|
||||||
|
isr_UART1_TX_BYTE_COMPLETE_ClearPending() ;
|
||||||
|
isr_UART1_TX_BYTE_COMPLETE_StartEx(vUartTxISR);
|
||||||
|
|
||||||
|
/* Clear the interrupt modes for the Tx for the time being. */
|
||||||
|
UART_1_SetTxInterruptMode( 0 );
|
||||||
|
|
||||||
|
/* Both configured successfully. */
|
||||||
|
return (xComPortHandle)( xSerialTxQueue && xSerialRxQueue );
|
||||||
|
}
|
||||||
|
/*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
void vSerialPutString( xComPortHandle pxPort, const signed char * const pcString, unsigned short usStringLength )
|
||||||
|
{
|
||||||
|
unsigned short usIndex = 0;
|
||||||
|
for ( usIndex = 0; usIndex < usStringLength; usIndex++ )
|
||||||
|
{
|
||||||
|
/* Check for pre-mature end of line. */
|
||||||
|
if ( '\0' == pcString[ usIndex ] )
|
||||||
|
{
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Send out, one character at a time. */
|
||||||
|
if ( pdTRUE != xSerialPutChar( NULL, pcString[ usIndex ], serialSTRING_DELAY_TICKS ) )
|
||||||
|
{
|
||||||
|
/* Failed to send, this will be picked up in the receive comtest task. */
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
signed portBASE_TYPE xSerialGetChar( xComPortHandle pxPort, signed char *pcRxedChar, portTickType xBlockTime )
|
||||||
|
{
|
||||||
|
portBASE_TYPE xReturn = pdFALSE;
|
||||||
|
if ( pdTRUE == xQueueReceive( xSerialRxQueue, pcRxedChar, xBlockTime ) )
|
||||||
|
{
|
||||||
|
/* Picked up a character. */
|
||||||
|
xReturn = pdTRUE;
|
||||||
|
}
|
||||||
|
return xReturn;
|
||||||
|
}
|
||||||
|
/*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
signed portBASE_TYPE xSerialPutChar( xComPortHandle pxPort, signed char cOutChar, portTickType xBlockTime )
|
||||||
|
{
|
||||||
|
portBASE_TYPE xReturn = pdFALSE;
|
||||||
|
|
||||||
|
/* The ISR is processing characters is so just add to the end of the queue. */
|
||||||
|
if ( pdTRUE == xQueueSend( xSerialTxQueue, &cOutChar, xBlockTime ) )
|
||||||
|
{
|
||||||
|
xReturn = pdTRUE;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
/* The queue is probably full. */
|
||||||
|
xReturn = pdFALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Make sure that the interrupt will fire in the case where:
|
||||||
|
* Currently sending so the Tx Complete will fire.
|
||||||
|
* Not sending so the Empty will fire.
|
||||||
|
*/
|
||||||
|
taskENTER_CRITICAL();
|
||||||
|
UART_1_SetTxInterruptMode( UART_1_TX_STS_COMPLETE | UART_1_TX_STS_FIFO_EMPTY );
|
||||||
|
taskEXIT_CRITICAL();
|
||||||
|
|
||||||
|
return xReturn;
|
||||||
|
}
|
||||||
|
/*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
CY_ISR(vUartRxISR)
|
||||||
|
{
|
||||||
|
portBASE_TYPE xTaskWoken = pdFALSE;
|
||||||
|
volatile unsigned char ucStatus = 0;
|
||||||
|
signed char cInChar = 0;
|
||||||
|
unsigned long ulMask = 0;
|
||||||
|
|
||||||
|
/* Read the status to acknowledge. */
|
||||||
|
ucStatus = UART_1_ReadRxStatus();
|
||||||
|
|
||||||
|
/* Only interested in a character being received. */
|
||||||
|
if ( 0 != ( ucStatus & UART_1_RX_STS_FIFO_NOTEMPTY ) )
|
||||||
|
{
|
||||||
|
/* Get the character. */
|
||||||
|
cInChar = UART_1_GetChar();
|
||||||
|
|
||||||
|
/* Mask off the other RTOS interrupts to interact with the queue. */
|
||||||
|
ulMask = portSET_INTERRUPT_MASK_FROM_ISR();
|
||||||
|
{
|
||||||
|
/* Try to deliver the character. */
|
||||||
|
if ( pdTRUE != xQueueSendFromISR( xSerialRxQueue, &cInChar, &xTaskWoken ) )
|
||||||
|
{
|
||||||
|
/* Run out of space. */
|
||||||
|
}
|
||||||
|
}
|
||||||
|
portCLEAR_INTERRUPT_MASK_FROM_ISR( ulMask );
|
||||||
|
}
|
||||||
|
|
||||||
|
/* If we delivered the character then a context switch might be required. */
|
||||||
|
portEND_SWITCHING_ISR( xTaskWoken );
|
||||||
|
}
|
||||||
|
/*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
CY_ISR(vUartTxISR)
|
||||||
|
{
|
||||||
|
portBASE_TYPE xTaskWoken = pdFALSE;
|
||||||
|
volatile unsigned char ucStatus = 0;
|
||||||
|
signed char cOutChar = 0;
|
||||||
|
unsigned long ulMask = 0;
|
||||||
|
|
||||||
|
/* Read the status to acknowledge. */
|
||||||
|
ucStatus = UART_1_ReadTxStatus();
|
||||||
|
|
||||||
|
/* Check to see whether this is a genuine interrupt. */
|
||||||
|
if ( ( 0 != ( ucStatus & UART_1_TX_STS_COMPLETE ) )
|
||||||
|
|| ( 0 != ( ucStatus & UART_1_TX_STS_FIFO_EMPTY ) ) )
|
||||||
|
{
|
||||||
|
/* Mask off the other RTOS interrupts to interact with the queue. */
|
||||||
|
ulMask = portSET_INTERRUPT_MASK_FROM_ISR();
|
||||||
|
{
|
||||||
|
if ( pdTRUE == xQueueReceiveFromISR( xSerialTxQueue, &cOutChar, &xTaskWoken ) )
|
||||||
|
{
|
||||||
|
/* Send the next character. */
|
||||||
|
UART_1_PutChar( cOutChar );
|
||||||
|
|
||||||
|
/* If we are firing, then the only interrupt we are interested in
|
||||||
|
* is the Complete. The application code will add the Empty interrupt
|
||||||
|
* when there is something else to be done.
|
||||||
|
*/
|
||||||
|
UART_1_SetTxInterruptMode( UART_1_TX_STS_COMPLETE );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
/* There is no work left so disable the interrupt
|
||||||
|
* until the application puts more into the queue.
|
||||||
|
*/
|
||||||
|
UART_1_SetTxInterruptMode( 0 );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
portCLEAR_INTERRUPT_MASK_FROM_ISR( ulMask );
|
||||||
|
}
|
||||||
|
|
||||||
|
/* If we delivered the character then a context switch might be required. */
|
||||||
|
portEND_SWITCHING_ISR( xTaskWoken );
|
||||||
|
}
|
||||||
|
/*---------------------------------------------------------------------------*/
|
@ -0,0 +1,128 @@
|
|||||||
|
/*
|
||||||
|
FreeRTOS V6.1.0 - 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 books - available as PDF or paperback *
|
||||||
|
* *
|
||||||
|
* "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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* High speed timer test as described in main.c. */
|
||||||
|
#include <device.h>
|
||||||
|
|
||||||
|
/* Scheduler includes. */
|
||||||
|
#include "FreeRTOS.h"
|
||||||
|
|
||||||
|
/* The set frequency of the interrupt. Deviations from this are measured as
|
||||||
|
the jitter. */
|
||||||
|
#define timerINTERRUPT_FREQUENCY ( ( unsigned portSHORT ) 20000 )
|
||||||
|
|
||||||
|
/* The expected time between each of the timer interrupts - if the jitter was
|
||||||
|
zero. */
|
||||||
|
#define timerEXPECTED_DIFFERENCE_VALUE ( configCPU_CLOCK_HZ / timerINTERRUPT_FREQUENCY )
|
||||||
|
|
||||||
|
/* The number of interrupts to pass before we start looking at the jitter. */
|
||||||
|
#define timerSETTLE_TIME 5
|
||||||
|
/*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Configures the two timers used to perform the test.
|
||||||
|
*/
|
||||||
|
void vSetupTimerTest( void );
|
||||||
|
|
||||||
|
/* Interrupt handler in which the jitter is measured. */
|
||||||
|
CY_ISR_PROTO(vTimer20KHzISR);
|
||||||
|
|
||||||
|
/* Stores the value of the maximum recorded jitter between interrupts. */
|
||||||
|
volatile unsigned portSHORT usMaxJitter = 0;
|
||||||
|
/*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
void vSetupTimerTest( void )
|
||||||
|
{
|
||||||
|
/* Install the ISR. */
|
||||||
|
isrTimer_20KHz_TC_StartEx(vTimer20KHzISR);
|
||||||
|
}
|
||||||
|
/*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
CY_ISR(vTimer20KHzISR)
|
||||||
|
{
|
||||||
|
static unsigned short usLastCount = 0, usSettleCount = 0, usMaxDifference = 0;
|
||||||
|
unsigned short usThisCount, usDifference;
|
||||||
|
|
||||||
|
/* Capture the free running timer value as we enter the interrupt. */
|
||||||
|
usThisCount = Timer_48MHz_ReadCounter();
|
||||||
|
|
||||||
|
if( usSettleCount >= timerSETTLE_TIME )
|
||||||
|
{
|
||||||
|
/* What is the difference between the timer value in this interrupt
|
||||||
|
and the value from the last interrupt. Timer counts down. */
|
||||||
|
usDifference = usLastCount + ~usThisCount + 1;
|
||||||
|
|
||||||
|
/* Store the difference in the timer values if it is larger than the
|
||||||
|
currently stored largest value. The difference over and above the
|
||||||
|
expected difference will give the 'jitter' in the processing of these
|
||||||
|
interrupts. */
|
||||||
|
if( usDifference > usMaxDifference )
|
||||||
|
{
|
||||||
|
usMaxDifference = usDifference;
|
||||||
|
|
||||||
|
/* Calculate the Jitter based on the difference we expect. */
|
||||||
|
usMaxJitter = usMaxDifference - timerEXPECTED_DIFFERENCE_VALUE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
/* Don't bother storing any values for the first couple of
|
||||||
|
interrupts. */
|
||||||
|
usSettleCount++;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Remember what the timer value was this time through, so we can calculate
|
||||||
|
the difference the next time through. */
|
||||||
|
usLastCount = usThisCount;
|
||||||
|
}
|
||||||
|
/*---------------------------------------------------------------------------*/
|
Binary file not shown.
@ -0,0 +1,20 @@
|
|||||||
|
/*******************************************************************************
|
||||||
|
* Copyright 2009, Cypress Semiconductor Corporation. All rights reserved.
|
||||||
|
* You may use this file only in accordance with the license, terms, conditions,
|
||||||
|
* disclaimers, and limitations in the end user license agreement accompanying
|
||||||
|
* the software package with which this file was provided.
|
||||||
|
********************************************************************************/
|
||||||
|
/* ========================================
|
||||||
|
*
|
||||||
|
* This file is automatically generated by PSoC Creator
|
||||||
|
* and should not be edited by hand.
|
||||||
|
*
|
||||||
|
* This file is necessary for your project to build.
|
||||||
|
* Please do not delete it.
|
||||||
|
*
|
||||||
|
* ========================================
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <project.h>
|
||||||
|
|
||||||
|
/*[]*/
|
@ -0,0 +1,347 @@
|
|||||||
|
/*
|
||||||
|
FreeRTOS V6.1.0 - 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 books - available as PDF or paperback *
|
||||||
|
* *
|
||||||
|
* "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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <device.h>
|
||||||
|
|
||||||
|
/* RTOS includes. */
|
||||||
|
#include "FreeRTOS.h"
|
||||||
|
#include "task.h"
|
||||||
|
#include "queue.h"
|
||||||
|
#include "semphr.h"
|
||||||
|
|
||||||
|
/* Common Demo includes. */
|
||||||
|
#include "serial.h"
|
||||||
|
#include "BlockQ.h"
|
||||||
|
#include "blocktim.h"
|
||||||
|
#include "comtest.h"
|
||||||
|
#include "countsem.h"
|
||||||
|
#include "death.h"
|
||||||
|
#include "dynamic.h"
|
||||||
|
#include "flash.h"
|
||||||
|
#include "flop.h"
|
||||||
|
#include "GenQTest.h"
|
||||||
|
#include "integer.h"
|
||||||
|
#include "IntQueue.h"
|
||||||
|
#include "mevents.h"
|
||||||
|
#include "partest.h"
|
||||||
|
#include "PollQ.h"
|
||||||
|
#include "print.h"
|
||||||
|
#include "QPeek.h"
|
||||||
|
#include "semtest.h"
|
||||||
|
/*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
/* The time between cycles of the 'check' functionality (defined within the
|
||||||
|
tick hook. */
|
||||||
|
#define mainCHECK_DELAY ( ( portTickType ) 5000 / portTICK_RATE_MS )
|
||||||
|
#define mainCOM_LED ( 3 )
|
||||||
|
|
||||||
|
/* The number of nano seconds between each processor clock. */
|
||||||
|
#define mainNS_PER_CLOCK ( ( unsigned portLONG ) ( ( 1.0 / ( double ) configCPU_CLOCK_HZ ) * 1000000000.0 ) )
|
||||||
|
|
||||||
|
/* Task priorities. */
|
||||||
|
#define mainQUEUE_POLL_PRIORITY ( tskIDLE_PRIORITY + 2 )
|
||||||
|
#define mainCHECK_TASK_PRIORITY ( tskIDLE_PRIORITY + 3 )
|
||||||
|
#define mainSEM_TEST_PRIORITY ( tskIDLE_PRIORITY + 1 )
|
||||||
|
#define mainBLOCK_Q_PRIORITY ( tskIDLE_PRIORITY + 2 )
|
||||||
|
#define mainCREATOR_TASK_PRIORITY ( tskIDLE_PRIORITY + 3 )
|
||||||
|
#define mainINTEGER_TASK_PRIORITY ( tskIDLE_PRIORITY )
|
||||||
|
#define mainGEN_QUEUE_TASK_PRIORITY ( tskIDLE_PRIORITY )
|
||||||
|
#define mainCOM_TEST_TASK_PRIORITY ( tskIDLE_PRIORITY + 1 )
|
||||||
|
#define mainFLASH_TEST_TASK_PRIORITY ( tskIDLE_PRIORITY + 2 )
|
||||||
|
/*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Configures the timers and interrupts for the fast interrupt test as
|
||||||
|
* described at the top of this file.
|
||||||
|
*/
|
||||||
|
extern void vSetupTimerTest( void );
|
||||||
|
/*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The Check task periodical interrogates each of the running tests to
|
||||||
|
* ensure that they are still executing correctly.
|
||||||
|
* If all the tests pass, then the LCD is updated with Pass, the number of
|
||||||
|
* iterations and the Jitter time calculated but the Fast Interrupt Test.
|
||||||
|
* If any one of the tests fail, it is indicated with an error code printed on
|
||||||
|
* the display. This indicator won't disappear until the device is reset.
|
||||||
|
*/
|
||||||
|
void vCheckTask( void *pvParameters );
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Installs the RTOS interrupt handlers and starts the peripherals.
|
||||||
|
*/
|
||||||
|
static void prvHardwareSetup( void );
|
||||||
|
/*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
void main( void )
|
||||||
|
{
|
||||||
|
unsigned long ulLed = 0;
|
||||||
|
unsigned long ulIteration = 0;
|
||||||
|
|
||||||
|
/* Place your initialization/startup code here (e.g. MyInst_Start()) */
|
||||||
|
prvHardwareSetup();
|
||||||
|
|
||||||
|
/* Poll the switch connected to P1[7]
|
||||||
|
* to prevent the Soak test from (re)starting.
|
||||||
|
*/
|
||||||
|
while ( 0 != Startup_Release_Switch_Read() )
|
||||||
|
{
|
||||||
|
if ( 100000 <= ulIteration++ )
|
||||||
|
{
|
||||||
|
vParTestToggleLED( ulLed++ );
|
||||||
|
ulLed = ulLed % 4;
|
||||||
|
ulIteration = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Reset the LEDS. */
|
||||||
|
for ( ulLed = 0; ulLed < 4; ulLed++ )
|
||||||
|
{
|
||||||
|
vParTestSetLED( ulLed, pdFALSE );
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Start the standard demo tasks. These are just here to exercise the
|
||||||
|
kernel port and provide examples of how the FreeRTOS API can be used. */
|
||||||
|
vStartBlockingQueueTasks( mainBLOCK_Q_PRIORITY );
|
||||||
|
vCreateBlockTimeTasks();
|
||||||
|
vStartCountingSemaphoreTasks();
|
||||||
|
vStartDynamicPriorityTasks();
|
||||||
|
vStartMathTasks( mainINTEGER_TASK_PRIORITY );
|
||||||
|
vStartGenericQueueTasks( mainGEN_QUEUE_TASK_PRIORITY );
|
||||||
|
vStartIntegerMathTasks( mainINTEGER_TASK_PRIORITY );
|
||||||
|
vStartPolledQueueTasks( mainQUEUE_POLL_PRIORITY );
|
||||||
|
vStartQueuePeekTasks();
|
||||||
|
vStartSemaphoreTasks( mainSEM_TEST_PRIORITY );
|
||||||
|
vStartLEDFlashTasks( mainFLASH_TEST_TASK_PRIORITY );
|
||||||
|
vAltStartComTestTasks( mainCOM_TEST_TASK_PRIORITY, 57600, mainCOM_LED );
|
||||||
|
vStartInterruptQueueTasks();
|
||||||
|
|
||||||
|
/* Start the error checking task. */
|
||||||
|
(void)xTaskCreate( vCheckTask, ( signed portCHAR * ) "Check", configMINIMAL_STACK_SIZE, NULL, mainCHECK_TASK_PRIORITY, NULL );
|
||||||
|
|
||||||
|
/* Configure the timers used by the fast interrupt timer test. */
|
||||||
|
vSetupTimerTest();
|
||||||
|
|
||||||
|
/* The suicide tasks must be created last as they need to know how many
|
||||||
|
tasks were running prior to their creation in order to ascertain whether
|
||||||
|
or not the correct/expected number of tasks are running at any given time. */
|
||||||
|
vCreateSuicidalTasks( mainCREATOR_TASK_PRIORITY );
|
||||||
|
|
||||||
|
/* Will only get here if there was insufficient memory to create the idle
|
||||||
|
task. The idle task is created within vTaskStartScheduler(). */
|
||||||
|
vTaskStartScheduler();
|
||||||
|
|
||||||
|
/* Should never reach here. */
|
||||||
|
for (;;);
|
||||||
|
}
|
||||||
|
/*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
void prvHardwareSetup( void )
|
||||||
|
{
|
||||||
|
/* Port layer functions that need to be copied into the vector table. */
|
||||||
|
extern void xPortPendSVHandler( void );
|
||||||
|
extern void xPortSysTickHandler( void );
|
||||||
|
extern void vPortSVCHandler( void );
|
||||||
|
extern cyisraddress CyRamVectors[];
|
||||||
|
|
||||||
|
/* Install the OS Interrupt Handlers. */
|
||||||
|
CyRamVectors[11] = (cyisraddress)vPortSVCHandler;
|
||||||
|
CyRamVectors[14] = (cyisraddress)xPortPendSVHandler;
|
||||||
|
CyRamVectors[15] = (cyisraddress)xPortSysTickHandler;
|
||||||
|
|
||||||
|
/* Start-up the peripherals. */
|
||||||
|
|
||||||
|
/* Enable and clear the LCD Display. */
|
||||||
|
LCD_Character_Display_Start();
|
||||||
|
LCD_Character_Display_ClearDisplay();
|
||||||
|
LCD_Character_Display_Position(0,0);
|
||||||
|
LCD_Character_Display_PrintString("www.FreeRTOS.org ");
|
||||||
|
LCD_Character_Display_Position(1,0);
|
||||||
|
LCD_Character_Display_PrintString("CY8C5588AX-060 ");
|
||||||
|
|
||||||
|
/* Start the UART. */
|
||||||
|
UART_1_Start();
|
||||||
|
|
||||||
|
/* Initialise the LEDs. */
|
||||||
|
vParTestInitialise();
|
||||||
|
|
||||||
|
/* Start the PWM modules that drive the IntQueue tests. */
|
||||||
|
High_Frequency_PWM_0_Start();
|
||||||
|
High_Frequency_PWM_1_Start();
|
||||||
|
|
||||||
|
/* Start the timers for the Jitter test. */
|
||||||
|
Timer_20KHz_Start();
|
||||||
|
Timer_48MHz_Start();
|
||||||
|
}
|
||||||
|
/*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
void vCheckTask( void *pvParameters )
|
||||||
|
{
|
||||||
|
unsigned long ulRow = 0;
|
||||||
|
portTickType xDelay = 0;
|
||||||
|
unsigned short usErrorCode = 0;
|
||||||
|
unsigned long ulIteration = 0;
|
||||||
|
extern unsigned portSHORT usMaxJitter;
|
||||||
|
|
||||||
|
/* Intialise the sleeper. */
|
||||||
|
xDelay = xTaskGetTickCount();
|
||||||
|
|
||||||
|
for ( ;; )
|
||||||
|
{
|
||||||
|
/* Perform this check every mainCHECK_DELAY milliseconds. */
|
||||||
|
vTaskDelayUntil( &xDelay, mainCHECK_DELAY );
|
||||||
|
|
||||||
|
/* Check that all of the Demo tasks are still running. */
|
||||||
|
if ( pdTRUE != xAreBlockingQueuesStillRunning() )
|
||||||
|
{
|
||||||
|
usErrorCode |= 0x1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( pdTRUE != xAreBlockTimeTestTasksStillRunning() )
|
||||||
|
{
|
||||||
|
usErrorCode |= 0x2;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( pdTRUE != xAreCountingSemaphoreTasksStillRunning() )
|
||||||
|
{
|
||||||
|
usErrorCode |= 0x4;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( pdTRUE != xIsCreateTaskStillRunning() )
|
||||||
|
{
|
||||||
|
usErrorCode |= 0x8;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( pdTRUE != xAreDynamicPriorityTasksStillRunning() )
|
||||||
|
{
|
||||||
|
usErrorCode |= 0x10;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( pdTRUE != xAreMathsTaskStillRunning() )
|
||||||
|
{
|
||||||
|
usErrorCode |= 0x20;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( pdTRUE != xAreGenericQueueTasksStillRunning() )
|
||||||
|
{
|
||||||
|
usErrorCode |= 0x40;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( pdTRUE != xAreIntegerMathsTaskStillRunning() )
|
||||||
|
{
|
||||||
|
usErrorCode |= 0x80;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( pdTRUE != xArePollingQueuesStillRunning() )
|
||||||
|
{
|
||||||
|
usErrorCode |= 0x100;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( pdTRUE != xAreQueuePeekTasksStillRunning() )
|
||||||
|
{
|
||||||
|
usErrorCode |= 0x200;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( pdTRUE != xAreSemaphoreTasksStillRunning() )
|
||||||
|
{
|
||||||
|
usErrorCode |= 0x400;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( pdTRUE != xAreComTestTasksStillRunning() )
|
||||||
|
{
|
||||||
|
usErrorCode |= 0x800;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( pdTRUE != xAreIntQueueTasksStillRunning() )
|
||||||
|
{
|
||||||
|
usErrorCode |= 0x1000;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Clear the display. */
|
||||||
|
LCD_Character_Display_ClearDisplay();
|
||||||
|
if ( 0 == usErrorCode )
|
||||||
|
{
|
||||||
|
LCD_Character_Display_Position( (ulRow) & 0x1, 0);
|
||||||
|
LCD_Character_Display_PrintString("Pass: ");
|
||||||
|
LCD_Character_Display_PrintNumber(ulIteration++);
|
||||||
|
LCD_Character_Display_Position( (++ulRow) & 0x1, 0);
|
||||||
|
LCD_Character_Display_PrintString("Jitter(ns):");
|
||||||
|
LCD_Character_Display_PrintNumber((usMaxJitter * mainNS_PER_CLOCK));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
/* Do something to indicate the failure. */
|
||||||
|
LCD_Character_Display_Position( (ulRow) & 0x1, 0);
|
||||||
|
LCD_Character_Display_PrintString("Fail at: ");
|
||||||
|
LCD_Character_Display_PrintNumber(ulIteration);
|
||||||
|
LCD_Character_Display_Position( (++ulRow) & 0x1, 0);
|
||||||
|
LCD_Character_Display_PrintString("Error: 0x");
|
||||||
|
LCD_Character_Display_PrintHexUint16(usErrorCode);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
void vApplicationStackOverflowHook( xTaskHandle *pxTask, signed char *pcTaskName )
|
||||||
|
{
|
||||||
|
/* The stack space has been execeeded for a task, considering allocating more. */
|
||||||
|
for (;;);
|
||||||
|
}
|
||||||
|
/*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
void vApplicationMallocFailedHook( void )
|
||||||
|
{
|
||||||
|
/* The heap space has been execeeded. */
|
||||||
|
for (;;);
|
||||||
|
}
|
||||||
|
/*---------------------------------------------------------------------------*/
|
@ -0,0 +1,22 @@
|
|||||||
|
<?xml version="1.0"?>
|
||||||
|
<CyXmlSerializer>
|
||||||
|
<!--This file is machine generated and read. It is not intended to be edited by hand.-->
|
||||||
|
<!--Due to this, there is no schema for this file.-->
|
||||||
|
<CyGuid_2867d519-54d2-4c01-9830-c51cb08bc3dd type_name="CyDesigner.Common.ProjMgmt.Model.CyPrjMgmtWrkspc" version="5" name="FreeRTOS_Demo Workspace" persistent="" config="Debug" platform="fdb8e1ae-f83a-46cf-9446-1d703716f38a">
|
||||||
|
<current_project name="./FreeRTOS_Demo.cydsn/FreeRTOS_Demo.cyprj" />
|
||||||
|
<wrkspc_folders />
|
||||||
|
<files />
|
||||||
|
<projects>
|
||||||
|
<name_val_pair name="FreeRTOS_Demo" v="./FreeRTOS_Demo.cydsn/FreeRTOS_Demo.cyprj" />
|
||||||
|
</projects>
|
||||||
|
<workspace_id v="dd096e2f-e89d-42b3-a9f0-d771ecfa166f" />
|
||||||
|
<WriteAppVersionLastSavedWith v="1.0.0.7006" />
|
||||||
|
<WriteAppMarketingVersionLastSavedWith v="1.0 Beta 5.0" />
|
||||||
|
<CyGuid_dcbd9771-0334-43dc-9cc3-fe99dc3c5316 type_name="CyDesigner.Common.ProjMgmt.Model.CyPrjDependencyList" version="3">
|
||||||
|
<wrkspc_dependencies />
|
||||||
|
</CyGuid_dcbd9771-0334-43dc-9cc3-fe99dc3c5316>
|
||||||
|
<CyGuid_63b68103-67f5-4406-8da6-5c8625765b82 type_name="CyDesigner.Common.ProjMgmt.Model.CyIgnoredSystemDepsList" version="1">
|
||||||
|
<wrkspc_dependencies />
|
||||||
|
</CyGuid_63b68103-67f5-4406-8da6-5c8625765b82>
|
||||||
|
</CyGuid_2867d519-54d2-4c01-9830-c51cb08bc3dd>
|
||||||
|
</CyXmlSerializer>
|
@ -0,0 +1,120 @@
|
|||||||
|
/*
|
||||||
|
FreeRTOS V6.1.0 - 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 books - available as PDF or paperback *
|
||||||
|
* *
|
||||||
|
* "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
|
||||||
|
|
||||||
|
/*-----------------------------------------------------------
|
||||||
|
* 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.
|
||||||
|
*----------------------------------------------------------*/
|
||||||
|
|
||||||
|
#include <device.h>
|
||||||
|
|
||||||
|
#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 ) BCLK__BUS_CLK__HZ )
|
||||||
|
#define configTICK_RATE_HZ ( ( portTickType ) 1000 )
|
||||||
|
#define configMINIMAL_STACK_SIZE ( ( unsigned short ) 100 )
|
||||||
|
#define configTOTAL_HEAP_SIZE ( ( size_t ) ( 32 * 1024 ) )
|
||||||
|
#define configMAX_TASK_NAME_LEN ( 12 )
|
||||||
|
#define configUSE_TRACE_FACILITY 0
|
||||||
|
#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 1
|
||||||
|
#define configUSE_ALTERNATIVE_API 0
|
||||||
|
#define configCHECK_FOR_STACK_OVERFLOW 2
|
||||||
|
#define configUSE_RECURSIVE_MUTEXES 1
|
||||||
|
#define configQUEUE_REGISTRY_SIZE 10
|
||||||
|
#define configGENERATE_RUN_TIME_STATS 0
|
||||||
|
#define configUSE_MALLOC_FAILED_HOOK 1
|
||||||
|
|
||||||
|
/* 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
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Configure the number of priority bits. This is normally
|
||||||
|
* __NVIC_PRIO_BITS but PSoC Creator beta 5 contained a larger
|
||||||
|
* value for the priority than is implemented in the hardware so
|
||||||
|
* set it here to what the data sheet describes.
|
||||||
|
*/
|
||||||
|
#define configPRIO_BITS 3 /* 8 priority levels */
|
||||||
|
|
||||||
|
/* The lowest priority. */
|
||||||
|
#define configKERNEL_INTERRUPT_PRIORITY ( 7 << (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 */
|
Binary file not shown.
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,98 @@
|
|||||||
|
/*
|
||||||
|
FreeRTOS V6.1.0 - 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 books - available as PDF or paperback *
|
||||||
|
* *
|
||||||
|
* "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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <device.h>
|
||||||
|
#include "FreeRTOS.h"
|
||||||
|
#include "task.h"
|
||||||
|
/*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
extern portBASE_TYPE xFirstTimerHandler( void );
|
||||||
|
extern portBASE_TYPE xSecondTimerHandler( void );
|
||||||
|
/*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
CY_ISR_PROTO(vHighFrequencyFirstISR);
|
||||||
|
CY_ISR_PROTO(vHighFrequencySecondISR);
|
||||||
|
/*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Installs and starts the ISRs that drive the Interupt Queue Tests.
|
||||||
|
*/
|
||||||
|
void vInitialiseTimerForIntQueueTest( void )
|
||||||
|
{
|
||||||
|
taskENTER_CRITICAL();
|
||||||
|
{
|
||||||
|
/* Initialise and start the First Timer ISR. */
|
||||||
|
isr_High_Frequency_2000Hz_ClearPending();
|
||||||
|
isr_High_Frequency_2000Hz_StartEx((cyisraddress)vHighFrequencyFirstISR);
|
||||||
|
|
||||||
|
/* Initialise and start the Second Timer ISR. */
|
||||||
|
isr_High_Frequency_2001Hz_ClearPending();
|
||||||
|
isr_High_Frequency_2001Hz_StartEx((cyisraddress)vHighFrequencySecondISR);
|
||||||
|
}
|
||||||
|
taskEXIT_CRITICAL();
|
||||||
|
}
|
||||||
|
/*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
CY_ISR(vHighFrequencyFirstISR)
|
||||||
|
{
|
||||||
|
/* Call back into the test code and context switch if necessary. */
|
||||||
|
portEND_SWITCHING_ISR( xFirstTimerHandler() );
|
||||||
|
}
|
||||||
|
/*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
CY_ISR(vHighFrequencySecondISR)
|
||||||
|
{
|
||||||
|
/* Call back into the test code and context switch if necessary. */
|
||||||
|
portEND_SWITCHING_ISR( xSecondTimerHandler() );
|
||||||
|
}
|
||||||
|
/*---------------------------------------------------------------------------*/
|
@ -0,0 +1,62 @@
|
|||||||
|
/*
|
||||||
|
FreeRTOS V6.1.0 - 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 books - available as PDF or paperback *
|
||||||
|
* *
|
||||||
|
* "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 INT_QUEUE_TIMER_H_
|
||||||
|
#define INT_QUEUE_TIMER_H_
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Install and start the ISRs that drive the Interupt Queue Tests.
|
||||||
|
*/
|
||||||
|
void vInitialiseTimerForIntQueueTest( void );
|
||||||
|
|
||||||
|
#endif /* INT_QUEUE_TIMER_H_ */
|
@ -0,0 +1,117 @@
|
|||||||
|
/*
|
||||||
|
FreeRTOS V6.1.0 - 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 books - available as PDF or paperback *
|
||||||
|
* *
|
||||||
|
* "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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <device.h>
|
||||||
|
|
||||||
|
#include "FreeRTOS.h"
|
||||||
|
#include "task.h"
|
||||||
|
#include "partest.h"
|
||||||
|
/*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
#define partstMAX_LED ( 4 )
|
||||||
|
/*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
static volatile char cLedOutput[ partstMAX_LED ];
|
||||||
|
/*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
void vParTestInitialise( void )
|
||||||
|
{
|
||||||
|
long lIndex;
|
||||||
|
for ( lIndex = 0; lIndex < partstMAX_LED; lIndex++ )
|
||||||
|
{
|
||||||
|
cLedOutput[ lIndex ] = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
void vParTestSetLED( unsigned portBASE_TYPE uxLED, signed portBASE_TYPE xValue )
|
||||||
|
{
|
||||||
|
taskENTER_CRITICAL();
|
||||||
|
{
|
||||||
|
switch ( uxLED )
|
||||||
|
{
|
||||||
|
case 0:
|
||||||
|
Pin_LED_0_Write( xValue & 0x1 );
|
||||||
|
break;
|
||||||
|
case 1:
|
||||||
|
Pin_LED_1_Write( xValue & 0x1 );
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
Pin_LED_2_Write( xValue & 0x1 );
|
||||||
|
break;
|
||||||
|
case 3:
|
||||||
|
Pin_LED_3_Write( xValue & 0x1 );
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
/* Do nothing. */
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
taskEXIT_CRITICAL();
|
||||||
|
|
||||||
|
/* Record the output for the sake of toggling. */
|
||||||
|
if ( uxLED < partstMAX_LED )
|
||||||
|
{
|
||||||
|
cLedOutput[ uxLED ] = ( xValue & 0x1 );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
void vParTestToggleLED( unsigned portBASE_TYPE uxLED )
|
||||||
|
{
|
||||||
|
if ( uxLED < partstMAX_LED )
|
||||||
|
{
|
||||||
|
vParTestSetLED( uxLED, !cLedOutput[ uxLED ] );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/*---------------------------------------------------------------------------*/
|
@ -0,0 +1,226 @@
|
|||||||
|
/*
|
||||||
|
FreeRTOS V6.1.0 - 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 books - available as PDF or paperback *
|
||||||
|
* *
|
||||||
|
* "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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <device.h>
|
||||||
|
#include "FreeRTOS.h"
|
||||||
|
#include "queue.h"
|
||||||
|
#include "task.h"
|
||||||
|
#include "serial.h"
|
||||||
|
/*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
#define serialSTRING_DELAY_TICKS ( portMAX_DELAY )
|
||||||
|
/*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
CY_ISR_PROTO(vUartRxISR);
|
||||||
|
CY_ISR_PROTO(vUartTxISR);
|
||||||
|
/*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
static xQueueHandle xSerialTxQueue = NULL;
|
||||||
|
static xQueueHandle xSerialRxQueue = NULL;
|
||||||
|
/*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
xComPortHandle xSerialPortInitMinimal( unsigned long ulWantedBaud, unsigned portBASE_TYPE uxQueueLength )
|
||||||
|
{
|
||||||
|
/* Configure Rx. */
|
||||||
|
xSerialRxQueue = xQueueCreate( uxQueueLength, sizeof( signed char ) );
|
||||||
|
isr_UART1_RX_BYTE_RECEIVED_ClearPending();
|
||||||
|
isr_UART1_RX_BYTE_RECEIVED_StartEx(vUartRxISR);
|
||||||
|
|
||||||
|
/* Configure Tx */
|
||||||
|
xSerialTxQueue = xQueueCreate( uxQueueLength, sizeof( signed char ) );
|
||||||
|
isr_UART1_TX_BYTE_COMPLETE_ClearPending() ;
|
||||||
|
isr_UART1_TX_BYTE_COMPLETE_StartEx(vUartTxISR);
|
||||||
|
|
||||||
|
/* Clear the interrupt modes for the Tx for the time being. */
|
||||||
|
UART_1_SetTxInterruptMode( 0 );
|
||||||
|
|
||||||
|
/* Both configured successfully. */
|
||||||
|
return (xComPortHandle)( xSerialTxQueue && xSerialRxQueue );
|
||||||
|
}
|
||||||
|
/*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
void vSerialPutString( xComPortHandle pxPort, const signed char * const pcString, unsigned short usStringLength )
|
||||||
|
{
|
||||||
|
unsigned short usIndex = 0;
|
||||||
|
for ( usIndex = 0; usIndex < usStringLength; usIndex++ )
|
||||||
|
{
|
||||||
|
/* Check for pre-mature end of line. */
|
||||||
|
if ( '\0' == pcString[ usIndex ] )
|
||||||
|
{
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Send out, one character at a time. */
|
||||||
|
if ( pdTRUE != xSerialPutChar( NULL, pcString[ usIndex ], serialSTRING_DELAY_TICKS ) )
|
||||||
|
{
|
||||||
|
/* Failed to send, this will be picked up in the receive comtest task. */
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
signed portBASE_TYPE xSerialGetChar( xComPortHandle pxPort, signed char *pcRxedChar, portTickType xBlockTime )
|
||||||
|
{
|
||||||
|
portBASE_TYPE xReturn = pdFALSE;
|
||||||
|
if ( pdTRUE == xQueueReceive( xSerialRxQueue, pcRxedChar, xBlockTime ) )
|
||||||
|
{
|
||||||
|
/* Picked up a character. */
|
||||||
|
xReturn = pdTRUE;
|
||||||
|
}
|
||||||
|
return xReturn;
|
||||||
|
}
|
||||||
|
/*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
signed portBASE_TYPE xSerialPutChar( xComPortHandle pxPort, signed char cOutChar, portTickType xBlockTime )
|
||||||
|
{
|
||||||
|
portBASE_TYPE xReturn = pdFALSE;
|
||||||
|
|
||||||
|
/* The ISR is processing characters is so just add to the end of the queue. */
|
||||||
|
if ( pdTRUE == xQueueSend( xSerialTxQueue, &cOutChar, xBlockTime ) )
|
||||||
|
{
|
||||||
|
xReturn = pdTRUE;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
/* The queue is probably full. */
|
||||||
|
xReturn = pdFALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Make sure that the interrupt will fire in the case where:
|
||||||
|
* Currently sending so the Tx Complete will fire.
|
||||||
|
* Not sending so the Empty will fire.
|
||||||
|
*/
|
||||||
|
taskENTER_CRITICAL();
|
||||||
|
UART_1_SetTxInterruptMode( UART_1_TX_STS_COMPLETE | UART_1_TX_STS_FIFO_EMPTY );
|
||||||
|
taskEXIT_CRITICAL();
|
||||||
|
|
||||||
|
return xReturn;
|
||||||
|
}
|
||||||
|
/*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
CY_ISR(vUartRxISR)
|
||||||
|
{
|
||||||
|
portBASE_TYPE xTaskWoken = pdFALSE;
|
||||||
|
volatile unsigned char ucStatus = 0;
|
||||||
|
signed char cInChar = 0;
|
||||||
|
unsigned long ulMask = 0;
|
||||||
|
|
||||||
|
/* Read the status to acknowledge. */
|
||||||
|
ucStatus = UART_1_ReadRxStatus();
|
||||||
|
|
||||||
|
/* Only interested in a character being received. */
|
||||||
|
if ( 0 != ( ucStatus & UART_1_RX_STS_FIFO_NOTEMPTY ) )
|
||||||
|
{
|
||||||
|
/* Get the character. */
|
||||||
|
cInChar = UART_1_GetChar();
|
||||||
|
|
||||||
|
/* Mask off the other RTOS interrupts to interact with the queue. */
|
||||||
|
ulMask = portSET_INTERRUPT_MASK_FROM_ISR();
|
||||||
|
{
|
||||||
|
/* Try to deliver the character. */
|
||||||
|
if ( pdTRUE != xQueueSendFromISR( xSerialRxQueue, &cInChar, &xTaskWoken ) )
|
||||||
|
{
|
||||||
|
/* Run out of space. */
|
||||||
|
}
|
||||||
|
}
|
||||||
|
portCLEAR_INTERRUPT_MASK_FROM_ISR( ulMask );
|
||||||
|
}
|
||||||
|
|
||||||
|
/* If we delivered the character then a context switch might be required. */
|
||||||
|
portEND_SWITCHING_ISR( xTaskWoken );
|
||||||
|
}
|
||||||
|
/*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
CY_ISR(vUartTxISR)
|
||||||
|
{
|
||||||
|
portBASE_TYPE xTaskWoken = pdFALSE;
|
||||||
|
volatile unsigned char ucStatus = 0;
|
||||||
|
signed char cOutChar = 0;
|
||||||
|
unsigned long ulMask = 0;
|
||||||
|
|
||||||
|
/* Read the status to acknowledge. */
|
||||||
|
ucStatus = UART_1_ReadTxStatus();
|
||||||
|
|
||||||
|
/* Check to see whether this is a genuine interrupt. */
|
||||||
|
if ( ( 0 != ( ucStatus & UART_1_TX_STS_COMPLETE ) )
|
||||||
|
|| ( 0 != ( ucStatus & UART_1_TX_STS_FIFO_EMPTY ) ) )
|
||||||
|
{
|
||||||
|
/* Mask off the other RTOS interrupts to interact with the queue. */
|
||||||
|
ulMask = portSET_INTERRUPT_MASK_FROM_ISR();
|
||||||
|
{
|
||||||
|
if ( pdTRUE == xQueueReceiveFromISR( xSerialTxQueue, &cOutChar, &xTaskWoken ) )
|
||||||
|
{
|
||||||
|
/* Send the next character. */
|
||||||
|
UART_1_PutChar( cOutChar );
|
||||||
|
|
||||||
|
/* If we are firing, then the only interrupt we are interested in
|
||||||
|
* is the Complete. The application code will add the Empty interrupt
|
||||||
|
* when there is something else to be done.
|
||||||
|
*/
|
||||||
|
UART_1_SetTxInterruptMode( UART_1_TX_STS_COMPLETE );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
/* There is no work left so disable the interrupt
|
||||||
|
* until the application puts more into the queue.
|
||||||
|
*/
|
||||||
|
UART_1_SetTxInterruptMode( 0 );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
portCLEAR_INTERRUPT_MASK_FROM_ISR( ulMask );
|
||||||
|
}
|
||||||
|
|
||||||
|
/* If we delivered the character then a context switch might be required. */
|
||||||
|
portEND_SWITCHING_ISR( xTaskWoken );
|
||||||
|
}
|
||||||
|
/*---------------------------------------------------------------------------*/
|
@ -0,0 +1,128 @@
|
|||||||
|
/*
|
||||||
|
FreeRTOS V6.1.0 - 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 books - available as PDF or paperback *
|
||||||
|
* *
|
||||||
|
* "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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* High speed timer test as described in main.c. */
|
||||||
|
#include <device.h>
|
||||||
|
|
||||||
|
/* Scheduler includes. */
|
||||||
|
#include "FreeRTOS.h"
|
||||||
|
|
||||||
|
/* The set frequency of the interrupt. Deviations from this are measured as
|
||||||
|
the jitter. */
|
||||||
|
#define timerINTERRUPT_FREQUENCY ( ( unsigned portSHORT ) 20000 )
|
||||||
|
|
||||||
|
/* The expected time between each of the timer interrupts - if the jitter was
|
||||||
|
zero. */
|
||||||
|
#define timerEXPECTED_DIFFERENCE_VALUE ( configCPU_CLOCK_HZ / timerINTERRUPT_FREQUENCY )
|
||||||
|
|
||||||
|
/* The number of interrupts to pass before we start looking at the jitter. */
|
||||||
|
#define timerSETTLE_TIME 5
|
||||||
|
/*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Configures the two timers used to perform the test.
|
||||||
|
*/
|
||||||
|
void vSetupTimerTest( void );
|
||||||
|
|
||||||
|
/* Interrupt handler in which the jitter is measured. */
|
||||||
|
CY_ISR_PROTO(vTimer20KHzISR);
|
||||||
|
|
||||||
|
/* Stores the value of the maximum recorded jitter between interrupts. */
|
||||||
|
volatile unsigned portSHORT usMaxJitter = 0;
|
||||||
|
/*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
void vSetupTimerTest( void )
|
||||||
|
{
|
||||||
|
/* Install the ISR. */
|
||||||
|
isrTimer_20KHz_TC_StartEx(vTimer20KHzISR);
|
||||||
|
}
|
||||||
|
/*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
CY_ISR(vTimer20KHzISR)
|
||||||
|
{
|
||||||
|
static unsigned short usLastCount = 0, usSettleCount = 0, usMaxDifference = 0;
|
||||||
|
unsigned short usThisCount, usDifference;
|
||||||
|
|
||||||
|
/* Capture the free running timer value as we enter the interrupt. */
|
||||||
|
usThisCount = Timer_48MHz_ReadCounter();
|
||||||
|
|
||||||
|
if( usSettleCount >= timerSETTLE_TIME )
|
||||||
|
{
|
||||||
|
/* What is the difference between the timer value in this interrupt
|
||||||
|
and the value from the last interrupt. Timer counts down. */
|
||||||
|
usDifference = usLastCount + ~usThisCount + 1;
|
||||||
|
|
||||||
|
/* Store the difference in the timer values if it is larger than the
|
||||||
|
currently stored largest value. The difference over and above the
|
||||||
|
expected difference will give the 'jitter' in the processing of these
|
||||||
|
interrupts. */
|
||||||
|
if( usDifference > usMaxDifference )
|
||||||
|
{
|
||||||
|
usMaxDifference = usDifference;
|
||||||
|
|
||||||
|
/* Calculate the Jitter based on the difference we expect. */
|
||||||
|
usMaxJitter = usMaxDifference - timerEXPECTED_DIFFERENCE_VALUE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
/* Don't bother storing any values for the first couple of
|
||||||
|
interrupts. */
|
||||||
|
usSettleCount++;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Remember what the timer value was this time through, so we can calculate
|
||||||
|
the difference the next time through. */
|
||||||
|
usLastCount = usThisCount;
|
||||||
|
}
|
||||||
|
/*---------------------------------------------------------------------------*/
|
Binary file not shown.
@ -0,0 +1,20 @@
|
|||||||
|
/*******************************************************************************
|
||||||
|
* Copyright 2009, Cypress Semiconductor Corporation. All rights reserved.
|
||||||
|
* You may use this file only in accordance with the license, terms, conditions,
|
||||||
|
* disclaimers, and limitations in the end user license agreement accompanying
|
||||||
|
* the software package with which this file was provided.
|
||||||
|
********************************************************************************/
|
||||||
|
/* ========================================
|
||||||
|
*
|
||||||
|
* This file is automatically generated by PSoC Creator
|
||||||
|
* and should not be edited by hand.
|
||||||
|
*
|
||||||
|
* This file is necessary for your project to build.
|
||||||
|
* Please do not delete it.
|
||||||
|
*
|
||||||
|
* ========================================
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <project.h>
|
||||||
|
|
||||||
|
/*[]*/
|
@ -0,0 +1,347 @@
|
|||||||
|
/*
|
||||||
|
FreeRTOS V6.1.0 - 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 books - available as PDF or paperback *
|
||||||
|
* *
|
||||||
|
* "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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <device.h>
|
||||||
|
|
||||||
|
/* RTOS includes. */
|
||||||
|
#include "FreeRTOS.h"
|
||||||
|
#include "task.h"
|
||||||
|
#include "queue.h"
|
||||||
|
#include "semphr.h"
|
||||||
|
|
||||||
|
/* Common Demo includes. */
|
||||||
|
#include "serial.h"
|
||||||
|
#include "BlockQ.h"
|
||||||
|
#include "blocktim.h"
|
||||||
|
#include "comtest.h"
|
||||||
|
#include "countsem.h"
|
||||||
|
#include "death.h"
|
||||||
|
#include "dynamic.h"
|
||||||
|
#include "flash.h"
|
||||||
|
#include "flop.h"
|
||||||
|
#include "GenQTest.h"
|
||||||
|
#include "integer.h"
|
||||||
|
#include "IntQueue.h"
|
||||||
|
#include "mevents.h"
|
||||||
|
#include "partest.h"
|
||||||
|
#include "PollQ.h"
|
||||||
|
#include "print.h"
|
||||||
|
#include "QPeek.h"
|
||||||
|
#include "semtest.h"
|
||||||
|
/*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
/* The time between cycles of the 'check' functionality (defined within the
|
||||||
|
tick hook. */
|
||||||
|
#define mainCHECK_DELAY ( ( portTickType ) 5000 / portTICK_RATE_MS )
|
||||||
|
#define mainCOM_LED ( 3 )
|
||||||
|
|
||||||
|
/* The number of nano seconds between each processor clock. */
|
||||||
|
#define mainNS_PER_CLOCK ( ( unsigned portLONG ) ( ( 1.0 / ( double ) configCPU_CLOCK_HZ ) * 1000000000.0 ) )
|
||||||
|
|
||||||
|
/* Task priorities. */
|
||||||
|
#define mainQUEUE_POLL_PRIORITY ( tskIDLE_PRIORITY + 2 )
|
||||||
|
#define mainCHECK_TASK_PRIORITY ( tskIDLE_PRIORITY + 3 )
|
||||||
|
#define mainSEM_TEST_PRIORITY ( tskIDLE_PRIORITY + 1 )
|
||||||
|
#define mainBLOCK_Q_PRIORITY ( tskIDLE_PRIORITY + 2 )
|
||||||
|
#define mainCREATOR_TASK_PRIORITY ( tskIDLE_PRIORITY + 3 )
|
||||||
|
#define mainINTEGER_TASK_PRIORITY ( tskIDLE_PRIORITY )
|
||||||
|
#define mainGEN_QUEUE_TASK_PRIORITY ( tskIDLE_PRIORITY )
|
||||||
|
#define mainCOM_TEST_TASK_PRIORITY ( tskIDLE_PRIORITY + 1 )
|
||||||
|
#define mainFLASH_TEST_TASK_PRIORITY ( tskIDLE_PRIORITY + 2 )
|
||||||
|
/*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Configures the timers and interrupts for the fast interrupt test as
|
||||||
|
* described at the top of this file.
|
||||||
|
*/
|
||||||
|
extern void vSetupTimerTest( void );
|
||||||
|
/*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The Check task periodical interrogates each of the running tests to
|
||||||
|
* ensure that they are still executing correctly.
|
||||||
|
* If all the tests pass, then the LCD is updated with Pass, the number of
|
||||||
|
* iterations and the Jitter time calculated but the Fast Interrupt Test.
|
||||||
|
* If any one of the tests fail, it is indicated with an error code printed on
|
||||||
|
* the display. This indicator won't disappear until the device is reset.
|
||||||
|
*/
|
||||||
|
void vCheckTask( void *pvParameters );
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Installs the RTOS interrupt handlers and starts the peripherals.
|
||||||
|
*/
|
||||||
|
static void prvHardwareSetup( void );
|
||||||
|
/*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
void main( void )
|
||||||
|
{
|
||||||
|
unsigned long ulLed = 0;
|
||||||
|
unsigned long ulIteration = 0;
|
||||||
|
|
||||||
|
/* Place your initialization/startup code here (e.g. MyInst_Start()) */
|
||||||
|
prvHardwareSetup();
|
||||||
|
|
||||||
|
/* Poll the switch connected to P1[7]
|
||||||
|
* to prevent the Soak test from (re)starting.
|
||||||
|
*/
|
||||||
|
while ( 0 != Startup_Release_Switch_Read() )
|
||||||
|
{
|
||||||
|
if ( 100000 <= ulIteration++ )
|
||||||
|
{
|
||||||
|
vParTestToggleLED( ulLed++ );
|
||||||
|
ulLed = ulLed % 4;
|
||||||
|
ulIteration = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Reset the LEDS. */
|
||||||
|
for ( ulLed = 0; ulLed < 4; ulLed++ )
|
||||||
|
{
|
||||||
|
vParTestSetLED( ulLed, pdFALSE );
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Start the standard demo tasks. These are just here to exercise the
|
||||||
|
kernel port and provide examples of how the FreeRTOS API can be used. */
|
||||||
|
vStartBlockingQueueTasks( mainBLOCK_Q_PRIORITY );
|
||||||
|
vCreateBlockTimeTasks();
|
||||||
|
vStartCountingSemaphoreTasks();
|
||||||
|
vStartDynamicPriorityTasks();
|
||||||
|
vStartMathTasks( mainINTEGER_TASK_PRIORITY );
|
||||||
|
vStartGenericQueueTasks( mainGEN_QUEUE_TASK_PRIORITY );
|
||||||
|
vStartIntegerMathTasks( mainINTEGER_TASK_PRIORITY );
|
||||||
|
vStartPolledQueueTasks( mainQUEUE_POLL_PRIORITY );
|
||||||
|
vStartQueuePeekTasks();
|
||||||
|
vStartSemaphoreTasks( mainSEM_TEST_PRIORITY );
|
||||||
|
vStartLEDFlashTasks( mainFLASH_TEST_TASK_PRIORITY );
|
||||||
|
vAltStartComTestTasks( mainCOM_TEST_TASK_PRIORITY, 57600, mainCOM_LED );
|
||||||
|
vStartInterruptQueueTasks();
|
||||||
|
|
||||||
|
/* Start the error checking task. */
|
||||||
|
(void)xTaskCreate( vCheckTask, ( signed portCHAR * ) "Check", configMINIMAL_STACK_SIZE, NULL, mainCHECK_TASK_PRIORITY, NULL );
|
||||||
|
|
||||||
|
/* Configure the timers used by the fast interrupt timer test. */
|
||||||
|
vSetupTimerTest();
|
||||||
|
|
||||||
|
/* The suicide tasks must be created last as they need to know how many
|
||||||
|
tasks were running prior to their creation in order to ascertain whether
|
||||||
|
or not the correct/expected number of tasks are running at any given time. */
|
||||||
|
vCreateSuicidalTasks( mainCREATOR_TASK_PRIORITY );
|
||||||
|
|
||||||
|
/* Will only get here if there was insufficient memory to create the idle
|
||||||
|
task. The idle task is created within vTaskStartScheduler(). */
|
||||||
|
vTaskStartScheduler();
|
||||||
|
|
||||||
|
/* Should never reach here. */
|
||||||
|
for (;;);
|
||||||
|
}
|
||||||
|
/*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
void prvHardwareSetup( void )
|
||||||
|
{
|
||||||
|
/* Port layer functions that need to be copied into the vector table. */
|
||||||
|
extern void xPortPendSVHandler( void );
|
||||||
|
extern void xPortSysTickHandler( void );
|
||||||
|
extern void vPortSVCHandler( void );
|
||||||
|
extern cyisraddress CyRamVectors[];
|
||||||
|
|
||||||
|
/* Install the OS Interrupt Handlers. */
|
||||||
|
CyRamVectors[11] = (cyisraddress)vPortSVCHandler;
|
||||||
|
CyRamVectors[14] = (cyisraddress)xPortPendSVHandler;
|
||||||
|
CyRamVectors[15] = (cyisraddress)xPortSysTickHandler;
|
||||||
|
|
||||||
|
/* Start-up the peripherals. */
|
||||||
|
|
||||||
|
/* Enable and clear the LCD Display. */
|
||||||
|
LCD_Character_Display_Start();
|
||||||
|
LCD_Character_Display_ClearDisplay();
|
||||||
|
LCD_Character_Display_Position(0,0);
|
||||||
|
LCD_Character_Display_PrintString("www.FreeRTOS.org ");
|
||||||
|
LCD_Character_Display_Position(1,0);
|
||||||
|
LCD_Character_Display_PrintString("CY8C5588AX-060 ");
|
||||||
|
|
||||||
|
/* Start the UART. */
|
||||||
|
UART_1_Start();
|
||||||
|
|
||||||
|
/* Initialise the LEDs. */
|
||||||
|
vParTestInitialise();
|
||||||
|
|
||||||
|
/* Start the PWM modules that drive the IntQueue tests. */
|
||||||
|
High_Frequency_PWM_0_Start();
|
||||||
|
High_Frequency_PWM_1_Start();
|
||||||
|
|
||||||
|
/* Start the timers for the Jitter test. */
|
||||||
|
Timer_20KHz_Start();
|
||||||
|
Timer_48MHz_Start();
|
||||||
|
}
|
||||||
|
/*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
void vCheckTask( void *pvParameters )
|
||||||
|
{
|
||||||
|
unsigned long ulRow = 0;
|
||||||
|
portTickType xDelay = 0;
|
||||||
|
unsigned short usErrorCode = 0;
|
||||||
|
unsigned long ulIteration = 0;
|
||||||
|
extern unsigned portSHORT usMaxJitter;
|
||||||
|
|
||||||
|
/* Intialise the sleeper. */
|
||||||
|
xDelay = xTaskGetTickCount();
|
||||||
|
|
||||||
|
for ( ;; )
|
||||||
|
{
|
||||||
|
/* Perform this check every mainCHECK_DELAY milliseconds. */
|
||||||
|
vTaskDelayUntil( &xDelay, mainCHECK_DELAY );
|
||||||
|
|
||||||
|
/* Check that all of the Demo tasks are still running. */
|
||||||
|
if ( pdTRUE != xAreBlockingQueuesStillRunning() )
|
||||||
|
{
|
||||||
|
usErrorCode |= 0x1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( pdTRUE != xAreBlockTimeTestTasksStillRunning() )
|
||||||
|
{
|
||||||
|
usErrorCode |= 0x2;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( pdTRUE != xAreCountingSemaphoreTasksStillRunning() )
|
||||||
|
{
|
||||||
|
usErrorCode |= 0x4;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( pdTRUE != xIsCreateTaskStillRunning() )
|
||||||
|
{
|
||||||
|
usErrorCode |= 0x8;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( pdTRUE != xAreDynamicPriorityTasksStillRunning() )
|
||||||
|
{
|
||||||
|
usErrorCode |= 0x10;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( pdTRUE != xAreMathsTaskStillRunning() )
|
||||||
|
{
|
||||||
|
usErrorCode |= 0x20;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( pdTRUE != xAreGenericQueueTasksStillRunning() )
|
||||||
|
{
|
||||||
|
usErrorCode |= 0x40;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( pdTRUE != xAreIntegerMathsTaskStillRunning() )
|
||||||
|
{
|
||||||
|
usErrorCode |= 0x80;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( pdTRUE != xArePollingQueuesStillRunning() )
|
||||||
|
{
|
||||||
|
usErrorCode |= 0x100;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( pdTRUE != xAreQueuePeekTasksStillRunning() )
|
||||||
|
{
|
||||||
|
usErrorCode |= 0x200;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( pdTRUE != xAreSemaphoreTasksStillRunning() )
|
||||||
|
{
|
||||||
|
usErrorCode |= 0x400;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( pdTRUE != xAreComTestTasksStillRunning() )
|
||||||
|
{
|
||||||
|
usErrorCode |= 0x800;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( pdTRUE != xAreIntQueueTasksStillRunning() )
|
||||||
|
{
|
||||||
|
usErrorCode |= 0x1000;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Clear the display. */
|
||||||
|
LCD_Character_Display_ClearDisplay();
|
||||||
|
if ( 0 == usErrorCode )
|
||||||
|
{
|
||||||
|
LCD_Character_Display_Position( (ulRow) & 0x1, 0);
|
||||||
|
LCD_Character_Display_PrintString("Pass: ");
|
||||||
|
LCD_Character_Display_PrintNumber(ulIteration++);
|
||||||
|
LCD_Character_Display_Position( (++ulRow) & 0x1, 0);
|
||||||
|
LCD_Character_Display_PrintString("Jitter(ns):");
|
||||||
|
LCD_Character_Display_PrintNumber((usMaxJitter * mainNS_PER_CLOCK));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
/* Do something to indicate the failure. */
|
||||||
|
LCD_Character_Display_Position( (ulRow) & 0x1, 0);
|
||||||
|
LCD_Character_Display_PrintString("Fail at: ");
|
||||||
|
LCD_Character_Display_PrintNumber(ulIteration);
|
||||||
|
LCD_Character_Display_Position( (++ulRow) & 0x1, 0);
|
||||||
|
LCD_Character_Display_PrintString("Error: 0x");
|
||||||
|
LCD_Character_Display_PrintHexUint16(usErrorCode);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
void vApplicationStackOverflowHook( xTaskHandle *pxTask, signed char *pcTaskName )
|
||||||
|
{
|
||||||
|
/* The stack space has been execeeded for a task, considering allocating more. */
|
||||||
|
for (;;);
|
||||||
|
}
|
||||||
|
/*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
void vApplicationMallocFailedHook( void )
|
||||||
|
{
|
||||||
|
/* The heap space has been execeeded. */
|
||||||
|
for (;;);
|
||||||
|
}
|
||||||
|
/*---------------------------------------------------------------------------*/
|
@ -0,0 +1,22 @@
|
|||||||
|
<?xml version="1.0"?>
|
||||||
|
<CyXmlSerializer>
|
||||||
|
<!--This file is machine generated and read. It is not intended to be edited by hand.-->
|
||||||
|
<!--Due to this, there is no schema for this file.-->
|
||||||
|
<CyGuid_2867d519-54d2-4c01-9830-c51cb08bc3dd type_name="CyDesigner.Common.ProjMgmt.Model.CyPrjMgmtWrkspc" version="5" name="FreeRTOS_Demo Workspace" persistent="" config="Debug" platform="5bca58cd-5542-421c-b08d-9513dbb687fd">
|
||||||
|
<current_project name="./FreeRTOS_Demo.cydsn/FreeRTOS_Demo.cyprj" />
|
||||||
|
<wrkspc_folders />
|
||||||
|
<files />
|
||||||
|
<projects>
|
||||||
|
<name_val_pair name="FreeRTOS_Demo" v="./FreeRTOS_Demo.cydsn/FreeRTOS_Demo.cyprj" />
|
||||||
|
</projects>
|
||||||
|
<workspace_id v="dd096e2f-e89d-42b3-a9f0-d771ecfa166f" />
|
||||||
|
<WriteAppVersionLastSavedWith v="1.0.0.7006" />
|
||||||
|
<WriteAppMarketingVersionLastSavedWith v="1.0 Beta 5.0" />
|
||||||
|
<CyGuid_dcbd9771-0334-43dc-9cc3-fe99dc3c5316 type_name="CyDesigner.Common.ProjMgmt.Model.CyPrjDependencyList" version="3">
|
||||||
|
<wrkspc_dependencies />
|
||||||
|
</CyGuid_dcbd9771-0334-43dc-9cc3-fe99dc3c5316>
|
||||||
|
<CyGuid_63b68103-67f5-4406-8da6-5c8625765b82 type_name="CyDesigner.Common.ProjMgmt.Model.CyIgnoredSystemDepsList" version="1">
|
||||||
|
<wrkspc_dependencies />
|
||||||
|
</CyGuid_63b68103-67f5-4406-8da6-5c8625765b82>
|
||||||
|
</CyGuid_2867d519-54d2-4c01-9830-c51cb08bc3dd>
|
||||||
|
</CyXmlSerializer>
|
@ -0,0 +1,120 @@
|
|||||||
|
/*
|
||||||
|
FreeRTOS V6.1.0 - 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 books - available as PDF or paperback *
|
||||||
|
* *
|
||||||
|
* "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
|
||||||
|
|
||||||
|
/*-----------------------------------------------------------
|
||||||
|
* 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.
|
||||||
|
*----------------------------------------------------------*/
|
||||||
|
|
||||||
|
#include <device.h>
|
||||||
|
|
||||||
|
#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 ) BCLK__BUS_CLK__HZ )
|
||||||
|
#define configTICK_RATE_HZ ( ( portTickType ) 1000 )
|
||||||
|
#define configMINIMAL_STACK_SIZE ( ( unsigned short ) 100 )
|
||||||
|
#define configTOTAL_HEAP_SIZE ( ( size_t ) ( 32 * 1024 ) )
|
||||||
|
#define configMAX_TASK_NAME_LEN ( 12 )
|
||||||
|
#define configUSE_TRACE_FACILITY 0
|
||||||
|
#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 1
|
||||||
|
#define configUSE_ALTERNATIVE_API 0
|
||||||
|
#define configCHECK_FOR_STACK_OVERFLOW 2
|
||||||
|
#define configUSE_RECURSIVE_MUTEXES 1
|
||||||
|
#define configQUEUE_REGISTRY_SIZE 10
|
||||||
|
#define configGENERATE_RUN_TIME_STATS 0
|
||||||
|
#define configUSE_MALLOC_FAILED_HOOK 1
|
||||||
|
|
||||||
|
/* 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
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Configure the number of priority bits. This is normally
|
||||||
|
* __NVIC_PRIO_BITS but PSoC Creator beta 5 contained a larger
|
||||||
|
* value for the priority than is implemented in the hardware so
|
||||||
|
* set it here to what the data sheet describes.
|
||||||
|
*/
|
||||||
|
#define configPRIO_BITS 3 /* 8 priority levels */
|
||||||
|
|
||||||
|
/* The lowest priority. */
|
||||||
|
#define configKERNEL_INTERRUPT_PRIORITY ( 7 << (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 */
|
Binary file not shown.
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,98 @@
|
|||||||
|
/*
|
||||||
|
FreeRTOS V6.1.0 - 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 books - available as PDF or paperback *
|
||||||
|
* *
|
||||||
|
* "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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <device.h>
|
||||||
|
#include "FreeRTOS.h"
|
||||||
|
#include "task.h"
|
||||||
|
/*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
extern portBASE_TYPE xFirstTimerHandler( void );
|
||||||
|
extern portBASE_TYPE xSecondTimerHandler( void );
|
||||||
|
/*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
CY_ISR_PROTO(vHighFrequencyFirstISR);
|
||||||
|
CY_ISR_PROTO(vHighFrequencySecondISR);
|
||||||
|
/*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Installs and starts the ISRs that drive the Interupt Queue Tests.
|
||||||
|
*/
|
||||||
|
void vInitialiseTimerForIntQueueTest( void )
|
||||||
|
{
|
||||||
|
taskENTER_CRITICAL();
|
||||||
|
{
|
||||||
|
/* Initialise and start the First Timer ISR. */
|
||||||
|
isr_High_Frequency_2000Hz_ClearPending();
|
||||||
|
isr_High_Frequency_2000Hz_StartEx((cyisraddress)vHighFrequencyFirstISR);
|
||||||
|
|
||||||
|
/* Initialise and start the Second Timer ISR. */
|
||||||
|
isr_High_Frequency_2001Hz_ClearPending();
|
||||||
|
isr_High_Frequency_2001Hz_StartEx((cyisraddress)vHighFrequencySecondISR);
|
||||||
|
}
|
||||||
|
taskEXIT_CRITICAL();
|
||||||
|
}
|
||||||
|
/*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
CY_ISR(vHighFrequencyFirstISR)
|
||||||
|
{
|
||||||
|
/* Call back into the test code and context switch if necessary. */
|
||||||
|
portEND_SWITCHING_ISR( xFirstTimerHandler() );
|
||||||
|
}
|
||||||
|
/*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
CY_ISR(vHighFrequencySecondISR)
|
||||||
|
{
|
||||||
|
/* Call back into the test code and context switch if necessary. */
|
||||||
|
portEND_SWITCHING_ISR( xSecondTimerHandler() );
|
||||||
|
}
|
||||||
|
/*---------------------------------------------------------------------------*/
|
@ -0,0 +1,62 @@
|
|||||||
|
/*
|
||||||
|
FreeRTOS V6.1.0 - 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 books - available as PDF or paperback *
|
||||||
|
* *
|
||||||
|
* "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 INT_QUEUE_TIMER_H_
|
||||||
|
#define INT_QUEUE_TIMER_H_
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Install and start the ISRs that drive the Interupt Queue Tests.
|
||||||
|
*/
|
||||||
|
void vInitialiseTimerForIntQueueTest( void );
|
||||||
|
|
||||||
|
#endif /* INT_QUEUE_TIMER_H_ */
|
@ -0,0 +1,117 @@
|
|||||||
|
/*
|
||||||
|
FreeRTOS V6.1.0 - 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 books - available as PDF or paperback *
|
||||||
|
* *
|
||||||
|
* "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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <device.h>
|
||||||
|
|
||||||
|
#include "FreeRTOS.h"
|
||||||
|
#include "task.h"
|
||||||
|
#include "partest.h"
|
||||||
|
/*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
#define partstMAX_LED ( 4 )
|
||||||
|
/*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
static volatile char cLedOutput[ partstMAX_LED ];
|
||||||
|
/*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
void vParTestInitialise( void )
|
||||||
|
{
|
||||||
|
long lIndex;
|
||||||
|
for ( lIndex = 0; lIndex < partstMAX_LED; lIndex++ )
|
||||||
|
{
|
||||||
|
cLedOutput[ lIndex ] = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
void vParTestSetLED( unsigned portBASE_TYPE uxLED, signed portBASE_TYPE xValue )
|
||||||
|
{
|
||||||
|
taskENTER_CRITICAL();
|
||||||
|
{
|
||||||
|
switch ( uxLED )
|
||||||
|
{
|
||||||
|
case 0:
|
||||||
|
Pin_LED_0_Write( xValue & 0x1 );
|
||||||
|
break;
|
||||||
|
case 1:
|
||||||
|
Pin_LED_1_Write( xValue & 0x1 );
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
Pin_LED_2_Write( xValue & 0x1 );
|
||||||
|
break;
|
||||||
|
case 3:
|
||||||
|
Pin_LED_3_Write( xValue & 0x1 );
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
/* Do nothing. */
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
taskEXIT_CRITICAL();
|
||||||
|
|
||||||
|
/* Record the output for the sake of toggling. */
|
||||||
|
if ( uxLED < partstMAX_LED )
|
||||||
|
{
|
||||||
|
cLedOutput[ uxLED ] = ( xValue & 0x1 );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
void vParTestToggleLED( unsigned portBASE_TYPE uxLED )
|
||||||
|
{
|
||||||
|
if ( uxLED < partstMAX_LED )
|
||||||
|
{
|
||||||
|
vParTestSetLED( uxLED, !cLedOutput[ uxLED ] );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/*---------------------------------------------------------------------------*/
|
@ -0,0 +1,226 @@
|
|||||||
|
/*
|
||||||
|
FreeRTOS V6.1.0 - 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 books - available as PDF or paperback *
|
||||||
|
* *
|
||||||
|
* "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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <device.h>
|
||||||
|
#include "FreeRTOS.h"
|
||||||
|
#include "queue.h"
|
||||||
|
#include "task.h"
|
||||||
|
#include "serial.h"
|
||||||
|
/*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
#define serialSTRING_DELAY_TICKS ( portMAX_DELAY )
|
||||||
|
/*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
CY_ISR_PROTO(vUartRxISR);
|
||||||
|
CY_ISR_PROTO(vUartTxISR);
|
||||||
|
/*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
static xQueueHandle xSerialTxQueue = NULL;
|
||||||
|
static xQueueHandle xSerialRxQueue = NULL;
|
||||||
|
/*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
xComPortHandle xSerialPortInitMinimal( unsigned long ulWantedBaud, unsigned portBASE_TYPE uxQueueLength )
|
||||||
|
{
|
||||||
|
/* Configure Rx. */
|
||||||
|
xSerialRxQueue = xQueueCreate( uxQueueLength, sizeof( signed char ) );
|
||||||
|
isr_UART1_RX_BYTE_RECEIVED_ClearPending();
|
||||||
|
isr_UART1_RX_BYTE_RECEIVED_StartEx(vUartRxISR);
|
||||||
|
|
||||||
|
/* Configure Tx */
|
||||||
|
xSerialTxQueue = xQueueCreate( uxQueueLength, sizeof( signed char ) );
|
||||||
|
isr_UART1_TX_BYTE_COMPLETE_ClearPending() ;
|
||||||
|
isr_UART1_TX_BYTE_COMPLETE_StartEx(vUartTxISR);
|
||||||
|
|
||||||
|
/* Clear the interrupt modes for the Tx for the time being. */
|
||||||
|
UART_1_SetTxInterruptMode( 0 );
|
||||||
|
|
||||||
|
/* Both configured successfully. */
|
||||||
|
return (xComPortHandle)( xSerialTxQueue && xSerialRxQueue );
|
||||||
|
}
|
||||||
|
/*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
void vSerialPutString( xComPortHandle pxPort, const signed char * const pcString, unsigned short usStringLength )
|
||||||
|
{
|
||||||
|
unsigned short usIndex = 0;
|
||||||
|
for ( usIndex = 0; usIndex < usStringLength; usIndex++ )
|
||||||
|
{
|
||||||
|
/* Check for pre-mature end of line. */
|
||||||
|
if ( '\0' == pcString[ usIndex ] )
|
||||||
|
{
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Send out, one character at a time. */
|
||||||
|
if ( pdTRUE != xSerialPutChar( NULL, pcString[ usIndex ], serialSTRING_DELAY_TICKS ) )
|
||||||
|
{
|
||||||
|
/* Failed to send, this will be picked up in the receive comtest task. */
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
signed portBASE_TYPE xSerialGetChar( xComPortHandle pxPort, signed char *pcRxedChar, portTickType xBlockTime )
|
||||||
|
{
|
||||||
|
portBASE_TYPE xReturn = pdFALSE;
|
||||||
|
if ( pdTRUE == xQueueReceive( xSerialRxQueue, pcRxedChar, xBlockTime ) )
|
||||||
|
{
|
||||||
|
/* Picked up a character. */
|
||||||
|
xReturn = pdTRUE;
|
||||||
|
}
|
||||||
|
return xReturn;
|
||||||
|
}
|
||||||
|
/*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
signed portBASE_TYPE xSerialPutChar( xComPortHandle pxPort, signed char cOutChar, portTickType xBlockTime )
|
||||||
|
{
|
||||||
|
portBASE_TYPE xReturn = pdFALSE;
|
||||||
|
|
||||||
|
/* The ISR is processing characters is so just add to the end of the queue. */
|
||||||
|
if ( pdTRUE == xQueueSend( xSerialTxQueue, &cOutChar, xBlockTime ) )
|
||||||
|
{
|
||||||
|
xReturn = pdTRUE;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
/* The queue is probably full. */
|
||||||
|
xReturn = pdFALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Make sure that the interrupt will fire in the case where:
|
||||||
|
* Currently sending so the Tx Complete will fire.
|
||||||
|
* Not sending so the Empty will fire.
|
||||||
|
*/
|
||||||
|
taskENTER_CRITICAL();
|
||||||
|
UART_1_SetTxInterruptMode( UART_1_TX_STS_COMPLETE | UART_1_TX_STS_FIFO_EMPTY );
|
||||||
|
taskEXIT_CRITICAL();
|
||||||
|
|
||||||
|
return xReturn;
|
||||||
|
}
|
||||||
|
/*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
CY_ISR(vUartRxISR)
|
||||||
|
{
|
||||||
|
portBASE_TYPE xTaskWoken = pdFALSE;
|
||||||
|
volatile unsigned char ucStatus = 0;
|
||||||
|
signed char cInChar = 0;
|
||||||
|
unsigned long ulMask = 0;
|
||||||
|
|
||||||
|
/* Read the status to acknowledge. */
|
||||||
|
ucStatus = UART_1_ReadRxStatus();
|
||||||
|
|
||||||
|
/* Only interested in a character being received. */
|
||||||
|
if ( 0 != ( ucStatus & UART_1_RX_STS_FIFO_NOTEMPTY ) )
|
||||||
|
{
|
||||||
|
/* Get the character. */
|
||||||
|
cInChar = UART_1_GetChar();
|
||||||
|
|
||||||
|
/* Mask off the other RTOS interrupts to interact with the queue. */
|
||||||
|
ulMask = portSET_INTERRUPT_MASK_FROM_ISR();
|
||||||
|
{
|
||||||
|
/* Try to deliver the character. */
|
||||||
|
if ( pdTRUE != xQueueSendFromISR( xSerialRxQueue, &cInChar, &xTaskWoken ) )
|
||||||
|
{
|
||||||
|
/* Run out of space. */
|
||||||
|
}
|
||||||
|
}
|
||||||
|
portCLEAR_INTERRUPT_MASK_FROM_ISR( ulMask );
|
||||||
|
}
|
||||||
|
|
||||||
|
/* If we delivered the character then a context switch might be required. */
|
||||||
|
portEND_SWITCHING_ISR( xTaskWoken );
|
||||||
|
}
|
||||||
|
/*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
CY_ISR(vUartTxISR)
|
||||||
|
{
|
||||||
|
portBASE_TYPE xTaskWoken = pdFALSE;
|
||||||
|
volatile unsigned char ucStatus = 0;
|
||||||
|
signed char cOutChar = 0;
|
||||||
|
unsigned long ulMask = 0;
|
||||||
|
|
||||||
|
/* Read the status to acknowledge. */
|
||||||
|
ucStatus = UART_1_ReadTxStatus();
|
||||||
|
|
||||||
|
/* Check to see whether this is a genuine interrupt. */
|
||||||
|
if ( ( 0 != ( ucStatus & UART_1_TX_STS_COMPLETE ) )
|
||||||
|
|| ( 0 != ( ucStatus & UART_1_TX_STS_FIFO_EMPTY ) ) )
|
||||||
|
{
|
||||||
|
/* Mask off the other RTOS interrupts to interact with the queue. */
|
||||||
|
ulMask = portSET_INTERRUPT_MASK_FROM_ISR();
|
||||||
|
{
|
||||||
|
if ( pdTRUE == xQueueReceiveFromISR( xSerialTxQueue, &cOutChar, &xTaskWoken ) )
|
||||||
|
{
|
||||||
|
/* Send the next character. */
|
||||||
|
UART_1_PutChar( cOutChar );
|
||||||
|
|
||||||
|
/* If we are firing, then the only interrupt we are interested in
|
||||||
|
* is the Complete. The application code will add the Empty interrupt
|
||||||
|
* when there is something else to be done.
|
||||||
|
*/
|
||||||
|
UART_1_SetTxInterruptMode( UART_1_TX_STS_COMPLETE );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
/* There is no work left so disable the interrupt
|
||||||
|
* until the application puts more into the queue.
|
||||||
|
*/
|
||||||
|
UART_1_SetTxInterruptMode( 0 );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
portCLEAR_INTERRUPT_MASK_FROM_ISR( ulMask );
|
||||||
|
}
|
||||||
|
|
||||||
|
/* If we delivered the character then a context switch might be required. */
|
||||||
|
portEND_SWITCHING_ISR( xTaskWoken );
|
||||||
|
}
|
||||||
|
/*---------------------------------------------------------------------------*/
|
@ -0,0 +1,128 @@
|
|||||||
|
/*
|
||||||
|
FreeRTOS V6.1.0 - 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 books - available as PDF or paperback *
|
||||||
|
* *
|
||||||
|
* "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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* High speed timer test as described in main.c. */
|
||||||
|
#include <device.h>
|
||||||
|
|
||||||
|
/* Scheduler includes. */
|
||||||
|
#include "FreeRTOS.h"
|
||||||
|
|
||||||
|
/* The set frequency of the interrupt. Deviations from this are measured as
|
||||||
|
the jitter. */
|
||||||
|
#define timerINTERRUPT_FREQUENCY ( ( unsigned portSHORT ) 20000 )
|
||||||
|
|
||||||
|
/* The expected time between each of the timer interrupts - if the jitter was
|
||||||
|
zero. */
|
||||||
|
#define timerEXPECTED_DIFFERENCE_VALUE ( configCPU_CLOCK_HZ / timerINTERRUPT_FREQUENCY )
|
||||||
|
|
||||||
|
/* The number of interrupts to pass before we start looking at the jitter. */
|
||||||
|
#define timerSETTLE_TIME 5
|
||||||
|
/*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Configures the two timers used to perform the test.
|
||||||
|
*/
|
||||||
|
void vSetupTimerTest( void );
|
||||||
|
|
||||||
|
/* Interrupt handler in which the jitter is measured. */
|
||||||
|
CY_ISR_PROTO(vTimer20KHzISR);
|
||||||
|
|
||||||
|
/* Stores the value of the maximum recorded jitter between interrupts. */
|
||||||
|
volatile unsigned portSHORT usMaxJitter = 0;
|
||||||
|
/*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
void vSetupTimerTest( void )
|
||||||
|
{
|
||||||
|
/* Install the ISR. */
|
||||||
|
isrTimer_20KHz_TC_StartEx(vTimer20KHzISR);
|
||||||
|
}
|
||||||
|
/*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
CY_ISR(vTimer20KHzISR)
|
||||||
|
{
|
||||||
|
static unsigned short usLastCount = 0, usSettleCount = 0, usMaxDifference = 0;
|
||||||
|
unsigned short usThisCount, usDifference;
|
||||||
|
|
||||||
|
/* Capture the free running timer value as we enter the interrupt. */
|
||||||
|
usThisCount = Timer_48MHz_ReadCounter();
|
||||||
|
|
||||||
|
if( usSettleCount >= timerSETTLE_TIME )
|
||||||
|
{
|
||||||
|
/* What is the difference between the timer value in this interrupt
|
||||||
|
and the value from the last interrupt. Timer counts down. */
|
||||||
|
usDifference = usLastCount + ~usThisCount + 1;
|
||||||
|
|
||||||
|
/* Store the difference in the timer values if it is larger than the
|
||||||
|
currently stored largest value. The difference over and above the
|
||||||
|
expected difference will give the 'jitter' in the processing of these
|
||||||
|
interrupts. */
|
||||||
|
if( usDifference > usMaxDifference )
|
||||||
|
{
|
||||||
|
usMaxDifference = usDifference;
|
||||||
|
|
||||||
|
/* Calculate the Jitter based on the difference we expect. */
|
||||||
|
usMaxJitter = usMaxDifference - timerEXPECTED_DIFFERENCE_VALUE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
/* Don't bother storing any values for the first couple of
|
||||||
|
interrupts. */
|
||||||
|
usSettleCount++;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Remember what the timer value was this time through, so we can calculate
|
||||||
|
the difference the next time through. */
|
||||||
|
usLastCount = usThisCount;
|
||||||
|
}
|
||||||
|
/*---------------------------------------------------------------------------*/
|
Binary file not shown.
@ -0,0 +1,20 @@
|
|||||||
|
/*******************************************************************************
|
||||||
|
* Copyright 2009, Cypress Semiconductor Corporation. All rights reserved.
|
||||||
|
* You may use this file only in accordance with the license, terms, conditions,
|
||||||
|
* disclaimers, and limitations in the end user license agreement accompanying
|
||||||
|
* the software package with which this file was provided.
|
||||||
|
********************************************************************************/
|
||||||
|
/* ========================================
|
||||||
|
*
|
||||||
|
* This file is automatically generated by PSoC Creator
|
||||||
|
* and should not be edited by hand.
|
||||||
|
*
|
||||||
|
* This file is necessary for your project to build.
|
||||||
|
* Please do not delete it.
|
||||||
|
*
|
||||||
|
* ========================================
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <project.h>
|
||||||
|
|
||||||
|
/*[]*/
|
@ -0,0 +1,347 @@
|
|||||||
|
/*
|
||||||
|
FreeRTOS V6.1.0 - 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 books - available as PDF or paperback *
|
||||||
|
* *
|
||||||
|
* "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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <device.h>
|
||||||
|
|
||||||
|
/* RTOS includes. */
|
||||||
|
#include "FreeRTOS.h"
|
||||||
|
#include "task.h"
|
||||||
|
#include "queue.h"
|
||||||
|
#include "semphr.h"
|
||||||
|
|
||||||
|
/* Common Demo includes. */
|
||||||
|
#include "serial.h"
|
||||||
|
#include "BlockQ.h"
|
||||||
|
#include "blocktim.h"
|
||||||
|
#include "comtest.h"
|
||||||
|
#include "countsem.h"
|
||||||
|
#include "death.h"
|
||||||
|
#include "dynamic.h"
|
||||||
|
#include "flash.h"
|
||||||
|
#include "flop.h"
|
||||||
|
#include "GenQTest.h"
|
||||||
|
#include "integer.h"
|
||||||
|
#include "IntQueue.h"
|
||||||
|
#include "mevents.h"
|
||||||
|
#include "partest.h"
|
||||||
|
#include "PollQ.h"
|
||||||
|
#include "print.h"
|
||||||
|
#include "QPeek.h"
|
||||||
|
#include "semtest.h"
|
||||||
|
/*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
/* The time between cycles of the 'check' functionality (defined within the
|
||||||
|
tick hook. */
|
||||||
|
#define mainCHECK_DELAY ( ( portTickType ) 5000 / portTICK_RATE_MS )
|
||||||
|
#define mainCOM_LED ( 3 )
|
||||||
|
|
||||||
|
/* The number of nano seconds between each processor clock. */
|
||||||
|
#define mainNS_PER_CLOCK ( ( unsigned portLONG ) ( ( 1.0 / ( double ) configCPU_CLOCK_HZ ) * 1000000000.0 ) )
|
||||||
|
|
||||||
|
/* Task priorities. */
|
||||||
|
#define mainQUEUE_POLL_PRIORITY ( tskIDLE_PRIORITY + 2 )
|
||||||
|
#define mainCHECK_TASK_PRIORITY ( tskIDLE_PRIORITY + 3 )
|
||||||
|
#define mainSEM_TEST_PRIORITY ( tskIDLE_PRIORITY + 1 )
|
||||||
|
#define mainBLOCK_Q_PRIORITY ( tskIDLE_PRIORITY + 2 )
|
||||||
|
#define mainCREATOR_TASK_PRIORITY ( tskIDLE_PRIORITY + 3 )
|
||||||
|
#define mainINTEGER_TASK_PRIORITY ( tskIDLE_PRIORITY )
|
||||||
|
#define mainGEN_QUEUE_TASK_PRIORITY ( tskIDLE_PRIORITY )
|
||||||
|
#define mainCOM_TEST_TASK_PRIORITY ( tskIDLE_PRIORITY + 1 )
|
||||||
|
#define mainFLASH_TEST_TASK_PRIORITY ( tskIDLE_PRIORITY + 2 )
|
||||||
|
/*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Configures the timers and interrupts for the fast interrupt test as
|
||||||
|
* described at the top of this file.
|
||||||
|
*/
|
||||||
|
extern void vSetupTimerTest( void );
|
||||||
|
/*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The Check task periodical interrogates each of the running tests to
|
||||||
|
* ensure that they are still executing correctly.
|
||||||
|
* If all the tests pass, then the LCD is updated with Pass, the number of
|
||||||
|
* iterations and the Jitter time calculated but the Fast Interrupt Test.
|
||||||
|
* If any one of the tests fail, it is indicated with an error code printed on
|
||||||
|
* the display. This indicator won't disappear until the device is reset.
|
||||||
|
*/
|
||||||
|
void vCheckTask( void *pvParameters );
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Installs the RTOS interrupt handlers and starts the peripherals.
|
||||||
|
*/
|
||||||
|
static void prvHardwareSetup( void );
|
||||||
|
/*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
void main( void )
|
||||||
|
{
|
||||||
|
unsigned long ulLed = 0;
|
||||||
|
unsigned long ulIteration = 0;
|
||||||
|
|
||||||
|
/* Place your initialization/startup code here (e.g. MyInst_Start()) */
|
||||||
|
prvHardwareSetup();
|
||||||
|
|
||||||
|
/* Poll the switch connected to P1[7]
|
||||||
|
* to prevent the Soak test from (re)starting.
|
||||||
|
*/
|
||||||
|
while ( 0 != Startup_Release_Switch_Read() )
|
||||||
|
{
|
||||||
|
if ( 100000 <= ulIteration++ )
|
||||||
|
{
|
||||||
|
vParTestToggleLED( ulLed++ );
|
||||||
|
ulLed = ulLed % 4;
|
||||||
|
ulIteration = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Reset the LEDS. */
|
||||||
|
for ( ulLed = 0; ulLed < 4; ulLed++ )
|
||||||
|
{
|
||||||
|
vParTestSetLED( ulLed, pdFALSE );
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Start the standard demo tasks. These are just here to exercise the
|
||||||
|
kernel port and provide examples of how the FreeRTOS API can be used. */
|
||||||
|
vStartBlockingQueueTasks( mainBLOCK_Q_PRIORITY );
|
||||||
|
vCreateBlockTimeTasks();
|
||||||
|
vStartCountingSemaphoreTasks();
|
||||||
|
vStartDynamicPriorityTasks();
|
||||||
|
vStartMathTasks( mainINTEGER_TASK_PRIORITY );
|
||||||
|
vStartGenericQueueTasks( mainGEN_QUEUE_TASK_PRIORITY );
|
||||||
|
vStartIntegerMathTasks( mainINTEGER_TASK_PRIORITY );
|
||||||
|
vStartPolledQueueTasks( mainQUEUE_POLL_PRIORITY );
|
||||||
|
vStartQueuePeekTasks();
|
||||||
|
vStartSemaphoreTasks( mainSEM_TEST_PRIORITY );
|
||||||
|
vStartLEDFlashTasks( mainFLASH_TEST_TASK_PRIORITY );
|
||||||
|
vAltStartComTestTasks( mainCOM_TEST_TASK_PRIORITY, 57600, mainCOM_LED );
|
||||||
|
vStartInterruptQueueTasks();
|
||||||
|
|
||||||
|
/* Start the error checking task. */
|
||||||
|
(void)xTaskCreate( vCheckTask, ( signed portCHAR * ) "Check", configMINIMAL_STACK_SIZE, NULL, mainCHECK_TASK_PRIORITY, NULL );
|
||||||
|
|
||||||
|
/* Configure the timers used by the fast interrupt timer test. */
|
||||||
|
vSetupTimerTest();
|
||||||
|
|
||||||
|
/* The suicide tasks must be created last as they need to know how many
|
||||||
|
tasks were running prior to their creation in order to ascertain whether
|
||||||
|
or not the correct/expected number of tasks are running at any given time. */
|
||||||
|
vCreateSuicidalTasks( mainCREATOR_TASK_PRIORITY );
|
||||||
|
|
||||||
|
/* Will only get here if there was insufficient memory to create the idle
|
||||||
|
task. The idle task is created within vTaskStartScheduler(). */
|
||||||
|
vTaskStartScheduler();
|
||||||
|
|
||||||
|
/* Should never reach here. */
|
||||||
|
for (;;);
|
||||||
|
}
|
||||||
|
/*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
void prvHardwareSetup( void )
|
||||||
|
{
|
||||||
|
/* Port layer functions that need to be copied into the vector table. */
|
||||||
|
extern void xPortPendSVHandler( void );
|
||||||
|
extern void xPortSysTickHandler( void );
|
||||||
|
extern void vPortSVCHandler( void );
|
||||||
|
extern cyisraddress CyRamVectors[];
|
||||||
|
|
||||||
|
/* Install the OS Interrupt Handlers. */
|
||||||
|
CyRamVectors[11] = (cyisraddress)vPortSVCHandler;
|
||||||
|
CyRamVectors[14] = (cyisraddress)xPortPendSVHandler;
|
||||||
|
CyRamVectors[15] = (cyisraddress)xPortSysTickHandler;
|
||||||
|
|
||||||
|
/* Start-up the peripherals. */
|
||||||
|
|
||||||
|
/* Enable and clear the LCD Display. */
|
||||||
|
LCD_Character_Display_Start();
|
||||||
|
LCD_Character_Display_ClearDisplay();
|
||||||
|
LCD_Character_Display_Position(0,0);
|
||||||
|
LCD_Character_Display_PrintString("www.FreeRTOS.org ");
|
||||||
|
LCD_Character_Display_Position(1,0);
|
||||||
|
LCD_Character_Display_PrintString("CY8C5588AX-060 ");
|
||||||
|
|
||||||
|
/* Start the UART. */
|
||||||
|
UART_1_Start();
|
||||||
|
|
||||||
|
/* Initialise the LEDs. */
|
||||||
|
vParTestInitialise();
|
||||||
|
|
||||||
|
/* Start the PWM modules that drive the IntQueue tests. */
|
||||||
|
High_Frequency_PWM_0_Start();
|
||||||
|
High_Frequency_PWM_1_Start();
|
||||||
|
|
||||||
|
/* Start the timers for the Jitter test. */
|
||||||
|
Timer_20KHz_Start();
|
||||||
|
Timer_48MHz_Start();
|
||||||
|
}
|
||||||
|
/*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
void vCheckTask( void *pvParameters )
|
||||||
|
{
|
||||||
|
unsigned long ulRow = 0;
|
||||||
|
portTickType xDelay = 0;
|
||||||
|
unsigned short usErrorCode = 0;
|
||||||
|
unsigned long ulIteration = 0;
|
||||||
|
extern unsigned portSHORT usMaxJitter;
|
||||||
|
|
||||||
|
/* Intialise the sleeper. */
|
||||||
|
xDelay = xTaskGetTickCount();
|
||||||
|
|
||||||
|
for ( ;; )
|
||||||
|
{
|
||||||
|
/* Perform this check every mainCHECK_DELAY milliseconds. */
|
||||||
|
vTaskDelayUntil( &xDelay, mainCHECK_DELAY );
|
||||||
|
|
||||||
|
/* Check that all of the Demo tasks are still running. */
|
||||||
|
if ( pdTRUE != xAreBlockingQueuesStillRunning() )
|
||||||
|
{
|
||||||
|
usErrorCode |= 0x1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( pdTRUE != xAreBlockTimeTestTasksStillRunning() )
|
||||||
|
{
|
||||||
|
usErrorCode |= 0x2;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( pdTRUE != xAreCountingSemaphoreTasksStillRunning() )
|
||||||
|
{
|
||||||
|
usErrorCode |= 0x4;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( pdTRUE != xIsCreateTaskStillRunning() )
|
||||||
|
{
|
||||||
|
usErrorCode |= 0x8;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( pdTRUE != xAreDynamicPriorityTasksStillRunning() )
|
||||||
|
{
|
||||||
|
usErrorCode |= 0x10;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( pdTRUE != xAreMathsTaskStillRunning() )
|
||||||
|
{
|
||||||
|
usErrorCode |= 0x20;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( pdTRUE != xAreGenericQueueTasksStillRunning() )
|
||||||
|
{
|
||||||
|
usErrorCode |= 0x40;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( pdTRUE != xAreIntegerMathsTaskStillRunning() )
|
||||||
|
{
|
||||||
|
usErrorCode |= 0x80;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( pdTRUE != xArePollingQueuesStillRunning() )
|
||||||
|
{
|
||||||
|
usErrorCode |= 0x100;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( pdTRUE != xAreQueuePeekTasksStillRunning() )
|
||||||
|
{
|
||||||
|
usErrorCode |= 0x200;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( pdTRUE != xAreSemaphoreTasksStillRunning() )
|
||||||
|
{
|
||||||
|
usErrorCode |= 0x400;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( pdTRUE != xAreComTestTasksStillRunning() )
|
||||||
|
{
|
||||||
|
usErrorCode |= 0x800;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( pdTRUE != xAreIntQueueTasksStillRunning() )
|
||||||
|
{
|
||||||
|
usErrorCode |= 0x1000;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Clear the display. */
|
||||||
|
LCD_Character_Display_ClearDisplay();
|
||||||
|
if ( 0 == usErrorCode )
|
||||||
|
{
|
||||||
|
LCD_Character_Display_Position( (ulRow) & 0x1, 0);
|
||||||
|
LCD_Character_Display_PrintString("Pass: ");
|
||||||
|
LCD_Character_Display_PrintNumber(ulIteration++);
|
||||||
|
LCD_Character_Display_Position( (++ulRow) & 0x1, 0);
|
||||||
|
LCD_Character_Display_PrintString("Jitter(ns):");
|
||||||
|
LCD_Character_Display_PrintNumber((usMaxJitter * mainNS_PER_CLOCK));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
/* Do something to indicate the failure. */
|
||||||
|
LCD_Character_Display_Position( (ulRow) & 0x1, 0);
|
||||||
|
LCD_Character_Display_PrintString("Fail at: ");
|
||||||
|
LCD_Character_Display_PrintNumber(ulIteration);
|
||||||
|
LCD_Character_Display_Position( (++ulRow) & 0x1, 0);
|
||||||
|
LCD_Character_Display_PrintString("Error: 0x");
|
||||||
|
LCD_Character_Display_PrintHexUint16(usErrorCode);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
void vApplicationStackOverflowHook( xTaskHandle *pxTask, signed char *pcTaskName )
|
||||||
|
{
|
||||||
|
/* The stack space has been execeeded for a task, considering allocating more. */
|
||||||
|
for (;;);
|
||||||
|
}
|
||||||
|
/*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
void vApplicationMallocFailedHook( void )
|
||||||
|
{
|
||||||
|
/* The heap space has been execeeded. */
|
||||||
|
for (;;);
|
||||||
|
}
|
||||||
|
/*---------------------------------------------------------------------------*/
|
Loading…
Reference in New Issue