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