Renamed to remove the Fx3 from the directory name.
parent
37402a9960
commit
33597ce971
@ -0,0 +1,147 @@
|
||||
/*
|
||||
FreeRTOS.org V5.1.1 - Copyright (C) 2003-2008 Richard Barry.
|
||||
|
||||
This file is part of the FreeRTOS.org distribution.
|
||||
|
||||
FreeRTOS.org is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
FreeRTOS.org is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with FreeRTOS.org; if not, write to the Free Software
|
||||
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
|
||||
A special exception to the GPL can be applied should you wish to distribute
|
||||
a combined work that includes FreeRTOS.org, without being obliged to provide
|
||||
the source code for any proprietary components. See the licensing section
|
||||
of http://www.FreeRTOS.org for full details of how and when the exception
|
||||
can be applied.
|
||||
|
||||
***************************************************************************
|
||||
***************************************************************************
|
||||
* *
|
||||
* SAVE TIME AND MONEY! We can port FreeRTOS.org to your own hardware, *
|
||||
* and even write all or part of your application on your behalf. *
|
||||
* See http://www.OpenRTOS.com for details of the services we provide to *
|
||||
* expedite your project. *
|
||||
* *
|
||||
***************************************************************************
|
||||
***************************************************************************
|
||||
|
||||
Please ensure to read the configuration and relevant port sections of the
|
||||
online documentation.
|
||||
|
||||
http://www.FreeRTOS.org - Documentation, latest information, license and
|
||||
contact details.
|
||||
|
||||
http://www.SafeRTOS.com - A version that is certified for use in safety
|
||||
critical systems.
|
||||
|
||||
http://www.OpenRTOS.com - Commercial support, development, porting,
|
||||
licensing and training services.
|
||||
*/
|
||||
|
||||
#ifndef FREERTOS_CONFIG_H
|
||||
#define FREERTOS_CONFIG_H
|
||||
|
||||
/* only include in C files */
|
||||
#ifdef __IAR_SYSTEMS_ICC__
|
||||
#pragma language=extended
|
||||
#pragma system_include
|
||||
#include <intrinsics.h>
|
||||
#endif /* __IAR_SYSTEMS_ICC__ */
|
||||
|
||||
/* V850ES/Fx3 Memory Model
|
||||
* 1 = Tiny data model
|
||||
* 0 = Small/Large data model
|
||||
*/
|
||||
#define configDATA_MODE 0
|
||||
|
||||
|
||||
|
||||
/*
|
||||
* Application specific definitions.
|
||||
*
|
||||
* These definitions should be adjusted for your particular hardware and
|
||||
* application requirements.
|
||||
*
|
||||
* THESE PARAMETERS ARE DESCRIBED WITHIN THE 'CONFIGURATION' SECTION OF THE
|
||||
* FreeRTOS API DOCUMENTATION AVAILABLE ON THE FreeRTOS.org WEB SITE.
|
||||
*/
|
||||
#define configUSE_PREEMPTION 1
|
||||
/* only include in C files */
|
||||
|
||||
#ifdef __IAR_SYSTEMS_ICC__
|
||||
|
||||
#define configUSE_IDLE_HOOK 0
|
||||
#define configUSE_TICK_HOOK 0
|
||||
#define configTICK_RATE_HZ ( ( portTickType ) 1000 )
|
||||
#define configMAX_PRIORITIES ( ( unsigned portBASE_TYPE ) 4 )
|
||||
#define configMINIMAL_STACK_SIZE ( ( unsigned portSHORT ) 85 )
|
||||
#define configMAX_TASK_NAME_LEN ( 10 )
|
||||
#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 configCHECK_FOR_STACK_OVERFLOW 2
|
||||
#define configUSE_RECURSIVE_MUTEXES 1
|
||||
#define configQUEUE_REGISTRY_SIZE 0
|
||||
#define configUSE_COUNTING_SEMAPHORES 0
|
||||
|
||||
/* Co-routine definitions. */
|
||||
#define configUSE_CO_ROUTINES 0
|
||||
#define configMAX_CO_ROUTINE_PRIORITIES ( 2 )
|
||||
|
||||
/* Set the following definitions to 1 to include the API function, or zero
|
||||
to exclude the API function. */
|
||||
#define INCLUDE_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
|
||||
|
||||
/* This IAR workspace contains several different projects - each of which
|
||||
is targeted at a different device variant. The definitions past this point
|
||||
are dependent on the variant being used. */
|
||||
#ifdef __IAR_V850ES_Fx3__
|
||||
#include "io70f3385.h"
|
||||
#define configTOTAL_HEAP_SIZE ( (size_t ) ( 20000 ) )
|
||||
#define configCPU_CLOCK_HZ ( ( unsigned portLONG ) 48000000 )
|
||||
#endif
|
||||
|
||||
#ifdef __IAR_V850ES_Jx3__
|
||||
#include "io70f3746.h"
|
||||
#define configTOTAL_HEAP_SIZE ( (size_t ) ( 9000 ) )
|
||||
#define configCPU_CLOCK_HZ ( ( unsigned portLONG ) 16000000 )
|
||||
#endif
|
||||
|
||||
#ifdef __IAR_V850ES_Jx3_L__
|
||||
#include "io70f3738.h"
|
||||
#define configTOTAL_HEAP_SIZE ( (size_t ) ( 9000 ) )
|
||||
#define configCPU_CLOCK_HZ ( ( unsigned portLONG ) 20000000 )
|
||||
#endif
|
||||
|
||||
#ifdef __IAR_V850ES_Jx2__
|
||||
#include "io70f3717.h"
|
||||
#define configTOTAL_HEAP_SIZE ( (size_t ) ( 9000 ) )
|
||||
#define configCPU_CLOCK_HZ ( ( unsigned portLONG ) 20000000 )
|
||||
#endif
|
||||
|
||||
#ifdef __IAR_V850ES_Hx2__
|
||||
#include "io70f3707.h"
|
||||
#define configTOTAL_HEAP_SIZE ( (size_t ) ( 9000 ) )
|
||||
#define configCPU_CLOCK_HZ ( ( unsigned portLONG ) 20000000 )
|
||||
#endif
|
||||
|
||||
#endif /* __IAR_SYSTEMS_ICC__ */
|
||||
|
||||
#endif /* FREERTOS_CONFIG_H */
|
@ -0,0 +1,99 @@
|
||||
/*
|
||||
FreeRTOS.org V5.1.1 - Copyright (C) 2003-2008 Richard Barry.
|
||||
|
||||
This file is part of the FreeRTOS.org distribution.
|
||||
|
||||
FreeRTOS.org is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
FreeRTOS.org is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with FreeRTOS.org; if not, write to the Free Software
|
||||
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
|
||||
A special exception to the GPL can be applied should you wish to distribute
|
||||
a combined work that includes FreeRTOS.org, without being obliged to provide
|
||||
the source code for any proprietary components. See the licensing section
|
||||
of http://www.FreeRTOS.org for full details of how and when the exception
|
||||
can be applied.
|
||||
|
||||
***************************************************************************
|
||||
***************************************************************************
|
||||
* *
|
||||
* SAVE TIME AND MONEY! We can port FreeRTOS.org to your own hardware, *
|
||||
* and even write all or part of your application on your behalf. *
|
||||
* See http://www.OpenRTOS.com for details of the services we provide to *
|
||||
* expedite your project. *
|
||||
* *
|
||||
***************************************************************************
|
||||
***************************************************************************
|
||||
|
||||
Please ensure to read the configuration and relevant port sections of the
|
||||
online documentation.
|
||||
|
||||
http://www.FreeRTOS.org - Documentation, latest information, license and
|
||||
contact details.
|
||||
|
||||
http://www.SafeRTOS.com - A version that is certified for use in safety
|
||||
critical systems.
|
||||
|
||||
http://www.OpenRTOS.com - Commercial support, development, porting,
|
||||
licensing and training services.
|
||||
*/
|
||||
|
||||
#include "FreeRTOS.h"
|
||||
|
||||
/*-----------------------------------------------------------*/
|
||||
|
||||
/* Called by the startup code to initialise the run time system. */
|
||||
unsigned portCHAR __low_level_init(void);
|
||||
|
||||
/*-----------------------------------------------------------*/
|
||||
|
||||
unsigned portCHAR __low_level_init(void)
|
||||
{
|
||||
unsigned portCHAR resetflag = RESF;
|
||||
unsigned portCHAR psval = 0;
|
||||
unsigned portBASE_TYPE i = 0;
|
||||
|
||||
/* Setup provided by NEC. */
|
||||
|
||||
portDISABLE_INTERRUPTS(); /* disable global interrupts */
|
||||
|
||||
PRCMD = 0x00; /* On-chip debug mode */
|
||||
OCDM = 0x00;
|
||||
VSWC = 0x00; /* set system wait control register */
|
||||
WDTM2 = 0x00; /* WDT2 setting */
|
||||
PLLON = 0; /* PLL stop mode */
|
||||
psval = 0x0A | 0x00;
|
||||
PRCMD = psval; /* set Command Register */
|
||||
CKC = psval; /* set Clock Control Register */
|
||||
PLLS = 0x03;
|
||||
psval = 0x80; /* Set fXX and fCPU */
|
||||
PRCMD = psval;
|
||||
PCC = psval;
|
||||
PLLON = 1; /* activate PLL */
|
||||
for( i = 0; i <= 2000; i++ ) /* Wait for stabilisation */
|
||||
{
|
||||
portNOP();
|
||||
}
|
||||
while( LOCK ) /* Wait for PLL frequency stabiliasation */
|
||||
{
|
||||
;
|
||||
}
|
||||
SELPLL = 1; /* Set PLL mode active */
|
||||
RSTOP = 0; /* Set fR (enable) */
|
||||
BGCE0 = 0; /* Set fBRG(disable) */
|
||||
psval = 0x00; /* Stand-by setting */
|
||||
PRCMD = psval; /* set Command Register */
|
||||
PSC = psval; /* set Power Save Control Register */
|
||||
|
||||
return pdTRUE;
|
||||
}
|
||||
/*-----------------------------------------------------------*/
|
@ -0,0 +1,128 @@
|
||||
/*
|
||||
FreeRTOS.org V5.1.1 - Copyright (C) 2003-2008 Richard Barry.
|
||||
|
||||
This file is part of the FreeRTOS.org distribution.
|
||||
|
||||
FreeRTOS.org is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
FreeRTOS.org is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with FreeRTOS.org; if not, write to the Free Software
|
||||
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
|
||||
A special exception to the GPL can be applied should you wish to distribute
|
||||
a combined work that includes FreeRTOS.org, without being obliged to provide
|
||||
the source code for any proprietary components. See the licensing section
|
||||
of http://www.FreeRTOS.org for full details of how and when the exception
|
||||
can be applied.
|
||||
|
||||
***************************************************************************
|
||||
***************************************************************************
|
||||
* *
|
||||
* SAVE TIME AND MONEY! We can port FreeRTOS.org to your own hardware, *
|
||||
* and even write all or part of your application on your behalf. *
|
||||
* See http://www.OpenRTOS.com for details of the services we provide to *
|
||||
* expedite your project. *
|
||||
* *
|
||||
***************************************************************************
|
||||
***************************************************************************
|
||||
|
||||
Please ensure to read the configuration and relevant port sections of the
|
||||
online documentation.
|
||||
|
||||
http://www.FreeRTOS.org - Documentation, latest information, license and
|
||||
contact details.
|
||||
|
||||
http://www.SafeRTOS.com - A version that is certified for use in safety
|
||||
critical systems.
|
||||
|
||||
http://www.OpenRTOS.com - Commercial support, development, porting,
|
||||
licensing and training services.
|
||||
*/
|
||||
|
||||
#include "FreeRTOS.h"
|
||||
|
||||
/*-----------------------------------------------------------*/
|
||||
|
||||
/* Called by the startup code to initialise the run time system. */
|
||||
unsigned portCHAR __low_level_init(void);
|
||||
|
||||
/*-----------------------------------------------------------*/
|
||||
|
||||
unsigned portCHAR __low_level_init(void)
|
||||
{
|
||||
unsigned portCHAR resetflag = RESF;
|
||||
unsigned portCHAR psval = 0;
|
||||
|
||||
/* Setup provided by NEC. */
|
||||
|
||||
/* Disable global interrupts to ensure no interrupts occur during system
|
||||
setup. */
|
||||
portDISABLE_INTERRUPTS();
|
||||
|
||||
PRCMD = 0x00;
|
||||
OCDM = 0x00;
|
||||
VSWC = 0x12;
|
||||
VSWC = 18;
|
||||
|
||||
/* Set main system clock */
|
||||
OSTS = 0x06;
|
||||
psval = 0x80;
|
||||
PRCMD = psval;
|
||||
PCC = psval;
|
||||
while (!OSTC)
|
||||
{
|
||||
;
|
||||
}
|
||||
|
||||
PLLS = 0x03;
|
||||
PLLON = 1;
|
||||
while (LOCKR)
|
||||
{
|
||||
;
|
||||
}
|
||||
|
||||
psval = 0x01;
|
||||
PRCMD = psval;
|
||||
MCM = psval;
|
||||
SELPLL = 1;
|
||||
|
||||
/* Set fCPU */
|
||||
psval = PCC | 0x00;
|
||||
PRCMD = psval;
|
||||
PCC = psval;
|
||||
RCM = 0x83;
|
||||
|
||||
/* Set fXP1 */
|
||||
SELCNT4 = 0x00;
|
||||
|
||||
/* Set fBRG */
|
||||
PRSM0 = 0x00;
|
||||
|
||||
/* Stand-by setting */
|
||||
psval = 0x00;
|
||||
PRCMD = psval;
|
||||
PSC = psval;
|
||||
|
||||
/* WDT2 setting */
|
||||
WDTM2 = 0x1F;
|
||||
|
||||
/* PCL setting */
|
||||
PCLM = 0x00;
|
||||
|
||||
/* disable dma0 - dma3 */
|
||||
E00 = 0;
|
||||
E11 = 0;
|
||||
E22 = 0;
|
||||
E33 = 0;
|
||||
|
||||
return pdTRUE;
|
||||
}
|
||||
/*-----------------------------------------------------------*/
|
@ -0,0 +1,84 @@
|
||||
/*
|
||||
FreeRTOS.org V5.1.1 - Copyright (C) 2003-2008 Richard Barry.
|
||||
|
||||
This file is part of the FreeRTOS.org distribution.
|
||||
|
||||
FreeRTOS.org is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
FreeRTOS.org is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with FreeRTOS.org; if not, write to the Free Software
|
||||
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
|
||||
A special exception to the GPL can be applied should you wish to distribute
|
||||
a combined work that includes FreeRTOS.org, without being obliged to provide
|
||||
the source code for any proprietary components. See the licensing section
|
||||
of http://www.FreeRTOS.org for full details of how and when the exception
|
||||
can be applied.
|
||||
|
||||
***************************************************************************
|
||||
***************************************************************************
|
||||
* *
|
||||
* SAVE TIME AND MONEY! We can port FreeRTOS.org to your own hardware, *
|
||||
* and even write all or part of your application on your behalf. *
|
||||
* See http://www.OpenRTOS.com for details of the services we provide to *
|
||||
* expedite your project. *
|
||||
* *
|
||||
***************************************************************************
|
||||
***************************************************************************
|
||||
|
||||
Please ensure to read the configuration and relevant port sections of the
|
||||
online documentation.
|
||||
|
||||
http://www.FreeRTOS.org - Documentation, latest information, license and
|
||||
contact details.
|
||||
|
||||
http://www.SafeRTOS.com - A version that is certified for use in safety
|
||||
critical systems.
|
||||
|
||||
http://www.OpenRTOS.com - Commercial support, development, porting,
|
||||
licensing and training services.
|
||||
*/
|
||||
|
||||
#include "FreeRTOS.h"
|
||||
|
||||
/*-----------------------------------------------------------*/
|
||||
|
||||
/* Called by the startup code to initialise the run time system. */
|
||||
unsigned portCHAR __low_level_init( void );
|
||||
|
||||
/*-----------------------------------------------------------*/
|
||||
|
||||
unsigned portCHAR __low_level_init( void )
|
||||
{
|
||||
unsigned portCHAR resetflag = RESF;
|
||||
unsigned portBASE_TYPE i = 0;
|
||||
|
||||
portDISABLE_INTERRUPTS(); /* disable global interrupts */
|
||||
|
||||
PRCMD = 0x00; /* On-chip debug mode */
|
||||
PCC = 0x00; /* high speed mode fCPU */
|
||||
VSWC = 0x00;
|
||||
WDTM2 = 0xF; /* Stop watchdog Timer */
|
||||
PLLS = 0x03; /* Set PLL stabilisation time */
|
||||
PLLON = 1; /* activate PLL */
|
||||
for( i = 0; i <= 2000; i++ ) /* Wait for stabilisation */
|
||||
{
|
||||
portNOP();
|
||||
}
|
||||
while( LOCK ) /* Wait for PLL frequency stabiliasation */
|
||||
{
|
||||
portNOP();
|
||||
}
|
||||
SELPLL = 1; /* Set CPU operation to PLL mode */
|
||||
|
||||
return pdTRUE;
|
||||
}
|
||||
/*-----------------------------------------------------------*/
|
@ -0,0 +1,125 @@
|
||||
/*
|
||||
FreeRTOS.org V5.1.1 - Copyright (C) 2003-2008 Richard Barry.
|
||||
|
||||
This file is part of the FreeRTOS.org distribution.
|
||||
|
||||
FreeRTOS.org is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
FreeRTOS.org is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with FreeRTOS.org; if not, write to the Free Software
|
||||
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
|
||||
A special exception to the GPL can be applied should you wish to distribute
|
||||
a combined work that includes FreeRTOS.org, without being obliged to provide
|
||||
the source code for any proprietary components. See the licensing section
|
||||
of http://www.FreeRTOS.org for full details of how and when the exception
|
||||
can be applied.
|
||||
|
||||
***************************************************************************
|
||||
***************************************************************************
|
||||
* *
|
||||
* SAVE TIME AND MONEY! We can port FreeRTOS.org to your own hardware, *
|
||||
* and even write all or part of your application on your behalf. *
|
||||
* See http://www.OpenRTOS.com for details of the services we provide to *
|
||||
* expedite your project. *
|
||||
* *
|
||||
***************************************************************************
|
||||
***************************************************************************
|
||||
|
||||
Please ensure to read the configuration and relevant port sections of the
|
||||
online documentation.
|
||||
|
||||
http://www.FreeRTOS.org - Documentation, latest information, license and
|
||||
contact details.
|
||||
|
||||
http://www.SafeRTOS.com - A version that is certified for use in safety
|
||||
critical systems.
|
||||
|
||||
http://www.OpenRTOS.com - Commercial support, development, porting,
|
||||
licensing and training services.
|
||||
*/
|
||||
|
||||
/*-----------------------------------------------------------
|
||||
* Simple parallel port IO routines.
|
||||
*-----------------------------------------------------------*/
|
||||
|
||||
/* FreeRTOS includes. */
|
||||
#include "FreeRTOS.h"
|
||||
#include "task.h"
|
||||
|
||||
/* Demo includes. */
|
||||
#include "partest.h"
|
||||
|
||||
#define partstNUM_LEDs 4
|
||||
|
||||
#define LED0_MASK ( ( unsigned short ) 0x08 )
|
||||
#define LED1_MASK ( ( unsigned short ) 0x10 )
|
||||
#define LED2_MASK ( ( unsigned short ) 0x40 )
|
||||
#define LED3_MASK ( ( unsigned short ) 0x80 )
|
||||
|
||||
static const unsigned short xLEDs[ partstNUM_LEDs ] = { LED0_MASK, LED1_MASK, LED2_MASK, LED3_MASK };
|
||||
|
||||
|
||||
|
||||
void vParTestInitialise( void )
|
||||
{
|
||||
/* Set GPIO to output. */
|
||||
PM3 &= ~( LED0_MASK | LED1_MASK | LED2_MASK | LED3_MASK );
|
||||
}
|
||||
/*-----------------------------------------------------------*/
|
||||
|
||||
void vParTestSetLED( unsigned portBASE_TYPE uxLED, signed portBASE_TYPE xValue )
|
||||
{
|
||||
unsigned portBASE_TYPE uxLEDMask;
|
||||
|
||||
if( uxLED < partstNUM_LEDs )
|
||||
{
|
||||
uxLEDMask = xLEDs[ uxLED ];
|
||||
|
||||
taskENTER_CRITICAL();
|
||||
{
|
||||
if( xValue )
|
||||
{
|
||||
P3 |= uxLEDMask;
|
||||
}
|
||||
else
|
||||
{
|
||||
P3 &= ~uxLEDMask;
|
||||
}
|
||||
}
|
||||
taskEXIT_CRITICAL();
|
||||
}
|
||||
}
|
||||
/*-----------------------------------------------------------*/
|
||||
|
||||
void vParTestToggleLED( unsigned portBASE_TYPE uxLED )
|
||||
{
|
||||
unsigned portBASE_TYPE uxLEDMask;
|
||||
|
||||
if( uxLED < partstNUM_LEDs )
|
||||
{
|
||||
uxLEDMask = xLEDs[ uxLED ];
|
||||
|
||||
taskENTER_CRITICAL();
|
||||
{
|
||||
if( P3 & uxLEDMask )
|
||||
{
|
||||
P3 &= ~uxLEDMask;
|
||||
}
|
||||
else
|
||||
{
|
||||
P3 |= uxLEDMask;
|
||||
}
|
||||
}
|
||||
taskEXIT_CRITICAL();
|
||||
}
|
||||
}
|
||||
|
@ -0,0 +1,123 @@
|
||||
/*
|
||||
FreeRTOS.org V5.1.1 - Copyright (C) 2003-2008 Richard Barry.
|
||||
|
||||
This file is part of the FreeRTOS.org distribution.
|
||||
|
||||
FreeRTOS.org is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
FreeRTOS.org is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with FreeRTOS.org; if not, write to the Free Software
|
||||
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
|
||||
A special exception to the GPL can be applied should you wish to distribute
|
||||
a combined work that includes FreeRTOS.org, without being obliged to provide
|
||||
the source code for any proprietary components. See the licensing section
|
||||
of http://www.FreeRTOS.org for full details of how and when the exception
|
||||
can be applied.
|
||||
|
||||
***************************************************************************
|
||||
***************************************************************************
|
||||
* *
|
||||
* SAVE TIME AND MONEY! We can port FreeRTOS.org to your own hardware, *
|
||||
* and even write all or part of your application on your behalf. *
|
||||
* See http://www.OpenRTOS.com for details of the services we provide to *
|
||||
* expedite your project. *
|
||||
* *
|
||||
***************************************************************************
|
||||
***************************************************************************
|
||||
|
||||
Please ensure to read the configuration and relevant port sections of the
|
||||
online documentation.
|
||||
|
||||
http://www.FreeRTOS.org - Documentation, latest information, license and
|
||||
contact details.
|
||||
|
||||
http://www.SafeRTOS.com - A version that is certified for use in safety
|
||||
critical systems.
|
||||
|
||||
http://www.OpenRTOS.com - Commercial support, development, porting,
|
||||
licensing and training services.
|
||||
*/
|
||||
|
||||
/*-----------------------------------------------------------
|
||||
* Simple parallel port IO routines.
|
||||
*-----------------------------------------------------------*/
|
||||
|
||||
/* FreeRTOS includes. */
|
||||
#include "FreeRTOS.h"
|
||||
#include "task.h"
|
||||
|
||||
/* Demo includes. */
|
||||
#include "partest.h"
|
||||
|
||||
#define partstNUM_LEDs 2
|
||||
|
||||
#define LED0_MASK ( ( unsigned short ) 0x04 )
|
||||
#define LED1_MASK ( ( unsigned short ) 0x08 )
|
||||
|
||||
static const unsigned short xLEDs[ partstNUM_LEDs ] = { LED0_MASK, LED1_MASK };
|
||||
|
||||
/*-----------------------------------------------------------*/
|
||||
|
||||
void vParTestInitialise( void )
|
||||
{
|
||||
/* LED Port Initialization */
|
||||
PMCM &= ~( LED0_MASK | LED1_MASK );
|
||||
}
|
||||
/*-----------------------------------------------------------*/
|
||||
|
||||
void vParTestSetLED( unsigned portBASE_TYPE uxLED, signed portBASE_TYPE xValue )
|
||||
{
|
||||
unsigned portBASE_TYPE uxLEDMask;
|
||||
|
||||
if( uxLED < partstNUM_LEDs )
|
||||
{
|
||||
uxLEDMask = xLEDs[ uxLED ];
|
||||
|
||||
taskENTER_CRITICAL();
|
||||
{
|
||||
if( xValue )
|
||||
{
|
||||
PCM &= ~uxLEDMask;
|
||||
}
|
||||
else
|
||||
{
|
||||
PCM |= uxLEDMask;
|
||||
}
|
||||
}
|
||||
taskEXIT_CRITICAL();
|
||||
}
|
||||
}
|
||||
/*-----------------------------------------------------------*/
|
||||
|
||||
void vParTestToggleLED( unsigned portBASE_TYPE uxLED )
|
||||
{
|
||||
unsigned portBASE_TYPE uxLEDMask;
|
||||
|
||||
if( uxLED < partstNUM_LEDs )
|
||||
{
|
||||
uxLEDMask = xLEDs[ uxLED ];
|
||||
|
||||
taskENTER_CRITICAL();
|
||||
{
|
||||
if( PCM & uxLEDMask )
|
||||
{
|
||||
PCM &= ~uxLEDMask;
|
||||
}
|
||||
else
|
||||
{
|
||||
PCM |= uxLEDMask;
|
||||
}
|
||||
}
|
||||
taskEXIT_CRITICAL();
|
||||
}
|
||||
}
|
||||
|
@ -0,0 +1,362 @@
|
||||
; FreeRTOS.org V5.1.1 - Copyright (C) 2003-2009 Richard Barry.
|
||||
;
|
||||
; This file is part of the FreeRTOS.org distribution.
|
||||
;
|
||||
; FreeRTOS.org is free software; you can redistribute it and/or modify
|
||||
; it under the terms of the GNU General Public License as published by
|
||||
; the Free Software Foundation; either version 2 of the License, or
|
||||
; (at your option) any later version.
|
||||
;
|
||||
; FreeRTOS.org is distributed in the hope that it will be useful,
|
||||
; but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
; GNU General Public License for more details.
|
||||
;
|
||||
; You should have received a copy of the GNU General Public License
|
||||
; along with FreeRTOS.org; if not, write to the Free Software
|
||||
; Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
;
|
||||
; A special exception to the GPL can be applied should you wish to distribute
|
||||
; a combined work that includes FreeRTOS.org, without being obliged to provide
|
||||
; the source code for any proprietary components. See the licensing section
|
||||
; of http://www.FreeRTOS.org for full details of how and when the exception
|
||||
; can be applied.
|
||||
;
|
||||
; ***************************************************************************
|
||||
; See http://www.FreeRTOS.org for documentation, latest information, license
|
||||
; and contact details. Please ensure to read the configuration and relevant
|
||||
; port sections of the online documentation.
|
||||
; ***************************************************************************
|
||||
;
|
||||
;------------------------------------------------------------------------------
|
||||
; Note: Select the correct include files for the device used by the application.
|
||||
|
||||
EXTERN vRegTestFailed
|
||||
|
||||
|
||||
|
||||
;
|
||||
; The RegTest tasks as described in the comments at the top of main().
|
||||
;
|
||||
|
||||
|
||||
;------------------------------------------------------------------------------
|
||||
|
||||
; Functions implemented in this file
|
||||
;------------------------------------------------------------------------------
|
||||
PUBLIC vRegTest1
|
||||
PUBLIC vRegTest2
|
||||
|
||||
|
||||
;------------------------------------------------------------------------------
|
||||
;------------------------------------------------------------------------------
|
||||
RSEG CODE:CODE
|
||||
vRegTest1:
|
||||
MOV 0x01010101, R1
|
||||
MOV 0x02020202, R2
|
||||
; Ignore R3 and R4 as these are the stack and global pointers respectively.
|
||||
MOV 0x04040404, R5
|
||||
MOV 0x05050505, R6
|
||||
MOV 0x06060606, R7
|
||||
MOV 0x07070707, R8
|
||||
MOV 0x08080808, R9
|
||||
MOV 0x09090909, R10
|
||||
MOV 0x0a0a0a0a, R11
|
||||
MOV 0x0b0b0b0b, R12
|
||||
MOV 0x0c0c0c0c, R13
|
||||
MOV 0x0d0d0d0d, R14
|
||||
MOV 0x0e0e0e0e, R15
|
||||
MOV 0x0f0f0f0f, R16
|
||||
MOV 0x10101010, R17
|
||||
MOV 0x11111111, R18
|
||||
MOV 0x12121212, R19
|
||||
MOV 0x13131313, R20
|
||||
MOV 0x14141414, R21
|
||||
MOV 0x15151515, R22
|
||||
MOV 0x16161616, R23
|
||||
MOV 0x17171717, R24
|
||||
#if ( configDATA_MODE == 1 )
|
||||
;R25 is used as a base register except when the tiny model is used. */
|
||||
MOV 0x18181818, R25
|
||||
#endif
|
||||
MOV 0x19191919, R26
|
||||
MOV 0x20202020, R27
|
||||
MOV 0x21212121, R28
|
||||
MOV 0x22222222, R29
|
||||
MOV 0x23232323, R30
|
||||
|
||||
vReg1TestLoopStart:
|
||||
MOV 0x01010101, R31
|
||||
CMP R31, R1
|
||||
BZ $+6
|
||||
JARL vRegTestFailed, lp
|
||||
MOV 0x02020202, R31
|
||||
CMP R31, R2
|
||||
BZ $+6
|
||||
JARL vRegTestFailed, lp
|
||||
MOV 0x04040404, R31
|
||||
CMP R31, R5
|
||||
BZ $+6
|
||||
JARL vRegTestFailed, lp
|
||||
MOV 0x05050505, R31
|
||||
CMP R31, R6
|
||||
BZ $+6
|
||||
JARL vRegTestFailed, lp
|
||||
MOV 0x06060606, R31
|
||||
CMP R31, R7
|
||||
BZ $+6
|
||||
JARL vRegTestFailed, lp
|
||||
MOV 0x07070707, R31
|
||||
CMP R31, R8
|
||||
BZ $+6
|
||||
JARL vRegTestFailed, lp
|
||||
MOV 0x08080808, R31
|
||||
CMP R31, R9
|
||||
BZ $+6
|
||||
JARL vRegTestFailed, lp
|
||||
MOV 0x09090909, R31
|
||||
CMP R31, R10
|
||||
BZ $+6
|
||||
JARL vRegTestFailed, lp
|
||||
MOV 0x0a0a0a0a, R31
|
||||
CMP R31, R11
|
||||
BZ $+6
|
||||
JARL vRegTestFailed, lp
|
||||
MOV 0x0b0b0b0b, R31
|
||||
CMP R31, R12
|
||||
BZ $+6
|
||||
JARL vRegTestFailed, lp
|
||||
MOV 0x0c0c0c0c, R31
|
||||
CMP R31, R13
|
||||
BZ $+6
|
||||
JARL vRegTestFailed, lp
|
||||
MOV 0x0d0d0d0d, R31
|
||||
CMP R31, R14
|
||||
BZ $+6
|
||||
JARL vRegTestFailed, lp
|
||||
MOV 0x0e0e0e0e, R31
|
||||
CMP R31, R15
|
||||
BZ $+6
|
||||
JARL vRegTestFailed, lp
|
||||
MOV 0x0f0f0f0f, R31
|
||||
CMP R31, R16
|
||||
BZ $+6
|
||||
JARL vRegTestFailed, lp
|
||||
MOV 0x10101010, R31
|
||||
CMP R31, R17
|
||||
BZ $+6
|
||||
JARL vRegTestFailed, lp
|
||||
MOV 0x11111111, R31
|
||||
CMP R31, R18
|
||||
BZ $+6
|
||||
JARL vRegTestFailed, lp
|
||||
MOV 0x12121212, R31
|
||||
CMP R31, R19
|
||||
BZ $+6
|
||||
JARL vRegTestFailed, lp
|
||||
MOV 0x13131313, R31
|
||||
CMP R31, R20
|
||||
BZ $+6
|
||||
JARL vRegTestFailed, lp
|
||||
MOV 0x14141414, R31
|
||||
CMP R31, R21
|
||||
BZ $+6
|
||||
JARL vRegTestFailed, lp
|
||||
MOV 0x15151515, R31
|
||||
CMP R31, R22
|
||||
BZ $+6
|
||||
JARL vRegTestFailed, lp
|
||||
MOV 0x16161616, R31
|
||||
CMP R31, R23
|
||||
BZ $+6
|
||||
JARL vRegTestFailed, lp
|
||||
MOV 0x17171717, R31
|
||||
CMP R31, R24
|
||||
BZ $+6
|
||||
JARL vRegTestFailed, lp
|
||||
#if ( configDATA_MODE == 1 )
|
||||
MOV 0x18181818, R31
|
||||
CMP R31, R25
|
||||
BZ $+6
|
||||
JARL vRegTestFailed, lp
|
||||
#endif
|
||||
MOV 0x19191919, R31
|
||||
CMP R31, R26
|
||||
BZ $+6
|
||||
JARL vRegTestFailed, lp
|
||||
MOV 0x20202020, R31
|
||||
CMP R31, R27
|
||||
BZ $+6
|
||||
JARL vRegTestFailed, lp
|
||||
MOV 0x21212121, R31
|
||||
CMP R31, R28
|
||||
BZ $+6
|
||||
JARL vRegTestFailed, lp
|
||||
MOV 0x22222222, R31
|
||||
CMP R31, R29
|
||||
BZ $+6
|
||||
JARL vRegTestFailed, lp
|
||||
MOV 0x23232323, R31
|
||||
CMP R31, R30
|
||||
BZ $+6
|
||||
JARL vRegTestFailed, lp
|
||||
MOV vReg1TestLoopStart, R31
|
||||
JMP [R31]
|
||||
|
||||
;------------------------------------------------------------------------------
|
||||
;------------------------------------------------------------------------------
|
||||
RSEG CODE:CODE
|
||||
vRegTest2:
|
||||
MOV 0xa101010b, R1
|
||||
MOV 0xa202020b, R2
|
||||
; Ignore R3 and R4 as these are the stack and global pointers respectively.
|
||||
MOV 0xa404040b, R5
|
||||
MOV 0xa505050b, R6
|
||||
MOV 0xa606060b, R7
|
||||
MOV 0xa707070b, R8
|
||||
MOV 0xa808080b, R9
|
||||
MOV 0xa909090b, R10
|
||||
MOV 0xaa0a0a0b, R11
|
||||
MOV 0xab0b0b0b, R12
|
||||
MOV 0xac0c0c0b, R13
|
||||
MOV 0xad0d0d0b, R14
|
||||
MOV 0xae0e0e0b, R15
|
||||
MOV 0xaf0f0f0b, R16
|
||||
MOV 0xa010101b, R17
|
||||
MOV 0xa111111b, R18
|
||||
MOV 0xa212121b, R19
|
||||
MOV 0xa313131b, R20
|
||||
MOV 0xa414141b, R21
|
||||
MOV 0xa515151b, R22
|
||||
MOV 0xa616161b, R23
|
||||
MOV 0xa717171b, R24
|
||||
#if ( configDATA_MODE == 1 )
|
||||
;R25 is used as a base register except when the tiny model is used. */
|
||||
MOV 0xa818181b, R25
|
||||
#endif
|
||||
MOV 0xa919191b, R26
|
||||
MOV 0xa020202b, R27
|
||||
MOV 0xa121212b, R28
|
||||
MOV 0xa222222b, R29
|
||||
MOV 0xa323232b, R30
|
||||
|
||||
vReg2TestLoopStart:
|
||||
MOV 0xa101010b, R31
|
||||
CMP R31, R1
|
||||
BZ $+6
|
||||
JARL vRegTestFailed, lp
|
||||
MOV 0xa202020b, R31
|
||||
CMP R31, R2
|
||||
BZ $+6
|
||||
JARL vRegTestFailed, lp
|
||||
MOV 0xa404040b, R31
|
||||
CMP R31, R5
|
||||
BZ $+6
|
||||
JARL vRegTestFailed, lp
|
||||
MOV 0xa505050b, R31
|
||||
CMP R31, R6
|
||||
BZ $+6
|
||||
JARL vRegTestFailed, lp
|
||||
MOV 0xa606060b, R31
|
||||
CMP R31, R7
|
||||
BZ $+6
|
||||
JARL vRegTestFailed, lp
|
||||
MOV 0xa707070b, R31
|
||||
CMP R31, R8
|
||||
BZ $+6
|
||||
JARL vRegTestFailed, lp
|
||||
MOV 0xa808080b, R31
|
||||
CMP R31, R9
|
||||
BZ $+6
|
||||
JARL vRegTestFailed, lp
|
||||
MOV 0xa909090b, R31
|
||||
CMP R31, R10
|
||||
BZ $+6
|
||||
JARL vRegTestFailed, lp
|
||||
MOV 0xaa0a0a0b, R31
|
||||
CMP R31, R11
|
||||
BZ $+6
|
||||
JARL vRegTestFailed, lp
|
||||
MOV 0xab0b0b0b, R31
|
||||
CMP R31, R12
|
||||
BZ $+6
|
||||
JARL vRegTestFailed, lp
|
||||
MOV 0xac0c0c0b, R31
|
||||
CMP R31, R13
|
||||
BZ $+6
|
||||
JARL vRegTestFailed, lp
|
||||
MOV 0xad0d0d0b, R31
|
||||
CMP R31, R14
|
||||
BZ $+6
|
||||
JARL vRegTestFailed, lp
|
||||
MOV 0xae0e0e0b, R31
|
||||
CMP R31, R15
|
||||
BZ $+6
|
||||
JARL vRegTestFailed, lp
|
||||
MOV 0xaf0f0f0b, R31
|
||||
CMP R31, R16
|
||||
BZ $+6
|
||||
JARL vRegTestFailed, lp
|
||||
MOV 0xa010101b, R31
|
||||
CMP R31, R17
|
||||
BZ $+6
|
||||
JARL vRegTestFailed, lp
|
||||
MOV 0xa111111b, R31
|
||||
CMP R31, R18
|
||||
BZ $+6
|
||||
JARL vRegTestFailed, lp
|
||||
MOV 0xa212121b, R31
|
||||
CMP R31, R19
|
||||
BZ $+6
|
||||
JARL vRegTestFailed, lp
|
||||
MOV 0xa313131b, R31
|
||||
CMP R31, R20
|
||||
BZ $+6
|
||||
JARL vRegTestFailed, lp
|
||||
MOV 0xa414141b, R31
|
||||
CMP R31, R21
|
||||
BZ $+6
|
||||
JARL vRegTestFailed, lp
|
||||
MOV 0xa515151b, R31
|
||||
CMP R31, R22
|
||||
BZ $+6
|
||||
JARL vRegTestFailed, lp
|
||||
MOV 0xa616161b, R31
|
||||
CMP R31, R23
|
||||
BZ $+6
|
||||
JARL vRegTestFailed, lp
|
||||
MOV 0xa717171b, R31
|
||||
CMP R31, R24
|
||||
BZ $+6
|
||||
JARL vRegTestFailed, lp
|
||||
#if ( configDATA_MODE == 1 )
|
||||
MOV 0xa818181b, R31
|
||||
CMP R31, R25
|
||||
BZ $+6
|
||||
JARL vRegTestFailed, lp
|
||||
#endif
|
||||
MOV 0xa919191b, R31
|
||||
CMP R31, R26
|
||||
BZ $+6
|
||||
JARL vRegTestFailed, lp
|
||||
MOV 0xa020202b, R31
|
||||
CMP R31, R27
|
||||
BZ $+6
|
||||
JARL vRegTestFailed, lp
|
||||
MOV 0xa121212b, R31
|
||||
CMP R31, R28
|
||||
BZ $+6
|
||||
JARL vRegTestFailed, lp
|
||||
MOV 0xa222222b, R31
|
||||
CMP R31, R29
|
||||
BZ $+6
|
||||
JARL vRegTestFailed, lp
|
||||
MOV 0xa323232b, R31
|
||||
CMP R31, R30
|
||||
BZ $+6
|
||||
JARL vRegTestFailed, lp
|
||||
MOV vReg2TestLoopStart, R31
|
||||
JMP [R31]
|
||||
|
||||
END
|
||||
|
@ -0,0 +1,291 @@
|
||||
/*
|
||||
FreeRTOS.org V5.1.1 - Copyright (C) 2003-2008 Richard Barry.
|
||||
|
||||
This file is part of the FreeRTOS.org distribution.
|
||||
|
||||
FreeRTOS.org is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
FreeRTOS.org is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with FreeRTOS.org; if not, write to the Free Software
|
||||
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
|
||||
A special exception to the GPL can be applied should you wish to distribute
|
||||
a combined work that includes FreeRTOS.org, without being obliged to provide
|
||||
the source code for any proprietary components. See the licensing section
|
||||
of http://www.FreeRTOS.org for full details of how and when the exception
|
||||
can be applied.
|
||||
|
||||
***************************************************************************
|
||||
***************************************************************************
|
||||
* *
|
||||
* SAVE TIME AND MONEY! We can port FreeRTOS.org to your own hardware, *
|
||||
* and even write all or part of your application on your behalf. *
|
||||
* See http://www.OpenRTOS.com for details of the services we provide to *
|
||||
* expedite your project. *
|
||||
* *
|
||||
***************************************************************************
|
||||
***************************************************************************
|
||||
|
||||
Please ensure to read the configuration and relevant port sections of the
|
||||
online documentation.
|
||||
|
||||
http://www.FreeRTOS.org - Documentation, latest information, license and
|
||||
contact details.
|
||||
|
||||
http://www.SafeRTOS.com - A version that is certified for use in safety
|
||||
critical systems.
|
||||
|
||||
http://www.OpenRTOS.com - Commercial support, development, porting,
|
||||
licensing and training services.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Creates all the demo application tasks, then starts the scheduler. The WEB
|
||||
* documentation provides more details of the standard demo application tasks.
|
||||
* In addition to the standard demo tasks, the following tasks and tests are
|
||||
* defined and/or created within this file:
|
||||
*
|
||||
* "Check" task - This only executes every three seconds but has a high priority
|
||||
* to ensure it gets processor time. Its main function is to check that all the
|
||||
* standard demo tasks are still operational. If everything is running as
|
||||
* expected then the check task will toggle an LED every 3 seconds. An error
|
||||
* being discovered in any task will cause the toggle rate to increase to 500ms.
|
||||
*
|
||||
* "Reg test" tasks - These fill the registers with known values, then check
|
||||
* that each register still contains its expected value. Each task uses
|
||||
* different values. The tasks run with very low priority so get preempted very
|
||||
* frequently. A register containing an unexpected value is indicative of an
|
||||
* error in the context switching mechanism.
|
||||
*
|
||||
*/
|
||||
|
||||
/* Standard include files. */
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
/* Scheduler include files. */
|
||||
#include "FreeRTOS.h"
|
||||
#include "task.h"
|
||||
|
||||
/* Demo file headers. */
|
||||
#include <intrinsics.h>
|
||||
#include "BlockQ.h"
|
||||
#include "death.h"
|
||||
#include "flash.h"
|
||||
#include "partest.h"
|
||||
#include "semtest.h"
|
||||
#include "PollQ.h"
|
||||
#include "GenQTest.h"
|
||||
#include "QPeek.h"
|
||||
#include "recmutex.h"
|
||||
#include "comtest2.h"
|
||||
|
||||
/*
|
||||
* Priority definitions for most of the tasks in the demo application. Some
|
||||
* tasks just use the idle priority.
|
||||
*/
|
||||
#define mainFLASH_PRIORITY ( tskIDLE_PRIORITY + 1 )
|
||||
#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 + 2 )
|
||||
#define mainINTEGER_TASK_PRIORITY ( tskIDLE_PRIORITY )
|
||||
#define mainGEN_QUEUE_TASK_PRIORITY ( tskIDLE_PRIORITY )
|
||||
#define mainCOMTEST_PRIORITY ( tskIDLE_PRIORITY + 1 )
|
||||
|
||||
/* Passed into the check task just as a test that the parameter passing
|
||||
mechanism is working correctly. */
|
||||
#define mainCHECK_PARAMETER ( ( void * ) 0x12345678 )
|
||||
|
||||
/* The period between executions of the check task. */
|
||||
#define mainNO_ERROR_DELAY ( ( portTickType ) 3000 / portTICK_RATE_MS )
|
||||
#define mainERROR_DELAY ( ( portTickType ) 500 / portTICK_RATE_MS )
|
||||
|
||||
/* There are no spare LEDs for the comtest tasks, so this is just set to an
|
||||
invalid number. */
|
||||
#define mainCOMTEST_LED ( 4 )
|
||||
|
||||
/* The baud rate used by the comtest task. */
|
||||
#define mainBAUD_RATE ( 9600 )
|
||||
|
||||
/*-----------------------------------------------------------*/
|
||||
|
||||
/* The implementation of the 'check' task as described at the top of this file. */
|
||||
static void prvCheckTask( void *pvParameters );
|
||||
|
||||
/* Just sets up the LED outputs. Most generic setup is done in
|
||||
__low_level_init(). */
|
||||
static void prvSetupHardware( void );
|
||||
|
||||
/* The RegTest functions as described at the top of this file. */
|
||||
extern void vRegTest1( void *pvParameters );
|
||||
extern void vRegTest2( void *pvParameters );
|
||||
|
||||
/* A variable that will get set to fail if a RegTest task finds an error. The
|
||||
variable is inspected by the 'Check' task. */
|
||||
static volatile portLONG lRegTestStatus = pdPASS;
|
||||
|
||||
/*-----------------------------------------------------------*/
|
||||
|
||||
/* Create all the demo tasks then start the scheduler. */
|
||||
void main( void )
|
||||
{
|
||||
/* Just sets up the LED outputs. */
|
||||
prvSetupHardware();
|
||||
|
||||
/* Standard demo tasks. */
|
||||
vStartSemaphoreTasks( mainSEM_TEST_PRIORITY );
|
||||
vStartGenericQueueTasks( mainGEN_QUEUE_TASK_PRIORITY );
|
||||
vStartQueuePeekTasks();
|
||||
|
||||
/* Create the check task as described at the top of this file. */
|
||||
xTaskCreate( prvCheckTask, "Check", configMINIMAL_STACK_SIZE, mainCHECK_PARAMETER, mainCHECK_TASK_PRIORITY, NULL );
|
||||
|
||||
/* Create the RegTest tasks as described at the top of this file. */
|
||||
xTaskCreate( vRegTest1, "Reg1", configMINIMAL_STACK_SIZE, NULL, tskIDLE_PRIORITY, NULL );
|
||||
xTaskCreate( vRegTest2, "Reg2", configMINIMAL_STACK_SIZE, NULL, tskIDLE_PRIORITY, NULL );
|
||||
|
||||
#ifdef __IAR_V850ES_Fx3__
|
||||
{
|
||||
/* The extra IO required for the com test and led flashing tasks is only
|
||||
available on the application board, not the target boards. */
|
||||
vAltStartComTestTasks( mainCOMTEST_PRIORITY, mainBAUD_RATE, mainCOMTEST_LED );
|
||||
vStartLEDFlashTasks( mainFLASH_PRIORITY );
|
||||
|
||||
/* The Fx3 also has enough RAM to run loads more tasks. */
|
||||
vStartRecursiveMutexTasks();
|
||||
vStartBlockingQueueTasks( mainBLOCK_Q_PRIORITY );
|
||||
vStartPolledQueueTasks( mainQUEUE_POLL_PRIORITY );
|
||||
}
|
||||
#endif
|
||||
|
||||
/* 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 );
|
||||
|
||||
/* Start the scheduler. */
|
||||
vTaskStartScheduler();
|
||||
|
||||
/* If this line is reached then vTaskStartScheduler() returned because there
|
||||
was insufficient heap memory remaining for the idle task to be created. */
|
||||
for( ;; );
|
||||
}
|
||||
/*-----------------------------------------------------------*/
|
||||
|
||||
static void prvCheckTask( void *pvParameters )
|
||||
{
|
||||
portTickType xDelayPeriod = mainNO_ERROR_DELAY, xLastWakeTime;
|
||||
unsigned portBASE_TYPE uxLEDToUse = 0;
|
||||
|
||||
/* Ensure parameter is passed in correctly. */
|
||||
if( pvParameters != mainCHECK_PARAMETER )
|
||||
{
|
||||
xDelayPeriod = mainERROR_DELAY;
|
||||
}
|
||||
|
||||
/* Initialise xLastWakeTime before it is used. After this point it is not
|
||||
written to directly. */
|
||||
xLastWakeTime = xTaskGetTickCount();
|
||||
|
||||
/* Cycle for ever, delaying then checking all the other tasks are still
|
||||
operating without error. */
|
||||
for( ;; )
|
||||
{
|
||||
vTaskDelayUntil( &xLastWakeTime, xDelayPeriod );
|
||||
|
||||
if( lRegTestStatus != pdPASS )
|
||||
{
|
||||
xDelayPeriod = mainERROR_DELAY;
|
||||
}
|
||||
|
||||
if( xAreGenericQueueTasksStillRunning() != pdTRUE )
|
||||
{
|
||||
xDelayPeriod = mainERROR_DELAY;
|
||||
}
|
||||
|
||||
if( xAreQueuePeekTasksStillRunning() != pdTRUE )
|
||||
{
|
||||
xDelayPeriod = mainERROR_DELAY;
|
||||
}
|
||||
|
||||
if( xAreSemaphoreTasksStillRunning() != pdTRUE )
|
||||
{
|
||||
xDelayPeriod = mainERROR_DELAY;
|
||||
}
|
||||
|
||||
if( xIsCreateTaskStillRunning() != pdTRUE )
|
||||
{
|
||||
xDelayPeriod = mainERROR_DELAY;
|
||||
}
|
||||
|
||||
/* The Fx3 runs more tasks, so more checks are performed. */
|
||||
#ifdef __IAR_V850ES_Fx3__
|
||||
{
|
||||
if( xAreComTestTasksStillRunning() != pdTRUE )
|
||||
{
|
||||
xDelayPeriod = mainERROR_DELAY;
|
||||
}
|
||||
|
||||
if( xArePollingQueuesStillRunning() != pdTRUE )
|
||||
{
|
||||
xDelayPeriod = mainERROR_DELAY;
|
||||
}
|
||||
|
||||
if( xAreBlockingQueuesStillRunning() != pdTRUE )
|
||||
{
|
||||
xDelayPeriod = mainERROR_DELAY;
|
||||
}
|
||||
|
||||
if( xAreRecursiveMutexTasksStillRunning() != pdTRUE )
|
||||
{
|
||||
xDelayPeriod = mainERROR_DELAY;
|
||||
}
|
||||
|
||||
/* The application board has more LEDs and uses the flash tasks
|
||||
so the check task instead uses LED3 as LED3 is still spare. */
|
||||
uxLEDToUse = 3;
|
||||
}
|
||||
#endif
|
||||
|
||||
vParTestToggleLED( uxLEDToUse );
|
||||
}
|
||||
}
|
||||
/*-----------------------------------------------------------*/
|
||||
|
||||
static void prvSetupHardware( void )
|
||||
{
|
||||
/* Setup the LED outputs. */
|
||||
vParTestInitialise();
|
||||
|
||||
/* Any additional hardware configuration can be added here. */
|
||||
}
|
||||
/*-----------------------------------------------------------*/
|
||||
|
||||
void vApplicationStackOverflowHook( void )
|
||||
{
|
||||
/* This will be called if a task overflows its stack. pxCurrentTCB
|
||||
can be inspected to see which is the offending task. */
|
||||
for( ;; );
|
||||
}
|
||||
/*-----------------------------------------------------------*/
|
||||
|
||||
void vRegTestFailed( void )
|
||||
{
|
||||
/* Called by the RegTest tasks if an error is found. lRegTestStatus is
|
||||
inspected by the check task. */
|
||||
lRegTestStatus = pdFAIL;
|
||||
|
||||
/* Do not return from here as the reg test tasks clobber all registers so
|
||||
function calls may not function correctly. */
|
||||
for( ;; );
|
||||
}
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,10 @@
|
||||
<?xml version="1.0" encoding="iso-8859-1"?>
|
||||
|
||||
<workspace>
|
||||
<project>
|
||||
<path>$WS_DIR$\rtosdemo.ewp</path>
|
||||
</project>
|
||||
<batchBuild/>
|
||||
</workspace>
|
||||
|
||||
|
@ -0,0 +1,271 @@
|
||||
/*
|
||||
FreeRTOS.org V5.1.1 - Copyright (C) 2003-2008 Richard Barry.
|
||||
|
||||
This file is part of the FreeRTOS.org distribution.
|
||||
|
||||
FreeRTOS.org is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
FreeRTOS.org is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with FreeRTOS.org; if not, write to the Free Software
|
||||
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
|
||||
A special exception to the GPL can be applied should you wish to distribute
|
||||
a combined work that includes FreeRTOS.org, without being obliged to provide
|
||||
the source code for any proprietary components. See the licensing section
|
||||
of http://www.FreeRTOS.org for full details of how and when the exception
|
||||
can be applied.
|
||||
|
||||
***************************************************************************
|
||||
***************************************************************************
|
||||
* *
|
||||
* SAVE TIME AND MONEY! We can port FreeRTOS.org to your own hardware, *
|
||||
* and even write all or part of your application on your behalf. *
|
||||
* See http://www.OpenRTOS.com for details of the services we provide to *
|
||||
* expedite your project. *
|
||||
* *
|
||||
***************************************************************************
|
||||
***************************************************************************
|
||||
|
||||
Please ensure to read the configuration and relevant port sections of the
|
||||
online documentation.
|
||||
|
||||
http://www.FreeRTOS.org - Documentation, latest information, license and
|
||||
contact details.
|
||||
|
||||
http://www.SafeRTOS.com - A version that is certified for use in safety
|
||||
critical systems.
|
||||
|
||||
http://www.OpenRTOS.com - Commercial support, development, porting,
|
||||
licensing and training services.
|
||||
*/
|
||||
|
||||
/*
|
||||
BASIC INTERRUPT DRIVEN SERIAL PORT DRIVER FOR UART0.
|
||||
|
||||
*NOTE* - This file is designed to test some of the RTOS features - it is
|
||||
not intended to represent an efficient implementation!
|
||||
*/
|
||||
|
||||
/* Standard includes. */
|
||||
#include <stdlib.h>
|
||||
|
||||
/* Scheduler includes. */
|
||||
#include "FreeRTOS.h"
|
||||
#include "queue.h"
|
||||
|
||||
/* Demo application includes. */
|
||||
#include "serial.h"
|
||||
|
||||
|
||||
/* Hardware specifics. */
|
||||
#define serRX_DATA_PIN ( 0x01 )
|
||||
#define serTX_DATA_PIN ( 0x02 )
|
||||
#define serCLOCK_Fxx_DIV_8 0x03
|
||||
#define serUPWR ( 0x80 )
|
||||
#define serUTXE ( 0x40 )
|
||||
#define serURXE ( 0x20 )
|
||||
#define serUCL ( 0x02 )
|
||||
#define serLSB ( 0x10 )
|
||||
|
||||
/* Misc. */
|
||||
#define serINVALID_QUEUE ( ( xQueueHandle ) 0 )
|
||||
#define serHANDLE ( ( xComPortHandle ) 1 )
|
||||
#define serNO_BLOCK ( ( portTickType ) 0 )
|
||||
|
||||
/*-----------------------------------------------------------*/
|
||||
|
||||
/* Queues used to hold received characters, and characters waiting to be
|
||||
transmitted. */
|
||||
static xQueueHandle xRxedChars;
|
||||
static xQueueHandle xCharsForTx;
|
||||
|
||||
/*-----------------------------------------------------------*/
|
||||
|
||||
/* Interrupt entry point written in the assembler file serialISR.s85. */
|
||||
extern void vSerialISREntry( void );
|
||||
|
||||
/* Flag to indicate whether or not there are characters already queued to send. */
|
||||
static volatile unsigned long ulTxInProgress = pdFALSE;
|
||||
|
||||
/*-----------------------------------------------------------*/
|
||||
|
||||
/*
|
||||
* See the serial2.h header file.
|
||||
*/
|
||||
xComPortHandle xSerialPortInitMinimal( unsigned portLONG ulWantedBaud, unsigned portBASE_TYPE uxQueueLength )
|
||||
{
|
||||
xComPortHandle xReturn = serHANDLE;
|
||||
const unsigned portLONG ulFuclk = ( configCPU_CLOCK_HZ / 2 ) / 8UL;
|
||||
|
||||
/* Create the queues used to hold Rx and Tx characters. */
|
||||
xRxedChars = xQueueCreate( uxQueueLength, ( unsigned portBASE_TYPE ) sizeof( signed portCHAR ) );
|
||||
xCharsForTx = xQueueCreate( uxQueueLength + 1, ( unsigned portBASE_TYPE ) sizeof( signed portCHAR ) );
|
||||
|
||||
/* If the queues were created correctly then setup the serial port
|
||||
hardware. */
|
||||
if( ( xRxedChars != serINVALID_QUEUE ) && ( xCharsForTx != serINVALID_QUEUE ) )
|
||||
{
|
||||
portENTER_CRITICAL();
|
||||
{
|
||||
/* Set the UART0 Rx and Tx pins to their alternative function. */
|
||||
PMC3 |= ( serRX_DATA_PIN | serTX_DATA_PIN );
|
||||
PM3 &= ~( serTX_DATA_PIN );
|
||||
|
||||
/* Setup clock for required baud. */
|
||||
UD0CTL1 = serCLOCK_Fxx_DIV_8;
|
||||
UD0CTL2 = ulFuclk / ( 2 * ulWantedBaud );
|
||||
|
||||
/* Enable, n81. */
|
||||
UD0CTL0 = ( serUPWR | serUTXE | serURXE | serUCL | serLSB );
|
||||
|
||||
/* Enable interrupts for both Rx and Tx. */
|
||||
UD0TIC = 0x07;
|
||||
UD0RIC = 0x07;
|
||||
|
||||
ulTxInProgress = pdFALSE;
|
||||
}
|
||||
portEXIT_CRITICAL();
|
||||
}
|
||||
else
|
||||
{
|
||||
xReturn = ( xComPortHandle ) 0;
|
||||
}
|
||||
|
||||
/* This demo file only supports a single port but we have to return
|
||||
something to comply with the standard demo header file. */
|
||||
return xReturn;
|
||||
}
|
||||
/*-----------------------------------------------------------*/
|
||||
|
||||
signed portBASE_TYPE xSerialGetChar( xComPortHandle pxPort, signed portCHAR *pcRxedChar, portTickType xBlockTime )
|
||||
{
|
||||
/* The port handle is not required as this driver only supports one port. */
|
||||
( void ) pxPort;
|
||||
|
||||
/* Get the next character from the buffer. Return false if no characters
|
||||
are available, or arrive before xBlockTime expires. */
|
||||
if( xQueueReceive( xRxedChars, pcRxedChar, xBlockTime ) )
|
||||
{
|
||||
return pdTRUE;
|
||||
}
|
||||
else
|
||||
{
|
||||
return pdFALSE;
|
||||
}
|
||||
}
|
||||
/*-----------------------------------------------------------*/
|
||||
|
||||
void vSerialPutString( xComPortHandle pxPort, const signed portCHAR * const pcString, unsigned portSHORT usStringLength )
|
||||
{
|
||||
signed portCHAR *pxNext;
|
||||
|
||||
/* A couple of parameters that this port does not use. */
|
||||
( void ) usStringLength;
|
||||
( void ) pxPort;
|
||||
|
||||
/* NOTE: This implementation does not handle the queue being full as no
|
||||
block time is used! */
|
||||
|
||||
/* The port handle is not required as this driver only supports UART0. */
|
||||
( void ) pxPort;
|
||||
|
||||
/* Send each character in the string, one at a time. */
|
||||
pxNext = ( signed portCHAR * ) pcString;
|
||||
while( *pxNext )
|
||||
{
|
||||
xSerialPutChar( pxPort, *pxNext, serNO_BLOCK );
|
||||
pxNext++;
|
||||
}
|
||||
}
|
||||
/*-----------------------------------------------------------*/
|
||||
|
||||
signed portBASE_TYPE xSerialPutChar( xComPortHandle pxPort, signed portCHAR cOutChar, portTickType xBlockTime )
|
||||
{
|
||||
portBASE_TYPE xReturn = pdPASS;
|
||||
|
||||
portENTER_CRITICAL();
|
||||
{
|
||||
/* There are currently no characters queued up to send so write the
|
||||
character directly to the UART. */
|
||||
if( ulTxInProgress == pdFALSE )
|
||||
{
|
||||
UD0TX = cOutChar;
|
||||
ulTxInProgress = pdTRUE;
|
||||
}
|
||||
else
|
||||
{
|
||||
/* The UART is already busy so write the character to the Tx queue.
|
||||
The queue is drained from within the Tx interrupt. */
|
||||
if( xQueueSend( xCharsForTx, &cOutChar, xBlockTime ) != pdPASS )
|
||||
{
|
||||
xReturn = pdFAIL;
|
||||
}
|
||||
}
|
||||
}
|
||||
portEXIT_CRITICAL();
|
||||
|
||||
return xReturn;
|
||||
}
|
||||
/*-----------------------------------------------------------*/
|
||||
|
||||
void vSerialClose( xComPortHandle xPort )
|
||||
{
|
||||
/* Not supported as not required by the demo application. */
|
||||
}
|
||||
/*-----------------------------------------------------------*/
|
||||
|
||||
/* Tx interrupt handler. This is called from the asm file wrapper. */
|
||||
void vUARTTxISRHandler( void )
|
||||
{
|
||||
char cChar;
|
||||
portBASE_TYPE xHigherPriorityTaskWoken = pdFALSE;
|
||||
|
||||
/* Are there any more characters queue to transmit? */
|
||||
if( xQueueReceiveFromISR( xCharsForTx, &cChar, &xHigherPriorityTaskWoken ) == pdTRUE )
|
||||
{
|
||||
/* Send the next character. */
|
||||
UD0TX = cChar;
|
||||
}
|
||||
else
|
||||
{
|
||||
/* The UART is no longer active. */
|
||||
ulTxInProgress = pdFALSE;
|
||||
}
|
||||
|
||||
/* If reading a character from the Rx queue caused a task to unblock, and
|
||||
the unblocked task has a priority higher than the currently running task,
|
||||
then xHigherPriorityTaskWoken will have been set to true and a context
|
||||
switch should occur now. */
|
||||
portYIELD_FROM_ISR( xHigherPriorityTaskWoken );
|
||||
}
|
||||
/*-----------------------------------------------------------*/
|
||||
|
||||
/* Rx interrupt handler. This is called from the asm file wrapper. */
|
||||
void vUARTRxISRHandler( void )
|
||||
{
|
||||
portCHAR cChar;
|
||||
portBASE_TYPE xHigherPriorityTaskWoken = pdFALSE;
|
||||
|
||||
/* Send the received character to the Rx queue. */
|
||||
cChar = UD0RX;
|
||||
xQueueSendFromISR( xRxedChars, &cChar, &xHigherPriorityTaskWoken );
|
||||
|
||||
/* If sending a character to the Tx queue caused a task to unblock, and
|
||||
the unblocked task has a priority higher than the currently running task,
|
||||
then xHigherPriorityTaskWoken will have been set to true and a context
|
||||
switch should occur now. */
|
||||
portYIELD_FROM_ISR( xHigherPriorityTaskWoken );
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
@ -0,0 +1,47 @@
|
||||
RSEG ICODE:CODE
|
||||
|
||||
EXTERN vUARTRxISRHandler
|
||||
EXTERN vUARTTxISRHandler
|
||||
|
||||
PUBLIC vUARTRxISRWrapper
|
||||
PUBLIC vUARTTxISRWrapper
|
||||
|
||||
; Wrappers for the serial port interrupt service routines. These can cause a
|
||||
; context switch so requires an assembly wrapper.
|
||||
|
||||
; Defines the portSAVE_CONTEXT and portRESTORE_CONTEXT macros.
|
||||
#include "ISR_Support.h"
|
||||
|
||||
vUARTRxISRWrapper:
|
||||
|
||||
portSAVE_CONTEXT ; Save the context of the current task.
|
||||
|
||||
jarl vUARTRxISRHandler, lp ; Call the ISR routine.
|
||||
|
||||
portRESTORE_CONTEXT ; Restore the context of the current task -
|
||||
; which may be different to the task that
|
||||
; was interrupted.
|
||||
|
||||
vUARTTxISRWrapper:
|
||||
|
||||
portSAVE_CONTEXT ; Save the context of the current task.
|
||||
|
||||
jarl vUARTTxISRHandler, lp ; Call the ISR routine.
|
||||
|
||||
portRESTORE_CONTEXT ; Restore the context of the current task -
|
||||
; which may be different to the task that
|
||||
; was interrupted.
|
||||
|
||||
|
||||
COMMON INTVEC:CODE:ROOT(2)
|
||||
ORG 2c0H
|
||||
`??vUARTRxISRWrapper??INTVEC 2c0`:
|
||||
JR vUARTRxISRWrapper
|
||||
|
||||
COMMON INTVEC:CODE:ROOT(2)
|
||||
ORG 2d0H
|
||||
`??vUARTTxISRWrapper??INTVEC 2d0`:
|
||||
JR vUARTTxISRWrapper
|
||||
|
||||
END
|
||||
|
Loading…
Reference in New Issue