Add PIC32 code.
parent
48b4870c7e
commit
a8eabeabbb
@ -0,0 +1,87 @@
|
||||
/*
|
||||
FreeRTOS.org V4.2.1 - Copyright (C) 2003-2007 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.
|
||||
|
||||
Also see http://www.SafeRTOS.com a version that has been certified for use
|
||||
in safety critical systems, plus commercial licensing, development and
|
||||
support options.
|
||||
***************************************************************************
|
||||
*/
|
||||
|
||||
#ifndef FREERTOS_CONFIG_H
|
||||
#define FREERTOS_CONFIG_H
|
||||
|
||||
#include <p32xxxx.h>
|
||||
|
||||
/*-----------------------------------------------------------
|
||||
* Application specific definitions.
|
||||
*
|
||||
* These definitions should be adjusted for your particular hardware and
|
||||
* application requirements.
|
||||
*
|
||||
* THESE PARAMETERS ARE DESCRIBED WITHIN THE 'CONFIGURATION' SECTION OF THE
|
||||
* FreeRTOS API DOCUMENTATION AVAILABLE ON THE FreeRTOS.org WEB SITE.
|
||||
*----------------------------------------------------------*/
|
||||
|
||||
#define configUSE_PREEMPTION 1
|
||||
#define configUSE_IDLE_HOOK 0
|
||||
#define configUSE_TICK_HOOK 0
|
||||
#define configTICK_RATE_HZ ( ( portTickType ) 1000 )
|
||||
#define configCPU_CLOCK_HZ ( ( unsigned portLONG ) 72000000UL )
|
||||
#define configPERIPHERAL_CLOCK_HZ ( ( unsigned portLONG ) 36000000UL )
|
||||
#define configMAX_PRIORITIES ( ( unsigned portBASE_TYPE ) 5 )
|
||||
#define configMINIMAL_STACK_SIZE ( 230 )
|
||||
#define configISR_STACK_SIZE ( 130 )
|
||||
#define configTOTAL_HEAP_SIZE ( ( size_t ) 29000 )
|
||||
#define configMAX_TASK_NAME_LEN ( 8 )
|
||||
#define configUSE_TRACE_FACILITY 0
|
||||
#define configUSE_16_BIT_TICKS 0
|
||||
#define configIDLE_SHOULD_YIELD 1
|
||||
#define configUSE_MUTEXES 1
|
||||
|
||||
/* 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 0
|
||||
#define INCLUDE_vTaskCleanUpResources 0
|
||||
#define INCLUDE_vTaskSuspend 1
|
||||
#define INCLUDE_vTaskDelayUntil 1
|
||||
#define INCLUDE_vTaskDelay 1
|
||||
|
||||
|
||||
#define configKERNEL_INTERRUPT_PRIORITY 0x01
|
||||
|
||||
|
||||
#endif /* FREERTOS_CONFIG_H */
|
@ -0,0 +1,93 @@
|
||||
/*
|
||||
FreeRTOS.org V4.6.1 - Copyright (C) 2003-2007 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.
|
||||
|
||||
Also see http://www.SafeRTOS.com a version that has been certified for use
|
||||
in safety critical systems, plus commercial licensing, development and
|
||||
support options.
|
||||
***************************************************************************
|
||||
*/
|
||||
|
||||
/* Scheduler includes. */
|
||||
#include "FreeRTOS.h"
|
||||
|
||||
/* Demo app includes. */
|
||||
#include "partest.h"
|
||||
|
||||
#define ptOUTPUT 0
|
||||
#define ptALL_OFF 0
|
||||
|
||||
/*-----------------------------------------------------------
|
||||
* Simple parallel port IO routines.
|
||||
*-----------------------------------------------------------*/
|
||||
|
||||
void vParTestInitialise( void )
|
||||
{
|
||||
/* All LEDs output. */
|
||||
TRISA = ptOUTPUT;
|
||||
PORTA = ptALL_OFF;
|
||||
|
||||
mJTAGPortEnable( 0 );
|
||||
}
|
||||
/*-----------------------------------------------------------*/
|
||||
|
||||
void vParTestSetLED( unsigned portBASE_TYPE uxLED, signed portBASE_TYPE xValue )
|
||||
{
|
||||
unsigned portBASE_TYPE uxLEDBit;
|
||||
|
||||
/* Which port A bit is being modified? */
|
||||
uxLEDBit = 1 << uxLED;
|
||||
|
||||
if( xValue )
|
||||
{
|
||||
/* Turn the LED on. Use of the PORTASET register removes the need
|
||||
to use a critical section. */
|
||||
PORTASET = uxLEDBit;
|
||||
}
|
||||
else
|
||||
{
|
||||
/* Turn the LED off. Use of the PORTACLR register removes the need
|
||||
to use a critical section. */
|
||||
PORTACLR = uxLEDBit;
|
||||
}
|
||||
}
|
||||
/*-----------------------------------------------------------*/
|
||||
|
||||
void vParTestToggleLED( unsigned portBASE_TYPE uxLED )
|
||||
{
|
||||
unsigned portBASE_TYPE uxLEDBit;
|
||||
|
||||
uxLEDBit = 1 << uxLED;
|
||||
|
||||
/* Use of the PORTAINV register removes the need to use a critical section. */
|
||||
PORTAINV = uxLEDBit;
|
||||
}
|
||||
|
||||
|
||||
|
@ -0,0 +1,94 @@
|
||||
[HEADER]
|
||||
magic_cookie={66E99B07-E706-4689-9E80-9B2582898A13}
|
||||
file_version=1.0
|
||||
[PATH_INFO]
|
||||
BuildDirPolicy=BuildDirIsProjectDir
|
||||
dir_src=
|
||||
dir_bin=
|
||||
dir_tmp=
|
||||
dir_sin=..\..\Source\portable\MPLAB\PIC32MX;.
|
||||
dir_inc=.;.;..\common\include;..\..\source\portable\mplab\pic32mx;..\..\source\include
|
||||
dir_lib=
|
||||
dir_lkr=
|
||||
[CAT_FILTERS]
|
||||
filter_src=*.s;*.c
|
||||
filter_inc=*.h;*.inc
|
||||
filter_obj=*.o
|
||||
filter_lib=*.a
|
||||
filter_lkr=*.ld
|
||||
[OTHER_FILES]
|
||||
file_000=no
|
||||
file_001=no
|
||||
file_002=no
|
||||
file_003=no
|
||||
file_004=no
|
||||
file_005=no
|
||||
file_006=no
|
||||
file_007=no
|
||||
file_008=no
|
||||
file_009=no
|
||||
file_010=no
|
||||
file_011=no
|
||||
file_012=no
|
||||
file_013=no
|
||||
file_014=no
|
||||
file_015=no
|
||||
file_016=no
|
||||
file_017=no
|
||||
file_018=no
|
||||
file_019=no
|
||||
file_020=no
|
||||
file_021=no
|
||||
file_022=no
|
||||
file_023=no
|
||||
file_024=no
|
||||
file_025=no
|
||||
file_026=no
|
||||
file_027=no
|
||||
file_028=no
|
||||
file_029=no
|
||||
file_030=yes
|
||||
[FILE_INFO]
|
||||
file_000=main.c
|
||||
file_001=ParTest\ParTest.c
|
||||
file_002=..\..\Source\portable\MPLAB\PIC32MX\port.c
|
||||
file_003=..\..\Source\list.c
|
||||
file_004=..\..\Source\queue.c
|
||||
file_005=..\..\Source\tasks.c
|
||||
file_006=..\..\Source\portable\MPLAB\PIC32MX\port_asm.S
|
||||
file_007=RegisterTestTasks.s
|
||||
file_008=..\..\Source\portable\MemMang\heap_2.c
|
||||
file_009=..\Common\Minimal\flash.c
|
||||
file_010=..\Common\Minimal\QPeek.c
|
||||
file_011=..\Common\Minimal\semtest.c
|
||||
file_012=..\Common\Minimal\GenQTest.c
|
||||
file_013=..\Common\Minimal\integer.c
|
||||
file_014=..\Common\Minimal\blocktim.c
|
||||
file_015=lcd.c
|
||||
file_016=serial\serial.c
|
||||
file_017=..\Common\Minimal\comtest.c
|
||||
file_018=serial\serial_isr.S
|
||||
file_019=timertest.c
|
||||
file_020=FreeRTOSConfig.h
|
||||
file_021=..\..\Source\portable\MPLAB\PIC32MX\portmacro.h
|
||||
file_022=..\..\Source\include\portable.h
|
||||
file_023=..\..\Source\include\task.h
|
||||
file_024=..\..\Source\include\croutine.h
|
||||
file_025=..\..\Source\include\FreeRTOS.h
|
||||
file_026=..\..\Source\include\list.h
|
||||
file_027=..\..\Source\include\projdefs.h
|
||||
file_028=..\..\Source\include\queue.h
|
||||
file_029=..\..\Source\include\semphr.h
|
||||
file_030=PIC32MX_MPLAB.map
|
||||
[SUITE_INFO]
|
||||
suite_guid={14495C23-81F8-43F3-8A44-859C583D7760}
|
||||
suite_state=
|
||||
[TOOL_SETTINGS]
|
||||
TS{CB0AF4B8-4022-429D-8F99-8A56782B2C6D}=--keep-locals --gdwarf-2
|
||||
TS{9C698E0A-CBC9-4EFF-AE7D-B569F93E7322}=-g -DMPLAB_PIC32MX_PORT -Wall -fomit-frame-pointer
|
||||
TS{77F59DA1-3C53-4677-AC5F-A03EB0125170}=-o"$(BINDIR_)$(TARGETBASE).$(TARGETSUFFIX)" -Map="$(BINDIR_)$(TARGETBASE).map"
|
||||
TS{0396C0A1-9052-4E4F-8B84-EF0162B1B4E9}=
|
||||
[INSTRUMENTED_TRACE]
|
||||
enable=0
|
||||
transport=0
|
||||
format=0
|
@ -0,0 +1,271 @@
|
||||
[Header]
|
||||
MagicCookie={0b13fe8c-dfe0-40eb-8900-6712719559a7}
|
||||
Version=1.0
|
||||
[File000]
|
||||
Location=C:\Temp\RC\1\Demo\PIC32MX_MPLAB\main.o
|
||||
Folder=Intermediary
|
||||
DeviceName=PIC32MX360F512L
|
||||
LanguageToolSuiteID={14495C23-81F8-43F3-8A44-859C583D7760}
|
||||
LanguageToolID={430F471F-7ECB-4852-A80D-DEF9A5C8E751}
|
||||
LanguageToolLocation=C:\Devtools\Microchip\MPLAB C32\bin\pic32-gcc.exe
|
||||
PPAD=$(BINDIR)||$(TMPDIR)||$(AINDIR)|..\..\Source\portable\MPLAB\PIC32MX;.||$(INCDIR)|.;.;..\common\include;..\..\source\portable\mplab\pic32mx;..\..\source\include||$(LIBDIR)||$(LKRDIR)||
|
||||
SOLK=<src>|main.c|ParTest\ParTest.c|..\..\Source\portable\MPLAB\PIC32MX\port.c|..\..\Source\list.c|..\..\Source\queue.c|..\..\Source\tasks.c|..\..\Source\portable\MPLAB\PIC32MX\port_asm.S|RegisterTestTasks.s|..\..\Source\portable\MemMang\heap_2.c|..\Common\Minimal\flash.c|..\Common\Minimal\QPeek.c|..\Common\Minimal\semtest.c|..\Common\Minimal\GenQTest.c|..\Common\Minimal\integer.c|..\Common\Minimal\blocktim.c|lcd.c|serial\serial.c|..\Common\Minimal\comtest.c|serial\serial_isr.S|timertest.c||<obj>||<lib>||<lkr>||
|
||||
SuiteArgsString=
|
||||
ToolArgsString=-g -DMPLAB_PIC32MX_PORT -Wall -fomit-frame-pointer
|
||||
TraceCmdString=
|
||||
[File001]
|
||||
Location=C:\Temp\RC\1\Demo\PIC32MX_MPLAB\ParTest.o
|
||||
Folder=Intermediary
|
||||
DeviceName=PIC32MX360F512L
|
||||
LanguageToolSuiteID={14495C23-81F8-43F3-8A44-859C583D7760}
|
||||
LanguageToolID={430F471F-7ECB-4852-A80D-DEF9A5C8E751}
|
||||
LanguageToolLocation=C:\Devtools\Microchip\MPLAB C32\bin\pic32-gcc.exe
|
||||
PPAD=$(BINDIR)||$(TMPDIR)||$(AINDIR)|..\..\Source\portable\MPLAB\PIC32MX;.||$(INCDIR)|.;.;..\common\include;..\..\source\portable\mplab\pic32mx;..\..\source\include||$(LIBDIR)||$(LKRDIR)||
|
||||
SOLK=<src>|main.c|ParTest\ParTest.c|..\..\Source\portable\MPLAB\PIC32MX\port.c|..\..\Source\list.c|..\..\Source\queue.c|..\..\Source\tasks.c|..\..\Source\portable\MPLAB\PIC32MX\port_asm.S|RegisterTestTasks.s|..\..\Source\portable\MemMang\heap_2.c|..\Common\Minimal\flash.c|..\Common\Minimal\QPeek.c|..\Common\Minimal\semtest.c|..\Common\Minimal\GenQTest.c|..\Common\Minimal\integer.c|..\Common\Minimal\blocktim.c|lcd.c|serial\serial.c|..\Common\Minimal\comtest.c|serial\serial_isr.S|timertest.c||<obj>||<lib>||<lkr>||
|
||||
SuiteArgsString=
|
||||
ToolArgsString=-g -DMPLAB_PIC32MX_PORT -Wall -fomit-frame-pointer
|
||||
TraceCmdString=
|
||||
[File002]
|
||||
Location=C:\Temp\RC\1\Demo\PIC32MX_MPLAB\port.o
|
||||
Folder=Intermediary
|
||||
DeviceName=PIC32MX360F512L
|
||||
LanguageToolSuiteID={14495C23-81F8-43F3-8A44-859C583D7760}
|
||||
LanguageToolID={430F471F-7ECB-4852-A80D-DEF9A5C8E751}
|
||||
LanguageToolLocation=C:\Devtools\Microchip\MPLAB C32\bin\pic32-gcc.exe
|
||||
PPAD=$(BINDIR)||$(TMPDIR)||$(AINDIR)|..\..\Source\portable\MPLAB\PIC32MX;.||$(INCDIR)|.;.;..\common\include;..\..\source\portable\mplab\pic32mx;..\..\source\include||$(LIBDIR)||$(LKRDIR)||
|
||||
SOLK=<src>|main.c|ParTest\ParTest.c|..\..\Source\portable\MPLAB\PIC32MX\port.c|..\..\Source\list.c|..\..\Source\queue.c|..\..\Source\tasks.c|..\..\Source\portable\MPLAB\PIC32MX\port_asm.S|RegisterTestTasks.s|..\..\Source\portable\MemMang\heap_2.c|..\Common\Minimal\flash.c|..\Common\Minimal\QPeek.c|..\Common\Minimal\semtest.c|..\Common\Minimal\GenQTest.c|..\Common\Minimal\integer.c|..\Common\Minimal\blocktim.c|lcd.c|serial\serial.c|..\Common\Minimal\comtest.c|serial\serial_isr.S|timertest.c||<obj>||<lib>||<lkr>||
|
||||
SuiteArgsString=
|
||||
ToolArgsString=-g -DMPLAB_PIC32MX_PORT -Wall -fomit-frame-pointer
|
||||
TraceCmdString=
|
||||
[File003]
|
||||
Location=C:\Temp\RC\1\Demo\PIC32MX_MPLAB\list.o
|
||||
Folder=Intermediary
|
||||
DeviceName=PIC32MX360F512L
|
||||
LanguageToolSuiteID={14495C23-81F8-43F3-8A44-859C583D7760}
|
||||
LanguageToolID={430F471F-7ECB-4852-A80D-DEF9A5C8E751}
|
||||
LanguageToolLocation=C:\Devtools\Microchip\MPLAB C32\bin\pic32-gcc.exe
|
||||
PPAD=$(BINDIR)||$(TMPDIR)||$(AINDIR)|..\..\Source\portable\MPLAB\PIC32MX;.||$(INCDIR)|.;.;..\common\include;..\..\source\portable\mplab\pic32mx;..\..\source\include||$(LIBDIR)||$(LKRDIR)||
|
||||
SOLK=<src>|main.c|ParTest\ParTest.c|..\..\Source\portable\MPLAB\PIC32MX\port.c|..\..\Source\list.c|..\..\Source\queue.c|..\..\Source\tasks.c|..\..\Source\portable\MPLAB\PIC32MX\port_asm.S|RegisterTestTasks.s|..\..\Source\portable\MemMang\heap_2.c|..\Common\Minimal\flash.c|..\Common\Minimal\QPeek.c|..\Common\Minimal\semtest.c|..\Common\Minimal\GenQTest.c|..\Common\Minimal\integer.c|..\Common\Minimal\blocktim.c|lcd.c|serial\serial.c|..\Common\Minimal\comtest.c|serial\serial_isr.S|timertest.c||<obj>||<lib>||<lkr>||
|
||||
SuiteArgsString=
|
||||
ToolArgsString=-g -DMPLAB_PIC32MX_PORT -Wall -fomit-frame-pointer
|
||||
TraceCmdString=
|
||||
[File004]
|
||||
Location=C:\Temp\RC\1\Demo\PIC32MX_MPLAB\queue.o
|
||||
Folder=Intermediary
|
||||
DeviceName=PIC32MX360F512L
|
||||
LanguageToolSuiteID={14495C23-81F8-43F3-8A44-859C583D7760}
|
||||
LanguageToolID={430F471F-7ECB-4852-A80D-DEF9A5C8E751}
|
||||
LanguageToolLocation=C:\Devtools\Microchip\MPLAB C32\bin\pic32-gcc.exe
|
||||
PPAD=$(BINDIR)||$(TMPDIR)||$(AINDIR)|..\..\Source\portable\MPLAB\PIC32MX;.||$(INCDIR)|.;.;..\common\include;..\..\source\portable\mplab\pic32mx;..\..\source\include||$(LIBDIR)||$(LKRDIR)||
|
||||
SOLK=<src>|main.c|ParTest\ParTest.c|..\..\Source\portable\MPLAB\PIC32MX\port.c|..\..\Source\list.c|..\..\Source\queue.c|..\..\Source\tasks.c|..\..\Source\portable\MPLAB\PIC32MX\port_asm.S|RegisterTestTasks.s|..\..\Source\portable\MemMang\heap_2.c|..\Common\Minimal\flash.c|..\Common\Minimal\QPeek.c|..\Common\Minimal\semtest.c|..\Common\Minimal\GenQTest.c|..\Common\Minimal\integer.c|..\Common\Minimal\blocktim.c|lcd.c|serial\serial.c|..\Common\Minimal\comtest.c|serial\serial_isr.S|timertest.c||<obj>||<lib>||<lkr>||
|
||||
SuiteArgsString=
|
||||
ToolArgsString=-g -DMPLAB_PIC32MX_PORT -Wall -fomit-frame-pointer
|
||||
TraceCmdString=
|
||||
[File005]
|
||||
Location=C:\Temp\RC\1\Demo\PIC32MX_MPLAB\tasks.o
|
||||
Folder=Intermediary
|
||||
DeviceName=PIC32MX360F512L
|
||||
LanguageToolSuiteID={14495C23-81F8-43F3-8A44-859C583D7760}
|
||||
LanguageToolID={430F471F-7ECB-4852-A80D-DEF9A5C8E751}
|
||||
LanguageToolLocation=C:\Devtools\Microchip\MPLAB C32\bin\pic32-gcc.exe
|
||||
PPAD=$(BINDIR)||$(TMPDIR)||$(AINDIR)|..\..\Source\portable\MPLAB\PIC32MX;.||$(INCDIR)|.;.;..\common\include;..\..\source\portable\mplab\pic32mx;..\..\source\include||$(LIBDIR)||$(LKRDIR)||
|
||||
SOLK=<src>|main.c|ParTest\ParTest.c|..\..\Source\portable\MPLAB\PIC32MX\port.c|..\..\Source\list.c|..\..\Source\queue.c|..\..\Source\tasks.c|..\..\Source\portable\MPLAB\PIC32MX\port_asm.S|RegisterTestTasks.s|..\..\Source\portable\MemMang\heap_2.c|..\Common\Minimal\flash.c|..\Common\Minimal\QPeek.c|..\Common\Minimal\semtest.c|..\Common\Minimal\GenQTest.c|..\Common\Minimal\integer.c|..\Common\Minimal\blocktim.c|lcd.c|serial\serial.c|..\Common\Minimal\comtest.c|serial\serial_isr.S|timertest.c||<obj>||<lib>||<lkr>||
|
||||
SuiteArgsString=
|
||||
ToolArgsString=-g -DMPLAB_PIC32MX_PORT -Wall -fomit-frame-pointer
|
||||
TraceCmdString=
|
||||
[File006]
|
||||
Location=C:\Temp\RC\1\Demo\PIC32MX_MPLAB\port_asm.o
|
||||
Folder=Intermediary
|
||||
DeviceName=PIC32MX360F512L
|
||||
LanguageToolSuiteID={14495C23-81F8-43F3-8A44-859C583D7760}
|
||||
LanguageToolID={92E15EC6-5E91-4BF4-B5FA-C80AD2601AA7}
|
||||
LanguageToolLocation=C:\Devtools\Microchip\MPLAB C32\bin\pic32-as.exe
|
||||
PPAD=$(BINDIR)||$(TMPDIR)||$(AINDIR)|..\..\Source\portable\MPLAB\PIC32MX;.||$(INCDIR)|.;.;..\common\include;..\..\source\portable\mplab\pic32mx;..\..\source\include||$(LIBDIR)||$(LKRDIR)||
|
||||
SOLK=<src>|main.c|ParTest\ParTest.c|..\..\Source\portable\MPLAB\PIC32MX\port.c|..\..\Source\list.c|..\..\Source\queue.c|..\..\Source\tasks.c|..\..\Source\portable\MPLAB\PIC32MX\port_asm.S|RegisterTestTasks.s|..\..\Source\portable\MemMang\heap_2.c|..\Common\Minimal\flash.c|..\Common\Minimal\QPeek.c|..\Common\Minimal\semtest.c|..\Common\Minimal\GenQTest.c|..\Common\Minimal\integer.c|..\Common\Minimal\blocktim.c|lcd.c|serial\serial.c|..\Common\Minimal\comtest.c|serial\serial_isr.S|timertest.c||<obj>||<lib>||<lkr>||
|
||||
SuiteArgsString=
|
||||
ToolArgsString=--keep-locals --gdwarf-2
|
||||
TraceCmdString=
|
||||
[File007]
|
||||
Location=C:\Temp\RC\1\Demo\PIC32MX_MPLAB\RegisterTestTasks.o
|
||||
Folder=Intermediary
|
||||
DeviceName=PIC32MX360F512L
|
||||
LanguageToolSuiteID={14495C23-81F8-43F3-8A44-859C583D7760}
|
||||
LanguageToolID={92E15EC6-5E91-4BF4-B5FA-C80AD2601AA7}
|
||||
LanguageToolLocation=C:\Devtools\Microchip\MPLAB C32\bin\pic32-as.exe
|
||||
PPAD=$(BINDIR)||$(TMPDIR)||$(AINDIR)|..\..\Source\portable\MPLAB\PIC32MX;.||$(INCDIR)|.;.;..\common\include;..\..\source\portable\mplab\pic32mx;..\..\source\include||$(LIBDIR)||$(LKRDIR)||
|
||||
SOLK=<src>|main.c|ParTest\ParTest.c|..\..\Source\portable\MPLAB\PIC32MX\port.c|..\..\Source\list.c|..\..\Source\queue.c|..\..\Source\tasks.c|..\..\Source\portable\MPLAB\PIC32MX\port_asm.S|RegisterTestTasks.s|..\..\Source\portable\MemMang\heap_2.c|..\Common\Minimal\flash.c|..\Common\Minimal\QPeek.c|..\Common\Minimal\semtest.c|..\Common\Minimal\GenQTest.c|..\Common\Minimal\integer.c|..\Common\Minimal\blocktim.c|lcd.c|serial\serial.c|..\Common\Minimal\comtest.c|serial\serial_isr.S|timertest.c||<obj>||<lib>||<lkr>||
|
||||
SuiteArgsString=
|
||||
ToolArgsString=--keep-locals --gdwarf-2
|
||||
TraceCmdString=
|
||||
[File008]
|
||||
Location=C:\Temp\RC\1\Demo\PIC32MX_MPLAB\heap_2.o
|
||||
Folder=Intermediary
|
||||
DeviceName=PIC32MX360F512L
|
||||
LanguageToolSuiteID={14495C23-81F8-43F3-8A44-859C583D7760}
|
||||
LanguageToolID={430F471F-7ECB-4852-A80D-DEF9A5C8E751}
|
||||
LanguageToolLocation=C:\Devtools\Microchip\MPLAB C32\bin\pic32-gcc.exe
|
||||
PPAD=$(BINDIR)||$(TMPDIR)||$(AINDIR)|..\..\Source\portable\MPLAB\PIC32MX;.||$(INCDIR)|.;.;..\common\include;..\..\source\portable\mplab\pic32mx;..\..\source\include||$(LIBDIR)||$(LKRDIR)||
|
||||
SOLK=<src>|main.c|ParTest\ParTest.c|..\..\Source\portable\MPLAB\PIC32MX\port.c|..\..\Source\list.c|..\..\Source\queue.c|..\..\Source\tasks.c|..\..\Source\portable\MPLAB\PIC32MX\port_asm.S|RegisterTestTasks.s|..\..\Source\portable\MemMang\heap_2.c|..\Common\Minimal\flash.c|..\Common\Minimal\QPeek.c|..\Common\Minimal\semtest.c|..\Common\Minimal\GenQTest.c|..\Common\Minimal\integer.c|..\Common\Minimal\blocktim.c|lcd.c|serial\serial.c|..\Common\Minimal\comtest.c|serial\serial_isr.S|timertest.c||<obj>||<lib>||<lkr>||
|
||||
SuiteArgsString=
|
||||
ToolArgsString=-g -DMPLAB_PIC32MX_PORT -Wall -fomit-frame-pointer
|
||||
TraceCmdString=
|
||||
[File009]
|
||||
Location=C:\Temp\RC\1\Demo\PIC32MX_MPLAB\flash.o
|
||||
Folder=Intermediary
|
||||
DeviceName=PIC32MX360F512L
|
||||
LanguageToolSuiteID={14495C23-81F8-43F3-8A44-859C583D7760}
|
||||
LanguageToolID={430F471F-7ECB-4852-A80D-DEF9A5C8E751}
|
||||
LanguageToolLocation=C:\Devtools\Microchip\MPLAB C32\bin\pic32-gcc.exe
|
||||
PPAD=$(BINDIR)||$(TMPDIR)||$(AINDIR)|..\..\Source\portable\MPLAB\PIC32MX;.||$(INCDIR)|.;.;..\common\include;..\..\source\portable\mplab\pic32mx;..\..\source\include||$(LIBDIR)||$(LKRDIR)||
|
||||
SOLK=<src>|main.c|ParTest\ParTest.c|..\..\Source\portable\MPLAB\PIC32MX\port.c|..\..\Source\list.c|..\..\Source\queue.c|..\..\Source\tasks.c|..\..\Source\portable\MPLAB\PIC32MX\port_asm.S|RegisterTestTasks.s|..\..\Source\portable\MemMang\heap_2.c|..\Common\Minimal\flash.c|..\Common\Minimal\QPeek.c|..\Common\Minimal\semtest.c|..\Common\Minimal\GenQTest.c|..\Common\Minimal\integer.c|..\Common\Minimal\blocktim.c|lcd.c|serial\serial.c|..\Common\Minimal\comtest.c|serial\serial_isr.S|timertest.c||<obj>||<lib>||<lkr>||
|
||||
SuiteArgsString=
|
||||
ToolArgsString=-g -DMPLAB_PIC32MX_PORT -Wall -fomit-frame-pointer
|
||||
TraceCmdString=
|
||||
[File010]
|
||||
Location=C:\Temp\RC\1\Demo\PIC32MX_MPLAB\QPeek.o
|
||||
Folder=Intermediary
|
||||
DeviceName=PIC32MX360F512L
|
||||
LanguageToolSuiteID={14495C23-81F8-43F3-8A44-859C583D7760}
|
||||
LanguageToolID={430F471F-7ECB-4852-A80D-DEF9A5C8E751}
|
||||
LanguageToolLocation=C:\Devtools\Microchip\MPLAB C32\bin\pic32-gcc.exe
|
||||
PPAD=$(BINDIR)||$(TMPDIR)||$(AINDIR)|..\..\Source\portable\MPLAB\PIC32MX;.||$(INCDIR)|.;.;..\common\include;..\..\source\portable\mplab\pic32mx;..\..\source\include||$(LIBDIR)||$(LKRDIR)||
|
||||
SOLK=<src>|main.c|ParTest\ParTest.c|..\..\Source\portable\MPLAB\PIC32MX\port.c|..\..\Source\list.c|..\..\Source\queue.c|..\..\Source\tasks.c|..\..\Source\portable\MPLAB\PIC32MX\port_asm.S|RegisterTestTasks.s|..\..\Source\portable\MemMang\heap_2.c|..\Common\Minimal\flash.c|..\Common\Minimal\QPeek.c|..\Common\Minimal\semtest.c|..\Common\Minimal\GenQTest.c|..\Common\Minimal\integer.c|..\Common\Minimal\blocktim.c|lcd.c|serial\serial.c|..\Common\Minimal\comtest.c|serial\serial_isr.S|timertest.c||<obj>||<lib>||<lkr>||
|
||||
SuiteArgsString=
|
||||
ToolArgsString=-g -DMPLAB_PIC32MX_PORT -Wall -fomit-frame-pointer
|
||||
TraceCmdString=
|
||||
[File011]
|
||||
Location=C:\Temp\RC\1\Demo\PIC32MX_MPLAB\semtest.o
|
||||
Folder=Intermediary
|
||||
DeviceName=PIC32MX360F512L
|
||||
LanguageToolSuiteID={14495C23-81F8-43F3-8A44-859C583D7760}
|
||||
LanguageToolID={430F471F-7ECB-4852-A80D-DEF9A5C8E751}
|
||||
LanguageToolLocation=C:\Devtools\Microchip\MPLAB C32\bin\pic32-gcc.exe
|
||||
PPAD=$(BINDIR)||$(TMPDIR)||$(AINDIR)|..\..\Source\portable\MPLAB\PIC32MX;.||$(INCDIR)|.;.;..\common\include;..\..\source\portable\mplab\pic32mx;..\..\source\include||$(LIBDIR)||$(LKRDIR)||
|
||||
SOLK=<src>|main.c|ParTest\ParTest.c|..\..\Source\portable\MPLAB\PIC32MX\port.c|..\..\Source\list.c|..\..\Source\queue.c|..\..\Source\tasks.c|..\..\Source\portable\MPLAB\PIC32MX\port_asm.S|RegisterTestTasks.s|..\..\Source\portable\MemMang\heap_2.c|..\Common\Minimal\flash.c|..\Common\Minimal\QPeek.c|..\Common\Minimal\semtest.c|..\Common\Minimal\GenQTest.c|..\Common\Minimal\integer.c|..\Common\Minimal\blocktim.c|lcd.c|serial\serial.c|..\Common\Minimal\comtest.c|serial\serial_isr.S|timertest.c||<obj>||<lib>||<lkr>||
|
||||
SuiteArgsString=
|
||||
ToolArgsString=-g -DMPLAB_PIC32MX_PORT -Wall -fomit-frame-pointer
|
||||
TraceCmdString=
|
||||
[File012]
|
||||
Location=C:\Temp\RC\1\Demo\PIC32MX_MPLAB\GenQTest.o
|
||||
Folder=Intermediary
|
||||
DeviceName=PIC32MX360F512L
|
||||
LanguageToolSuiteID={14495C23-81F8-43F3-8A44-859C583D7760}
|
||||
LanguageToolID={430F471F-7ECB-4852-A80D-DEF9A5C8E751}
|
||||
LanguageToolLocation=C:\Devtools\Microchip\MPLAB C32\bin\pic32-gcc.exe
|
||||
PPAD=$(BINDIR)||$(TMPDIR)||$(AINDIR)|..\..\Source\portable\MPLAB\PIC32MX;.||$(INCDIR)|.;.;..\common\include;..\..\source\portable\mplab\pic32mx;..\..\source\include||$(LIBDIR)||$(LKRDIR)||
|
||||
SOLK=<src>|main.c|ParTest\ParTest.c|..\..\Source\portable\MPLAB\PIC32MX\port.c|..\..\Source\list.c|..\..\Source\queue.c|..\..\Source\tasks.c|..\..\Source\portable\MPLAB\PIC32MX\port_asm.S|RegisterTestTasks.s|..\..\Source\portable\MemMang\heap_2.c|..\Common\Minimal\flash.c|..\Common\Minimal\QPeek.c|..\Common\Minimal\semtest.c|..\Common\Minimal\GenQTest.c|..\Common\Minimal\integer.c|..\Common\Minimal\blocktim.c|lcd.c|serial\serial.c|..\Common\Minimal\comtest.c|serial\serial_isr.S|timertest.c||<obj>||<lib>||<lkr>||
|
||||
SuiteArgsString=
|
||||
ToolArgsString=-g -DMPLAB_PIC32MX_PORT -Wall -fomit-frame-pointer
|
||||
TraceCmdString=
|
||||
[File013]
|
||||
Location=C:\Temp\RC\1\Demo\PIC32MX_MPLAB\integer.o
|
||||
Folder=Intermediary
|
||||
DeviceName=PIC32MX360F512L
|
||||
LanguageToolSuiteID={14495C23-81F8-43F3-8A44-859C583D7760}
|
||||
LanguageToolID={430F471F-7ECB-4852-A80D-DEF9A5C8E751}
|
||||
LanguageToolLocation=C:\Devtools\Microchip\MPLAB C32\bin\pic32-gcc.exe
|
||||
PPAD=$(BINDIR)||$(TMPDIR)||$(AINDIR)|..\..\Source\portable\MPLAB\PIC32MX;.||$(INCDIR)|.;.;..\common\include;..\..\source\portable\mplab\pic32mx;..\..\source\include||$(LIBDIR)||$(LKRDIR)||
|
||||
SOLK=<src>|main.c|ParTest\ParTest.c|..\..\Source\portable\MPLAB\PIC32MX\port.c|..\..\Source\list.c|..\..\Source\queue.c|..\..\Source\tasks.c|..\..\Source\portable\MPLAB\PIC32MX\port_asm.S|RegisterTestTasks.s|..\..\Source\portable\MemMang\heap_2.c|..\Common\Minimal\flash.c|..\Common\Minimal\QPeek.c|..\Common\Minimal\semtest.c|..\Common\Minimal\GenQTest.c|..\Common\Minimal\integer.c|..\Common\Minimal\blocktim.c|lcd.c|serial\serial.c|..\Common\Minimal\comtest.c|serial\serial_isr.S|timertest.c||<obj>||<lib>||<lkr>||
|
||||
SuiteArgsString=
|
||||
ToolArgsString=-g -DMPLAB_PIC32MX_PORT -Wall -fomit-frame-pointer
|
||||
TraceCmdString=
|
||||
[File014]
|
||||
Location=C:\Temp\RC\1\Demo\PIC32MX_MPLAB\blocktim.o
|
||||
Folder=Intermediary
|
||||
DeviceName=PIC32MX360F512L
|
||||
LanguageToolSuiteID={14495C23-81F8-43F3-8A44-859C583D7760}
|
||||
LanguageToolID={430F471F-7ECB-4852-A80D-DEF9A5C8E751}
|
||||
LanguageToolLocation=C:\Devtools\Microchip\MPLAB C32\bin\pic32-gcc.exe
|
||||
PPAD=$(BINDIR)||$(TMPDIR)||$(AINDIR)|..\..\Source\portable\MPLAB\PIC32MX;.||$(INCDIR)|.;.;..\common\include;..\..\source\portable\mplab\pic32mx;..\..\source\include||$(LIBDIR)||$(LKRDIR)||
|
||||
SOLK=<src>|main.c|ParTest\ParTest.c|..\..\Source\portable\MPLAB\PIC32MX\port.c|..\..\Source\list.c|..\..\Source\queue.c|..\..\Source\tasks.c|..\..\Source\portable\MPLAB\PIC32MX\port_asm.S|RegisterTestTasks.s|..\..\Source\portable\MemMang\heap_2.c|..\Common\Minimal\flash.c|..\Common\Minimal\QPeek.c|..\Common\Minimal\semtest.c|..\Common\Minimal\GenQTest.c|..\Common\Minimal\integer.c|..\Common\Minimal\blocktim.c|lcd.c|serial\serial.c|..\Common\Minimal\comtest.c|serial\serial_isr.S|timertest.c||<obj>||<lib>||<lkr>||
|
||||
SuiteArgsString=
|
||||
ToolArgsString=-g -DMPLAB_PIC32MX_PORT -Wall -fomit-frame-pointer
|
||||
TraceCmdString=
|
||||
[File015]
|
||||
Location=C:\Temp\RC\1\Demo\PIC32MX_MPLAB\lcd.o
|
||||
Folder=Intermediary
|
||||
DeviceName=PIC32MX360F512L
|
||||
LanguageToolSuiteID={14495C23-81F8-43F3-8A44-859C583D7760}
|
||||
LanguageToolID={430F471F-7ECB-4852-A80D-DEF9A5C8E751}
|
||||
LanguageToolLocation=C:\Devtools\Microchip\MPLAB C32\bin\pic32-gcc.exe
|
||||
PPAD=$(BINDIR)||$(TMPDIR)||$(AINDIR)|..\..\Source\portable\MPLAB\PIC32MX;.||$(INCDIR)|.;.;..\common\include;..\..\source\portable\mplab\pic32mx;..\..\source\include||$(LIBDIR)||$(LKRDIR)||
|
||||
SOLK=<src>|main.c|ParTest\ParTest.c|..\..\Source\portable\MPLAB\PIC32MX\port.c|..\..\Source\list.c|..\..\Source\queue.c|..\..\Source\tasks.c|..\..\Source\portable\MPLAB\PIC32MX\port_asm.S|RegisterTestTasks.s|..\..\Source\portable\MemMang\heap_2.c|..\Common\Minimal\flash.c|..\Common\Minimal\QPeek.c|..\Common\Minimal\semtest.c|..\Common\Minimal\GenQTest.c|..\Common\Minimal\integer.c|..\Common\Minimal\blocktim.c|lcd.c|serial\serial.c|..\Common\Minimal\comtest.c|serial\serial_isr.S|timertest.c||<obj>||<lib>||<lkr>||
|
||||
SuiteArgsString=
|
||||
ToolArgsString=-g -DMPLAB_PIC32MX_PORT -Wall -fomit-frame-pointer
|
||||
TraceCmdString=
|
||||
[File016]
|
||||
Location=C:\Temp\RC\1\Demo\PIC32MX_MPLAB\serial.o
|
||||
Folder=Intermediary
|
||||
DeviceName=PIC32MX360F512L
|
||||
LanguageToolSuiteID={14495C23-81F8-43F3-8A44-859C583D7760}
|
||||
LanguageToolID={430F471F-7ECB-4852-A80D-DEF9A5C8E751}
|
||||
LanguageToolLocation=C:\Devtools\Microchip\MPLAB C32\bin\pic32-gcc.exe
|
||||
PPAD=$(BINDIR)||$(TMPDIR)||$(AINDIR)|..\..\Source\portable\MPLAB\PIC32MX;.||$(INCDIR)|.;.;..\common\include;..\..\source\portable\mplab\pic32mx;..\..\source\include||$(LIBDIR)||$(LKRDIR)||
|
||||
SOLK=<src>|main.c|ParTest\ParTest.c|..\..\Source\portable\MPLAB\PIC32MX\port.c|..\..\Source\list.c|..\..\Source\queue.c|..\..\Source\tasks.c|..\..\Source\portable\MPLAB\PIC32MX\port_asm.S|RegisterTestTasks.s|..\..\Source\portable\MemMang\heap_2.c|..\Common\Minimal\flash.c|..\Common\Minimal\QPeek.c|..\Common\Minimal\semtest.c|..\Common\Minimal\GenQTest.c|..\Common\Minimal\integer.c|..\Common\Minimal\blocktim.c|lcd.c|serial\serial.c|..\Common\Minimal\comtest.c|serial\serial_isr.S|timertest.c||<obj>||<lib>||<lkr>||
|
||||
SuiteArgsString=
|
||||
ToolArgsString=-g -DMPLAB_PIC32MX_PORT -Wall -fomit-frame-pointer
|
||||
TraceCmdString=
|
||||
[File017]
|
||||
Location=C:\Temp\RC\1\Demo\PIC32MX_MPLAB\comtest.o
|
||||
Folder=Intermediary
|
||||
DeviceName=PIC32MX360F512L
|
||||
LanguageToolSuiteID={14495C23-81F8-43F3-8A44-859C583D7760}
|
||||
LanguageToolID={430F471F-7ECB-4852-A80D-DEF9A5C8E751}
|
||||
LanguageToolLocation=C:\Devtools\Microchip\MPLAB C32\bin\pic32-gcc.exe
|
||||
PPAD=$(BINDIR)||$(TMPDIR)||$(AINDIR)|..\..\Source\portable\MPLAB\PIC32MX;.||$(INCDIR)|.;.;..\common\include;..\..\source\portable\mplab\pic32mx;..\..\source\include||$(LIBDIR)||$(LKRDIR)||
|
||||
SOLK=<src>|main.c|ParTest\ParTest.c|..\..\Source\portable\MPLAB\PIC32MX\port.c|..\..\Source\list.c|..\..\Source\queue.c|..\..\Source\tasks.c|..\..\Source\portable\MPLAB\PIC32MX\port_asm.S|RegisterTestTasks.s|..\..\Source\portable\MemMang\heap_2.c|..\Common\Minimal\flash.c|..\Common\Minimal\QPeek.c|..\Common\Minimal\semtest.c|..\Common\Minimal\GenQTest.c|..\Common\Minimal\integer.c|..\Common\Minimal\blocktim.c|lcd.c|serial\serial.c|..\Common\Minimal\comtest.c|serial\serial_isr.S|timertest.c||<obj>||<lib>||<lkr>||
|
||||
SuiteArgsString=
|
||||
ToolArgsString=-g -DMPLAB_PIC32MX_PORT -Wall -fomit-frame-pointer
|
||||
TraceCmdString=
|
||||
[File018]
|
||||
Location=C:\Temp\RC\1\Demo\PIC32MX_MPLAB\serial_isr.o
|
||||
Folder=Intermediary
|
||||
DeviceName=PIC32MX360F512L
|
||||
LanguageToolSuiteID={14495C23-81F8-43F3-8A44-859C583D7760}
|
||||
LanguageToolID={92E15EC6-5E91-4BF4-B5FA-C80AD2601AA7}
|
||||
LanguageToolLocation=C:\Devtools\Microchip\MPLAB C32\bin\pic32-as.exe
|
||||
PPAD=$(BINDIR)||$(TMPDIR)||$(AINDIR)|..\..\Source\portable\MPLAB\PIC32MX;.||$(INCDIR)|.;.;..\common\include;..\..\source\portable\mplab\pic32mx;..\..\source\include||$(LIBDIR)||$(LKRDIR)||
|
||||
SOLK=<src>|main.c|ParTest\ParTest.c|..\..\Source\portable\MPLAB\PIC32MX\port.c|..\..\Source\list.c|..\..\Source\queue.c|..\..\Source\tasks.c|..\..\Source\portable\MPLAB\PIC32MX\port_asm.S|RegisterTestTasks.s|..\..\Source\portable\MemMang\heap_2.c|..\Common\Minimal\flash.c|..\Common\Minimal\QPeek.c|..\Common\Minimal\semtest.c|..\Common\Minimal\GenQTest.c|..\Common\Minimal\integer.c|..\Common\Minimal\blocktim.c|lcd.c|serial\serial.c|..\Common\Minimal\comtest.c|serial\serial_isr.S|timertest.c||<obj>||<lib>||<lkr>||
|
||||
SuiteArgsString=
|
||||
ToolArgsString=--keep-locals --gdwarf-2
|
||||
TraceCmdString=
|
||||
[File019]
|
||||
Location=C:\Temp\RC\1\Demo\PIC32MX_MPLAB\timertest.o
|
||||
Folder=Intermediary
|
||||
DeviceName=PIC32MX360F512L
|
||||
LanguageToolSuiteID={14495C23-81F8-43F3-8A44-859C583D7760}
|
||||
LanguageToolID={430F471F-7ECB-4852-A80D-DEF9A5C8E751}
|
||||
LanguageToolLocation=C:\Devtools\Microchip\MPLAB C32\bin\pic32-gcc.exe
|
||||
PPAD=$(BINDIR)||$(TMPDIR)||$(AINDIR)|..\..\Source\portable\MPLAB\PIC32MX;.||$(INCDIR)|.;.;..\common\include;..\..\source\portable\mplab\pic32mx;..\..\source\include||$(LIBDIR)||$(LKRDIR)||
|
||||
SOLK=<src>|main.c|ParTest\ParTest.c|..\..\Source\portable\MPLAB\PIC32MX\port.c|..\..\Source\list.c|..\..\Source\queue.c|..\..\Source\tasks.c|..\..\Source\portable\MPLAB\PIC32MX\port_asm.S|RegisterTestTasks.s|..\..\Source\portable\MemMang\heap_2.c|..\Common\Minimal\flash.c|..\Common\Minimal\QPeek.c|..\Common\Minimal\semtest.c|..\Common\Minimal\GenQTest.c|..\Common\Minimal\integer.c|..\Common\Minimal\blocktim.c|lcd.c|serial\serial.c|..\Common\Minimal\comtest.c|serial\serial_isr.S|timertest.c||<obj>||<lib>||<lkr>||
|
||||
SuiteArgsString=
|
||||
ToolArgsString=-g -DMPLAB_PIC32MX_PORT -Wall -fomit-frame-pointer
|
||||
TraceCmdString=
|
||||
[File020]
|
||||
Location=C:\Temp\RC\1\Demo\PIC32MX_MPLAB\RTOSDemo.elf
|
||||
Folder=Output
|
||||
DeviceName=PIC32MX360F512L
|
||||
LanguageToolSuiteID={14495C23-81F8-43F3-8A44-859C583D7760}
|
||||
LanguageToolID={C68E5105-1196-4333-A0BF-3DC57271E614}
|
||||
LanguageToolLocation=C:\Devtools\Microchip\MPLAB C32\bin\pic32-ld.exe
|
||||
PPAD=$(BINDIR)||$(TMPDIR)||$(AINDIR)|..\..\Source\portable\MPLAB\PIC32MX;.||$(INCDIR)|.;.;..\common\include;..\..\source\portable\mplab\pic32mx;..\..\source\include||$(LIBDIR)||$(LKRDIR)||
|
||||
SOLK=<src>|main.c|ParTest\ParTest.c|..\..\Source\portable\MPLAB\PIC32MX\port.c|..\..\Source\list.c|..\..\Source\queue.c|..\..\Source\tasks.c|..\..\Source\portable\MPLAB\PIC32MX\port_asm.S|RegisterTestTasks.s|..\..\Source\portable\MemMang\heap_2.c|..\Common\Minimal\flash.c|..\Common\Minimal\QPeek.c|..\Common\Minimal\semtest.c|..\Common\Minimal\GenQTest.c|..\Common\Minimal\integer.c|..\Common\Minimal\blocktim.c|lcd.c|serial\serial.c|..\Common\Minimal\comtest.c|serial\serial_isr.S|timertest.c||<obj>||<lib>||<lkr>||
|
||||
SuiteArgsString=
|
||||
ToolArgsString=-o"$(BINDIR_)$(TARGETBASE).$(TARGETSUFFIX)" -Map="$(BINDIR_)$(TARGETBASE).map"
|
||||
TraceCmdString=
|
||||
[File021]
|
||||
Location=C:\Temp\RC\1\Demo\PIC32MX_MPLAB\RTOSDemo.hex
|
||||
Folder=Output
|
||||
DeviceName=PIC32MX360F512L
|
||||
LanguageToolSuiteID={14495C23-81F8-43F3-8A44-859C583D7760}
|
||||
LanguageToolID={C68E5105-1196-4333-A0BF-3DC57271E614}
|
||||
LanguageToolLocation=C:\Devtools\Microchip\MPLAB C32\bin\pic32-ld.exe
|
||||
PPAD=$(BINDIR)||$(TMPDIR)||$(AINDIR)|..\..\Source\portable\MPLAB\PIC32MX;.||$(INCDIR)|.;.;..\common\include;..\..\source\portable\mplab\pic32mx;..\..\source\include||$(LIBDIR)||$(LKRDIR)||
|
||||
SOLK=<src>|main.c|ParTest\ParTest.c|..\..\Source\portable\MPLAB\PIC32MX\port.c|..\..\Source\list.c|..\..\Source\queue.c|..\..\Source\tasks.c|..\..\Source\portable\MPLAB\PIC32MX\port_asm.S|RegisterTestTasks.s|..\..\Source\portable\MemMang\heap_2.c|..\Common\Minimal\flash.c|..\Common\Minimal\QPeek.c|..\Common\Minimal\semtest.c|..\Common\Minimal\GenQTest.c|..\Common\Minimal\integer.c|..\Common\Minimal\blocktim.c|lcd.c|serial\serial.c|..\Common\Minimal\comtest.c|serial\serial_isr.S|timertest.c||<obj>||<lib>||<lkr>||
|
||||
SuiteArgsString=
|
||||
ToolArgsString=-o"$(BINDIR_)$(TARGETBASE).$(TARGETSUFFIX)" -Map="$(BINDIR_)$(TARGETBASE).map"
|
||||
TraceCmdString=
|
||||
[TOOL_LOC_STAMPS]
|
||||
tool_loc{92E15EC6-5E91-4BF4-B5FA-C80AD2601AA7}=C:\Devtools\Microchip\MPLAB C32\bin\pic32-as.exe
|
||||
tool_loc{430F471F-7ECB-4852-A80D-DEF9A5C8E751}=C:\Devtools\Microchip\MPLAB C32\bin\pic32-gcc.exe
|
||||
tool_loc{C68E5105-1196-4333-A0BF-3DC57271E614}=C:\Devtools\Microchip\MPLAB C32\bin\pic32-ld.exe
|
Binary file not shown.
@ -0,0 +1,333 @@
|
||||
/*
|
||||
FreeRTOS.org V4.6.1 - Copyright (C) 2003-2007 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.
|
||||
|
||||
Also see http://www.SafeRTOS.com a version that has been certified for use
|
||||
in safety critical systems, plus commercial licensing, development and
|
||||
support options.
|
||||
***************************************************************************
|
||||
*/
|
||||
|
||||
|
||||
#include <p32xxxx.h>
|
||||
#include <sys/asm.h>
|
||||
|
||||
.set nomips16
|
||||
.set noreorder
|
||||
|
||||
|
||||
.global vRegTest1
|
||||
.global vRegTest2
|
||||
|
||||
|
||||
/* .section .FreeRTOS, ax, @progbits */
|
||||
.set noreorder
|
||||
.set noat
|
||||
.ent vRegTest1
|
||||
|
||||
/* Address of $4 ulStatus1 is held in A0, so don't mess with the value of $4 */
|
||||
|
||||
vRegTest1:
|
||||
addiu $1, $0, 0x11
|
||||
addiu $2, $0, 0x12
|
||||
addiu $3, $0, 0x13
|
||||
addiu $5, $0, 0x15
|
||||
addiu $6, $0, 0x16
|
||||
addiu $7, $0, 0x17
|
||||
addiu $8, $0, 0x18
|
||||
addiu $9, $0, 0x19
|
||||
addiu $10, $0, 0x110
|
||||
addiu $11, $0, 0x111
|
||||
addiu $12, $0, 0x112
|
||||
addiu $13, $0, 0x113
|
||||
addiu $14, $0, 0x114
|
||||
addiu $15, $0, 0x115
|
||||
addiu $16, $0, 0x116
|
||||
addiu $17, $0, 0x117
|
||||
addiu $18, $0, 0x118
|
||||
addiu $19, $0, 0x119
|
||||
addiu $20, $0, 0x120
|
||||
addiu $21, $0, 0x121
|
||||
addiu $22, $0, 0x122
|
||||
addiu $23, $0, 0x123
|
||||
addiu $24, $0, 0x124
|
||||
addiu $25, $0, 0x125
|
||||
addiu $30, $0, 0x130
|
||||
|
||||
#if configUSE_PREEMPTION == 0
|
||||
syscall 0
|
||||
#endif
|
||||
|
||||
addiu $1, $1, -0x11
|
||||
beq $1, $0, .+12
|
||||
nop
|
||||
sw $0, 0($4)
|
||||
addiu $2, $2, -0x12
|
||||
beq $2, $0, .+12
|
||||
nop
|
||||
sw $0, 0($4)
|
||||
addiu $3, $3, -0x13
|
||||
beq $3, $0, .+12
|
||||
nop
|
||||
sw $0, 0($4)
|
||||
addiu $5, $5, -0x15
|
||||
beq $5, $0, .+12
|
||||
nop
|
||||
sw $0, 0($4)
|
||||
addiu $6, $6, -0x16
|
||||
beq $6, $0, .+12
|
||||
nop
|
||||
sw $0, 0($4)
|
||||
addiu $7, $7, -0x17
|
||||
beq $7, $0, .+12
|
||||
nop
|
||||
sw $0, 0($4)
|
||||
addiu $8, $8, -0x18
|
||||
beq $8, $0, .+12
|
||||
nop
|
||||
sw $0, 0($4)
|
||||
addiu $9, $9, -0x19
|
||||
beq $9, $0, .+12
|
||||
nop
|
||||
sw $0, 0($4)
|
||||
addiu $10, $10, -0x110
|
||||
beq $10, $0, .+12
|
||||
nop
|
||||
sw $0, 0($4)
|
||||
addiu $11, $11, -0x111
|
||||
beq $11, $0, .+12
|
||||
nop
|
||||
sw $0, 0($4)
|
||||
addiu $12, $12, -0x112
|
||||
beq $12, $0, .+12
|
||||
nop
|
||||
sw $0, 0($4)
|
||||
addiu $13, $13, -0x113
|
||||
beq $13, $0, .+12
|
||||
nop
|
||||
sw $0, 0($4)
|
||||
addiu $14, $14, -0x114
|
||||
beq $14, $0, .+12
|
||||
nop
|
||||
sw $0, 0($4)
|
||||
addiu $15, $15, -0x115
|
||||
beq $15, $0, .+12
|
||||
nop
|
||||
sw $0, 0($4)
|
||||
addiu $16, $16, -0x116
|
||||
beq $16, $0, .+12
|
||||
nop
|
||||
sw $0, 0($4)
|
||||
addiu $17, $17, -0x117
|
||||
beq $17, $0, .+12
|
||||
nop
|
||||
sw $0, 0($4)
|
||||
addiu $18, $18, -0x118
|
||||
beq $18, $0, .+12
|
||||
nop
|
||||
sw $0, 0($4)
|
||||
addiu $19, $19, -0x119
|
||||
beq $19, $0, .+12
|
||||
nop
|
||||
sw $0, 0($4)
|
||||
addiu $20, $20, -0x120
|
||||
beq $20, $0, .+12
|
||||
nop
|
||||
sw $0, 0($4)
|
||||
addiu $21, $21, -0x121
|
||||
beq $21, $0, .+12
|
||||
nop
|
||||
sw $0, 0($4)
|
||||
addiu $22, $22, -0x122
|
||||
beq $22, $0, .+12
|
||||
nop
|
||||
sw $0, 0($4)
|
||||
addiu $23, $23, -0x123
|
||||
beq $23, $0, .+12
|
||||
nop
|
||||
sw $0, 0($4)
|
||||
addiu $24, $24, -0x124
|
||||
beq $24, $0, .+12
|
||||
nop
|
||||
sw $0, 0($4)
|
||||
addiu $25, $25, -0x125
|
||||
beq $25, $0, .+12
|
||||
nop
|
||||
sw $0, 0($4)
|
||||
addiu $30, $30, -0x130
|
||||
beq $30, $0, .+12
|
||||
nop
|
||||
sw $0, 0($4)
|
||||
jr $31
|
||||
nop
|
||||
|
||||
.end vRegTest1
|
||||
|
||||
|
||||
/* .section .FreeRTOS, ax, @progbits */
|
||||
.set noreorder
|
||||
.set noat
|
||||
.ent vRegTest2
|
||||
|
||||
vRegTest2:
|
||||
|
||||
addiu $1, $0, 0x10
|
||||
addiu $2, $0, 0x20
|
||||
addiu $3, $0, 0x30
|
||||
addiu $5, $0, 0x50
|
||||
addiu $6, $0, 0x60
|
||||
addiu $7, $0, 0x70
|
||||
addiu $8, $0, 0x80
|
||||
addiu $9, $0, 0x90
|
||||
addiu $10, $0, 0x100
|
||||
addiu $11, $0, 0x110
|
||||
addiu $12, $0, 0x120
|
||||
addiu $13, $0, 0x130
|
||||
addiu $14, $0, 0x140
|
||||
addiu $15, $0, 0x150
|
||||
addiu $16, $0, 0x160
|
||||
addiu $17, $0, 0x170
|
||||
addiu $18, $0, 0x180
|
||||
addiu $19, $0, 0x190
|
||||
addiu $20, $0, 0x200
|
||||
addiu $21, $0, 0x210
|
||||
addiu $22, $0, 0x220
|
||||
addiu $23, $0, 0x230
|
||||
addiu $24, $0, 0x240
|
||||
addiu $25, $0, 0x250
|
||||
addiu $30, $0, 0x300
|
||||
|
||||
#if configUSE_PREEMPTION == 0
|
||||
syscall 0
|
||||
#endif
|
||||
|
||||
addiu $1, $1, -0x10
|
||||
beq $1, $0, .+12
|
||||
nop
|
||||
sw $0, 0($4)
|
||||
addiu $2, $2, -0x20
|
||||
beq $2, $0, .+12
|
||||
nop
|
||||
sw $0, 0($4)
|
||||
addiu $3, $3, -0x30
|
||||
beq $3, $0, .+12
|
||||
nop
|
||||
sw $0, 0($4)
|
||||
addiu $5, $5, -0x50
|
||||
beq $5, $0, .+12
|
||||
nop
|
||||
sw $0, 0($4)
|
||||
addiu $6, $6, -0x60
|
||||
beq $6, $0, .+12
|
||||
nop
|
||||
sw $0, 0($4)
|
||||
addiu $7, $7, -0x70
|
||||
beq $7, $0, .+12
|
||||
nop
|
||||
sw $0, 0($4)
|
||||
addiu $8, $8, -0x80
|
||||
beq $8, $0, .+12
|
||||
nop
|
||||
sw $0, 0($4)
|
||||
addiu $9, $9, -0x90
|
||||
beq $9, $0, .+12
|
||||
nop
|
||||
sw $0, 0($4)
|
||||
addiu $10, $10, -0x100
|
||||
beq $10, $0, .+12
|
||||
nop
|
||||
sw $0, 0($4)
|
||||
addiu $11, $11, -0x110
|
||||
beq $11, $0, .+12
|
||||
nop
|
||||
sw $0, 0($4)
|
||||
addiu $12, $12, -0x120
|
||||
beq $12, $0, .+12
|
||||
nop
|
||||
sw $0, 0($4)
|
||||
addiu $13, $13, -0x130
|
||||
beq $13, $0, .+12
|
||||
nop
|
||||
sw $0, 0($4)
|
||||
addiu $14, $14, -0x140
|
||||
beq $14, $0, .+12
|
||||
nop
|
||||
sw $0, 0($4)
|
||||
addiu $15, $15, -0x150
|
||||
beq $15, $0, .+12
|
||||
nop
|
||||
sw $0, 0($4)
|
||||
addiu $16, $16, -0x160
|
||||
beq $16, $0, .+12
|
||||
nop
|
||||
sw $0, 0($4)
|
||||
addiu $17, $17, -0x170
|
||||
beq $17, $0, .+12
|
||||
nop
|
||||
sw $0, 0($4)
|
||||
addiu $18, $18, -0x180
|
||||
beq $18, $0, .+12
|
||||
nop
|
||||
sw $0, 0($4)
|
||||
addiu $19, $19, -0x190
|
||||
beq $19, $0, .+12
|
||||
nop
|
||||
sw $0, 0($4)
|
||||
addiu $20, $20, -0x200
|
||||
beq $20, $0, .+12
|
||||
nop
|
||||
sw $0, 0($4)
|
||||
addiu $21, $21, -0x210
|
||||
beq $21, $0, .+12
|
||||
nop
|
||||
sw $0, 0($4)
|
||||
addiu $22, $22, -0x220
|
||||
beq $22, $0, .+12
|
||||
nop
|
||||
sw $0, 0($4)
|
||||
addiu $23, $23, -0x230
|
||||
beq $23, $0, .+12
|
||||
nop
|
||||
sw $0, 0($4)
|
||||
addiu $24, $24, -0x240
|
||||
beq $24, $0, .+12
|
||||
nop
|
||||
sw $0, 0($4)
|
||||
addiu $25, $25, -0x250
|
||||
beq $25, $0, .+12
|
||||
nop
|
||||
sw $0, 0($4)
|
||||
addiu $30, $30, -0x300
|
||||
beq $30, $0, .+12
|
||||
nop
|
||||
sw $0, 0($4)
|
||||
jr $31
|
||||
nop
|
||||
|
||||
.end vRegTest2
|
@ -0,0 +1,243 @@
|
||||
/*
|
||||
FreeRTOS.org V4.6.1 - Copyright (C) 2003-2007 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.
|
||||
|
||||
Also see http://www.SafeRTOS.com a version that has been certified for use
|
||||
in safety critical systems, plus commercial licensing, development and
|
||||
support options.
|
||||
***************************************************************************
|
||||
*/
|
||||
|
||||
/* peripheral library include */
|
||||
#include <plib.h>
|
||||
|
||||
/* Scheduler includes. */
|
||||
#include "FreeRTOS.h"
|
||||
#include "task.h"
|
||||
#include "queue.h"
|
||||
|
||||
/* Demo includes. */
|
||||
#include "lcd.h"
|
||||
|
||||
/*
|
||||
* The LCD is written to by more than one task so is controlled by this
|
||||
* 'gatekeeper' task. This is the only task that is actually permitted to
|
||||
* access the LCD directly. Other tasks wanting to display a message send
|
||||
* the message to the gatekeeper.
|
||||
*/
|
||||
static void vLCDTask( void *pvParameters );
|
||||
|
||||
/*
|
||||
* Setup the peripherals required to communicate with the LCD.
|
||||
*/
|
||||
static void prvSetupLCD( void );
|
||||
|
||||
/*
|
||||
* Move to the first (0) or second (1) row of the LCD.
|
||||
*/
|
||||
static void prvLCDGotoRow( unsigned portSHORT usRow );
|
||||
|
||||
/*
|
||||
* Write a string of text to the LCD.
|
||||
*/
|
||||
static void prvLCDPutString( portCHAR *pcString );
|
||||
|
||||
/*
|
||||
* Clear the LCD.
|
||||
*/
|
||||
static void prvLCDClear( void );
|
||||
|
||||
/*-----------------------------------------------------------*/
|
||||
|
||||
/* Brief delay to permit the LCD to catch up with commands. */
|
||||
#define lcdVERY_SHORT_DELAY ( 1 )
|
||||
#define lcdSHORT_DELAY ( 4 / portTICK_RATE_MS )
|
||||
#define lcdLONG_DELAY ( 15 / portTICK_RATE_MS )
|
||||
|
||||
/* LCD specific definitions. */
|
||||
#define LCD_CLEAR_DISPLAY_CMD 0x01
|
||||
#define LCD_CURSOR_HOME_CMD 0x02
|
||||
#define LCD_ENTRY_MODE_CMD 0x04
|
||||
#define LCD_ENTRY_MODE_INCREASE 0x02
|
||||
#define LCD_DISPLAY_CTRL_CMD 0x08
|
||||
#define LCD_DISPLAY_CTRL_DISPLAY_ON 0x04
|
||||
#define LCD_FUNCTION_SET_CMD 0x20
|
||||
#define LCD_FUNCTION_SET_8_BITS 0x10
|
||||
#define LCD_FUNCTION_SET_2_LINES 0x08
|
||||
#define LCD_FUNCTION_SET_LRG_FONT 0x04
|
||||
#define LCD_NEW_LINE 0xC0
|
||||
#define LCD_COMMAND_ADDRESS 0x00
|
||||
#define LCD_DATA_ADDRESS 0x01
|
||||
|
||||
/* The length of the queue used to send messages to the LCD gatekeeper task. */
|
||||
#define lcdQUEUE_SIZE 3
|
||||
|
||||
/*-----------------------------------------------------------*/
|
||||
|
||||
/* The queue used to send messages to the LCD task. */
|
||||
xQueueHandle xLCDQueue;
|
||||
|
||||
/* LCD access functions. */
|
||||
static void prvLCDCommand( portCHAR cCommand );
|
||||
static void prvLCDData( portCHAR cChar );
|
||||
|
||||
/*-----------------------------------------------------------*/
|
||||
|
||||
xQueueHandle xStartLCDTask( void )
|
||||
{
|
||||
/* Create the queue used by the LCD task. Messages for display on the LCD
|
||||
are received via this queue. */
|
||||
xLCDQueue = xQueueCreate( lcdQUEUE_SIZE, sizeof( xLCDMessage ));
|
||||
|
||||
/* Start the task that will write to the LCD. The LCD hardware is
|
||||
initialised from within the task itself so delays can be used. */
|
||||
xTaskCreate( vLCDTask, ( signed portCHAR * ) "LCD", configMINIMAL_STACK_SIZE, NULL, tskIDLE_PRIORITY + 1, NULL );
|
||||
|
||||
return xLCDQueue;
|
||||
}
|
||||
/*-----------------------------------------------------------*/
|
||||
|
||||
static void prvLCDGotoRow( unsigned portSHORT usRow )
|
||||
{
|
||||
if(usRow == 0)
|
||||
{
|
||||
prvLCDCommand( LCD_CURSOR_HOME_CMD );
|
||||
}
|
||||
else
|
||||
{
|
||||
prvLCDCommand( LCD_NEW_LINE );
|
||||
}
|
||||
}
|
||||
/*-----------------------------------------------------------*/
|
||||
|
||||
static void prvLCDCommand( portCHAR cCommand )
|
||||
{
|
||||
PMPSetAddress( LCD_COMMAND_ADDRESS );
|
||||
PMPMasterWrite( cCommand );
|
||||
vTaskDelay( lcdSHORT_DELAY );
|
||||
}
|
||||
/*-----------------------------------------------------------*/
|
||||
|
||||
static void prvLCDData( portCHAR cChar )
|
||||
{
|
||||
PMPSetAddress( LCD_DATA_ADDRESS );
|
||||
PMPMasterWrite( cChar );
|
||||
vTaskDelay( lcdVERY_SHORT_DELAY );
|
||||
}
|
||||
/*-----------------------------------------------------------*/
|
||||
|
||||
static void prvLCDPutString( portCHAR *pcString )
|
||||
{
|
||||
/* Write out each character with appropriate delay between each. */
|
||||
while(*pcString)
|
||||
{
|
||||
prvLCDData(*pcString);
|
||||
pcString++;
|
||||
vTaskDelay(lcdSHORT_DELAY);
|
||||
}
|
||||
}
|
||||
/*-----------------------------------------------------------*/
|
||||
|
||||
static void prvLCDClear(void)
|
||||
{
|
||||
prvLCDCommand(LCD_CLEAR_DISPLAY_CMD);
|
||||
}
|
||||
/*-----------------------------------------------------------*/
|
||||
|
||||
static void prvSetupLCD(void)
|
||||
{
|
||||
/* Wait for proper power up. */
|
||||
vTaskDelay( lcdLONG_DELAY );
|
||||
|
||||
/* Open the PMP port */
|
||||
mPMPOpen((PMP_ON | PMP_READ_WRITE_EN | PMP_CS2_CS1_EN |
|
||||
PMP_LATCH_POL_HI | PMP_CS2_POL_HI | PMP_CS1_POL_HI |
|
||||
PMP_WRITE_POL_HI | PMP_READ_POL_HI),
|
||||
(PMP_MODE_MASTER1 | PMP_WAIT_BEG_4 | PMP_WAIT_MID_15 |
|
||||
PMP_WAIT_END_4),
|
||||
PMP_PEN_0, 0);
|
||||
|
||||
/* Wait for the LCD to power up correctly. */
|
||||
vTaskDelay( lcdLONG_DELAY );
|
||||
vTaskDelay( lcdLONG_DELAY );
|
||||
vTaskDelay( lcdLONG_DELAY );
|
||||
|
||||
/* Set up the LCD function. */
|
||||
prvLCDCommand( LCD_FUNCTION_SET_CMD | LCD_FUNCTION_SET_8_BITS | LCD_FUNCTION_SET_2_LINES | LCD_FUNCTION_SET_LRG_FONT );
|
||||
|
||||
/* Turn the display on. */
|
||||
prvLCDCommand( LCD_DISPLAY_CTRL_CMD | LCD_DISPLAY_CTRL_DISPLAY_ON );
|
||||
|
||||
/* Clear the display. */
|
||||
prvLCDCommand( LCD_CLEAR_DISPLAY_CMD );
|
||||
vTaskDelay( lcdLONG_DELAY );
|
||||
|
||||
/* Increase the cursor. */
|
||||
prvLCDCommand( LCD_ENTRY_MODE_CMD | LCD_ENTRY_MODE_INCREASE );
|
||||
vTaskDelay( lcdLONG_DELAY );
|
||||
vTaskDelay( lcdLONG_DELAY );
|
||||
vTaskDelay( lcdLONG_DELAY );
|
||||
}
|
||||
/*-----------------------------------------------------------*/
|
||||
|
||||
static void vLCDTask(void *pvParameters)
|
||||
{
|
||||
xLCDMessage xMessage;
|
||||
unsigned portSHORT usRow = 0;
|
||||
|
||||
/* Initialise the hardware. This uses delays so must not be called prior
|
||||
to the scheduler being started. */
|
||||
prvSetupLCD();
|
||||
|
||||
/* Welcome message. */
|
||||
prvLCDPutString( "www.FreeRTOS.org" );
|
||||
|
||||
for(;;)
|
||||
{
|
||||
/* Wait for a message to arrive that requires displaying. */
|
||||
while( xQueueReceive( xLCDQueue, &xMessage, portMAX_DELAY ) != pdPASS );
|
||||
|
||||
/* Clear the current display value. */
|
||||
prvLCDClear();
|
||||
|
||||
/* Switch rows each time so we can see that the display is still being
|
||||
updated. */
|
||||
prvLCDGotoRow( usRow & 0x01 );
|
||||
usRow++;
|
||||
prvLCDPutString( xMessage.pcMessage );
|
||||
|
||||
/* Delay the requested amount of time to ensure the text just written
|
||||
to the LCD is not overwritten. */
|
||||
vTaskDelay( xMessage.xMinDisplayTime );
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
@ -0,0 +1,58 @@
|
||||
/*
|
||||
FreeRTOS.org V4.6.1 - Copyright (C) 2003-2007 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.
|
||||
|
||||
Also see http://www.SafeRTOS.com a version that has been certified for use
|
||||
in safety critical systems, plus commercial licensing, development and
|
||||
support options.
|
||||
***************************************************************************
|
||||
*/
|
||||
|
||||
#ifndef LCD_INC_H
|
||||
#define LCD_INC_H
|
||||
|
||||
/* Create the task that will control the LCD. Returned is a handle to the queue
|
||||
on which messages to get written to the LCD should be written. */
|
||||
xQueueHandle xStartLCDTask( void );
|
||||
|
||||
typedef struct
|
||||
{
|
||||
/* The minimum amount of time the message should remain on the LCD without
|
||||
being overwritten. */
|
||||
portTickType xMinDisplayTime;
|
||||
|
||||
/* A pointer to the string to be displayed. */
|
||||
portCHAR *pcMessage;
|
||||
|
||||
} xLCDMessage;
|
||||
|
||||
|
||||
#endif /* LCD_INC_H */
|
||||
|
||||
|
@ -0,0 +1,362 @@
|
||||
/*
|
||||
FreeRTOS.org V4.6.1 - Copyright (C) 2003-2007 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.
|
||||
|
||||
Also see http://www.SafeRTOS.com a version that has been certified for use
|
||||
in safety critical systems, plus commercial licensing, development and
|
||||
support options.
|
||||
***************************************************************************
|
||||
*/
|
||||
|
||||
/*
|
||||
* 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:
|
||||
*
|
||||
* "Fast Interrupt Test" - A high frequency periodic interrupt is generated
|
||||
* using a free running timer to demonstrate the use of the
|
||||
* configKERNEL_INTERRUPT_PRIORITY configuration constant. The interrupt
|
||||
* service routine measures the number of processor clocks that occur between
|
||||
* each interrupt - and in so doing measures the jitter in the interrupt timing.
|
||||
* The maximum measured jitter time is latched in the ulMaxJitter variable, and
|
||||
* displayed on the LCD display by the 'LCD' task as described below. The
|
||||
* fast interrupt is configured and handled in the timertest.c source file.
|
||||
*
|
||||
* "LCD" task - the LCD task is a 'gatekeeper' task. It is the only task that
|
||||
* is permitted to access the display directly. Other tasks wishing to write a
|
||||
* message to the LCD send the message on a queue to the LCD task instead of
|
||||
* accessing the LCD themselves. The LCD task just blocks on the queue waiting
|
||||
* for messages - waking and displaying the messages as they arrive.
|
||||
*
|
||||
* "Check" task - This only executes every three seconds but has the highest
|
||||
* priority so is guaranteed to get processor time. Its main function is to
|
||||
* check that all the standard demo tasks are still operational. Should any
|
||||
* unexpected behaviour within a demo task be discovered the check task will
|
||||
* write an error to the LCD (via the LCD task). If all the demo tasks are
|
||||
* executing with their expected behaviour then the check task writes the
|
||||
* maximum jitter time to the LCD (as described above) - again via the LCD task.
|
||||
*
|
||||
* "Register test" tasks - These tasks are used in part to test the kernel port.
|
||||
* They set each processor register to a known value, then check that the
|
||||
* register still contains that value. Each of the tasks sets the registers
|
||||
* to different values, and will get swapping in and out between setting and
|
||||
* then subsequently checking the register values. Discovery of an incorrect
|
||||
* value would be indicative of an error in the task switching mechanism.
|
||||
*/
|
||||
|
||||
/* Standard includes. */
|
||||
#include <stdio.h>
|
||||
|
||||
/* Scheduler includes. */
|
||||
#include "FreeRTOS.h"
|
||||
#include "task.h"
|
||||
#include "queue.h"
|
||||
|
||||
/* Demo application includes. */
|
||||
#include "partest.h"
|
||||
#include "integer.h"
|
||||
#include "blocktim.h"
|
||||
#include "flash.h"
|
||||
#include "semtest.h"
|
||||
#include "GenQTest.h"
|
||||
#include "QPeek.h"
|
||||
#include "lcd.h"
|
||||
#include "comtest2.h"
|
||||
#include "timertest.h"
|
||||
|
||||
#pragma config FPLLMUL = MUL_18, FPLLIDIV = DIV_2, FPLLODIV = DIV_1, FWDTEN = OFF
|
||||
#pragma config POSCMOD = HS, FNOSC = PRIPLL, FPBDIV = DIV_2
|
||||
|
||||
/*-----------------------------------------------------------*/
|
||||
|
||||
/* The rate at which the LED controlled by the 'check' task will flash when no
|
||||
errors have been detected. */
|
||||
#define mainNO_ERROR_PERIOD ( 3000 / portTICK_RATE_MS )
|
||||
|
||||
/* The rate at which the LED controlled by the 'check' task will flash when an
|
||||
error has been detected. */
|
||||
#define mainERROR_PERIOD ( 500 )
|
||||
|
||||
/* The priorities of the various demo application tasks. */
|
||||
#define mainCHECK_TASK_PRIORITY ( tskIDLE_PRIORITY + 4 )
|
||||
#define mainSEM_TEST_PRIORITY ( tskIDLE_PRIORITY + 1 )
|
||||
#define mainBLOCK_Q_PRIORITY ( tskIDLE_PRIORITY + 2 )
|
||||
#define mainCOM_TEST_PRIORITY ( tskIDLE_PRIORITY + 2 )
|
||||
#define mainINTEGER_TASK_PRIORITY ( tskIDLE_PRIORITY )
|
||||
#define mainGEN_QUEUE_TASK_PRIORITY ( tskIDLE_PRIORITY )
|
||||
|
||||
/* The LED controlled by the 'check' task. */
|
||||
#define mainCHECK_LED ( 7 )
|
||||
|
||||
/* The LED used by the comtest tasks. mainCOM_TEST_LED + 1 is also used.
|
||||
See the comtest.c file for more information. */
|
||||
#define mainCOM_TEST_LED ( 4 )
|
||||
|
||||
/* Baud rate used by the comtest tasks. */
|
||||
#define mainCOM_TEST_BAUD_RATE ( 115200 )
|
||||
|
||||
/* Misc. */
|
||||
#define mainDONT_WAIT ( 0 )
|
||||
|
||||
/* Dimension the buffer used to hold the value of the maximum jitter time when
|
||||
it is converted to a string. */
|
||||
#define mainMAX_STRING_LENGTH ( 20 )
|
||||
|
||||
/* The frequency at which the "fast interrupt test" interrupt will occur. */
|
||||
#define mainTEST_INTERRUPT_FREQUENCY ( 20000 )
|
||||
|
||||
/* The number of timer clocks we expect to occur between each "fast
|
||||
interrupt test" interrupt. */
|
||||
#define mainEXPECTED_CLOCKS_BETWEEN_INTERRUPTS ( ( configCPU_CLOCK_HZ >> 1 ) / mainTEST_INTERRUPT_FREQUENCY )
|
||||
|
||||
/* The number of nano seconds between each core clock. */
|
||||
#define mainNS_PER_CLOCK ( ( unsigned portLONG ) ( ( 1.0 / ( double ) ( configCPU_CLOCK_HZ >> 1 ) ) * 1000000000.0 ) )
|
||||
|
||||
/*-----------------------------------------------------------*/
|
||||
|
||||
/*
|
||||
* Setup the processor ready for the demo.
|
||||
*/
|
||||
static void prvSetupHardware( void );
|
||||
|
||||
/*
|
||||
* Implements the 'check' task functionality as described at the top of this
|
||||
* file.
|
||||
*/
|
||||
static void prvCheckTask( void *pvParameters ) __attribute__((noreturn));
|
||||
|
||||
/*
|
||||
* Tasks that test the context switch mechanism by filling the processor
|
||||
* registers with known values, then checking that the values contained
|
||||
* within the registers is as expected. The tasks are likely to get swapped
|
||||
* in and out between setting the register values and checking the register
|
||||
* values. */
|
||||
static void prvTestTask1( void *pvParameters );
|
||||
static void prvTestTask2( void *pvParameters );
|
||||
|
||||
/*-----------------------------------------------------------*/
|
||||
|
||||
/* The queue used to send messages to the LCD task. */
|
||||
static xQueueHandle xLCDQueue;
|
||||
|
||||
/* Flag used by prvTestTask1() and prvTestTask2() to indicate their status
|
||||
(pass/fail). */
|
||||
unsigned portLONG ulStatus1 = pdPASS;
|
||||
|
||||
/* Variables incremented by prvTestTask1() and prvTestTask2() respectively on
|
||||
each iteration of their function. This is used to detect either task stopping
|
||||
their execution.. */
|
||||
unsigned portLONG ulRegTest1Cycles = 0, ulRegTest2Cycles = 0;
|
||||
|
||||
/*-----------------------------------------------------------*/
|
||||
|
||||
|
||||
/*
|
||||
* Create the demo tasks then start the scheduler.
|
||||
*/
|
||||
int main( void )
|
||||
{
|
||||
/* Configure any hardware required for this demo. */
|
||||
prvSetupHardware();
|
||||
|
||||
/* Create the LCD task - this returns the queue to use when writing
|
||||
messages to the LCD. */
|
||||
xLCDQueue = xStartLCDTask();
|
||||
|
||||
/* Create all the other standard demo tasks. */
|
||||
vStartLEDFlashTasks( tskIDLE_PRIORITY );
|
||||
vCreateBlockTimeTasks();
|
||||
vStartSemaphoreTasks( mainSEM_TEST_PRIORITY );
|
||||
vStartIntegerMathTasks( mainINTEGER_TASK_PRIORITY );
|
||||
vStartGenericQueueTasks( mainGEN_QUEUE_TASK_PRIORITY );
|
||||
vStartQueuePeekTasks();
|
||||
vAltStartComTestTasks( mainCOM_TEST_PRIORITY, mainCOM_TEST_BAUD_RATE, mainCOM_TEST_LED );
|
||||
|
||||
/* Create the tasks defined within this file. */
|
||||
xTaskCreate( prvTestTask1, "Tst1", configMINIMAL_STACK_SIZE, NULL, tskIDLE_PRIORITY, NULL );
|
||||
xTaskCreate( prvTestTask2, "Tst2", configMINIMAL_STACK_SIZE, NULL, tskIDLE_PRIORITY, NULL );
|
||||
|
||||
/* prvCheckTask uses sprintf so requires more stack. */
|
||||
xTaskCreate( prvCheckTask, "Check", configMINIMAL_STACK_SIZE * 2, NULL, mainCHECK_TASK_PRIORITY, NULL );
|
||||
|
||||
/* Setup the high frequency, high priority, timer test. */
|
||||
vSetupTimerTest( mainTEST_INTERRUPT_FREQUENCY );
|
||||
|
||||
/* Finally start the scheduler. */
|
||||
vTaskStartScheduler();
|
||||
|
||||
/* Will only reach here if there is insufficient heap available to start
|
||||
the scheduler. */
|
||||
return 0;
|
||||
}
|
||||
/*-----------------------------------------------------------*/
|
||||
|
||||
static void prvTestTask1( void *pvParameters )
|
||||
{
|
||||
extern void vRegTest1( unsigned long * );
|
||||
|
||||
for( ;; )
|
||||
{
|
||||
/* Perform the register test function. */
|
||||
vRegTest1( &ulStatus1 );
|
||||
|
||||
/* Increment the counter so the check task knows we are still
|
||||
running. */
|
||||
ulRegTest1Cycles++;
|
||||
}
|
||||
}
|
||||
/*-----------------------------------------------------------*/
|
||||
|
||||
static void prvTestTask2( void *pvParameters )
|
||||
{
|
||||
extern void vRegTest2( unsigned long * );
|
||||
|
||||
for( ;; )
|
||||
{
|
||||
/* Perform the register test function. */
|
||||
vRegTest2( &ulStatus1 );
|
||||
|
||||
/* Increment the counter so the check task knows we are still
|
||||
running. */
|
||||
ulRegTest2Cycles++;
|
||||
}
|
||||
}
|
||||
/*-----------------------------------------------------------*/
|
||||
|
||||
static void prvSetupHardware( void )
|
||||
{
|
||||
/* Set the system and peripheral bus speeds and enable the program cache*/
|
||||
SYSTEMConfigPerformance( configCPU_CLOCK_HZ );
|
||||
|
||||
/* Setup to use the external interrupt controller. */
|
||||
INTEnableSystemMultiVectoredInt();
|
||||
|
||||
portDISABLE_INTERRUPTS();
|
||||
|
||||
/* Setup the digital IO for the LED's. */
|
||||
vParTestInitialise();
|
||||
}
|
||||
/*-----------------------------------------------------------*/
|
||||
|
||||
static void prvCheckTask( void *pvParameters )
|
||||
{
|
||||
unsigned portLONG ulLastRegTest1Value = 0, ulLastRegTest2Value = 0, ulTicksToWait = mainNO_ERROR_PERIOD;
|
||||
portTickType xLastExecutionTime;
|
||||
|
||||
/* Buffer into which the maximum jitter time is written as a string. */
|
||||
static portCHAR cStringBuffer[ mainMAX_STRING_LENGTH ];
|
||||
|
||||
/* The maximum jitter time measured by the fast interrupt test. */
|
||||
extern unsigned portLONG ulMaxJitter ;
|
||||
xLCDMessage xMessage = { ( 200 / portTICK_RATE_MS ), cStringBuffer };
|
||||
|
||||
/* Initialise the variable used to control our iteration rate prior to
|
||||
its first use. */
|
||||
xLastExecutionTime = xTaskGetTickCount();
|
||||
|
||||
for( ;; )
|
||||
{
|
||||
/* Wait until it is time to run the tests again. */
|
||||
vTaskDelayUntil( &xLastExecutionTime, ulTicksToWait );
|
||||
|
||||
/* Has either register check 1 or 2 task discovered an error? */
|
||||
if( ulStatus1 != pdPASS )
|
||||
{
|
||||
ulTicksToWait = mainERROR_PERIOD;
|
||||
xMessage.pcMessage = "Error: Reg test1";
|
||||
}
|
||||
|
||||
/* Check that the register test 1 task is still running. */
|
||||
if( ulLastRegTest1Value == ulRegTest1Cycles )
|
||||
{
|
||||
ulTicksToWait = mainERROR_PERIOD;
|
||||
xMessage.pcMessage = "Error: Reg test2";
|
||||
}
|
||||
ulLastRegTest1Value = ulRegTest1Cycles;
|
||||
|
||||
|
||||
/* Check that the register test 2 task is still running. */
|
||||
if( ulLastRegTest2Value == ulRegTest2Cycles )
|
||||
{
|
||||
ulTicksToWait = mainERROR_PERIOD;
|
||||
xMessage.pcMessage = "Error: Reg test3";
|
||||
}
|
||||
ulLastRegTest2Value = ulRegTest2Cycles;
|
||||
|
||||
|
||||
/* Have any of the standard demo tasks detected an error in their
|
||||
operation? */
|
||||
if( xAreGenericQueueTasksStillRunning() != pdTRUE )
|
||||
{
|
||||
ulTicksToWait = mainERROR_PERIOD;
|
||||
xMessage.pcMessage = "Error: Gen Q";
|
||||
}
|
||||
else if( xAreQueuePeekTasksStillRunning() != pdTRUE )
|
||||
{
|
||||
ulTicksToWait = mainERROR_PERIOD;
|
||||
xMessage.pcMessage = "Error: Q Peek";
|
||||
}
|
||||
else if( xAreComTestTasksStillRunning() != pdTRUE )
|
||||
{
|
||||
ulTicksToWait = mainERROR_PERIOD;
|
||||
xMessage.pcMessage = "Error: COM test";
|
||||
}
|
||||
else if( xAreBlockTimeTestTasksStillRunning() != pdTRUE )
|
||||
{
|
||||
ulTicksToWait = mainERROR_PERIOD;
|
||||
xMessage.pcMessage = "Error: Blck time";
|
||||
}
|
||||
else if( xAreSemaphoreTasksStillRunning() != pdTRUE )
|
||||
{
|
||||
ulTicksToWait = mainERROR_PERIOD;
|
||||
xMessage.pcMessage = "Error: Sem test";
|
||||
}
|
||||
else if( xAreIntegerMathsTaskStillRunning() != pdTRUE )
|
||||
{
|
||||
ulTicksToWait = mainERROR_PERIOD;
|
||||
xMessage.pcMessage = "Error: Int math";
|
||||
}
|
||||
|
||||
/* Write the max jitter time to the string buffer. It will only be
|
||||
displayed if no errors have been detected. */
|
||||
sprintf( cStringBuffer, "%dns max jitter", ( int ) ( ( ulMaxJitter - mainEXPECTED_CLOCKS_BETWEEN_INTERRUPTS ) * mainNS_PER_CLOCK ) );
|
||||
|
||||
xQueueSend( xLCDQueue, &xMessage, mainDONT_WAIT );
|
||||
vParTestToggleLED( mainCHECK_LED );
|
||||
}
|
||||
}
|
||||
/*-----------------------------------------------------------*/
|
||||
|
||||
void vApplicationGeneralExceptionHandler( unsigned portLONG ulCause, unsigned portLONG ulStatus )
|
||||
{
|
||||
/* This overrides the definition provided by the kernel. Other exceptions
|
||||
should be handled here. */
|
||||
for( ;; );
|
||||
}
|
@ -0,0 +1,190 @@
|
||||
/*
|
||||
FreeRTOS.org V4.6.1 - Copyright (C) 2003-2007 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.
|
||||
|
||||
Also see http://www.SafeRTOS.com a version that has been certified for use
|
||||
in safety critical systems, plus commercial licensing, development and
|
||||
support options.
|
||||
***************************************************************************
|
||||
*/
|
||||
|
||||
|
||||
/* BASIC INTERRUPT DRIVEN SERIAL PORT DRIVER.
|
||||
|
||||
NOTE: This driver is primarily to test the scheduler functionality. It does
|
||||
not effectively use the buffers or DMA and is therefore not intended to be
|
||||
an example of an efficient driver. */
|
||||
|
||||
/* Standard include file. */
|
||||
#include <stdlib.h>
|
||||
#include <plib.h>
|
||||
|
||||
/* Scheduler include files. */
|
||||
#include "FreeRTOS.h"
|
||||
#include "queue.h"
|
||||
#include "task.h"
|
||||
|
||||
/* Demo app include files. */
|
||||
#include "serial.h"
|
||||
|
||||
/* Hardware setup. */
|
||||
#define serSET_FLAG ( 1 )
|
||||
|
||||
/* The queues used to communicate between tasks and ISR's. */
|
||||
static xQueueHandle xRxedChars;
|
||||
static xQueueHandle xCharsForTx;
|
||||
|
||||
/* Flag used to indicate the tx status. */
|
||||
static portBASE_TYPE xTxHasEnded;
|
||||
|
||||
/*-----------------------------------------------------------*/
|
||||
|
||||
/* The UART interrupt handler. */
|
||||
void __attribute__( (interrupt(ipl1), vector(_UART2_VECTOR))) vU2InterruptWrapper( void );
|
||||
|
||||
/*-----------------------------------------------------------*/
|
||||
|
||||
xComPortHandle xSerialPortInitMinimal( unsigned portLONG ulWantedBaud, unsigned portBASE_TYPE uxQueueLength )
|
||||
{
|
||||
unsigned portSHORT usBRG;
|
||||
|
||||
/* Create the queues used by the com test task. */
|
||||
xRxedChars = xQueueCreate( uxQueueLength, ( unsigned portBASE_TYPE ) sizeof( signed portCHAR ) );
|
||||
xCharsForTx = xQueueCreate( uxQueueLength, ( unsigned portBASE_TYPE ) sizeof( signed portCHAR ) );
|
||||
|
||||
/* Configure the UART and interrupts. */
|
||||
usBRG = (unsigned portSHORT)(( (float)configPERIPHERAL_CLOCK_HZ / ( (float)16 * (float)ulWantedBaud ) ) - (float)0.5);
|
||||
OpenUART2( UART_EN, UART_RX_ENABLE | UART_TX_ENABLE | UART_INT_TX | UART_INT_RX_CHAR, usBRG );
|
||||
ConfigIntUART2( configKERNEL_INTERRUPT_PRIORITY | UART_INT_SUB_PR0 | UART_TX_INT_EN | UART_RX_INT_EN );
|
||||
|
||||
xTxHasEnded = pdTRUE;
|
||||
|
||||
/* Only a single port is implemented so we don't need to return anything. */
|
||||
return NULL;
|
||||
}
|
||||
/*-----------------------------------------------------------*/
|
||||
|
||||
signed portBASE_TYPE xSerialGetChar( xComPortHandle pxPort, signed portCHAR *pcRxedChar, portTickType xBlockTime )
|
||||
{
|
||||
/* Only one port is supported. */
|
||||
( 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;
|
||||
}
|
||||
}
|
||||
/*-----------------------------------------------------------*/
|
||||
|
||||
signed portBASE_TYPE xSerialPutChar( xComPortHandle pxPort, signed portCHAR cOutChar, portTickType xBlockTime )
|
||||
{
|
||||
/* Only one port is supported. */
|
||||
( void ) pxPort;
|
||||
|
||||
/* Return false if after the block time there is no room on the Tx queue. */
|
||||
if( xQueueSend( xCharsForTx, &cOutChar, xBlockTime ) != pdPASS )
|
||||
{
|
||||
return pdFAIL;
|
||||
}
|
||||
|
||||
/* A critical section should not be required as xTxHasEnded will not be
|
||||
written to by the ISR if it is already 0 (is this correct?). */
|
||||
if( xTxHasEnded )
|
||||
{
|
||||
xTxHasEnded = pdFALSE;
|
||||
IFS1bits.U2TXIF = serSET_FLAG;
|
||||
}
|
||||
|
||||
return pdPASS;
|
||||
}
|
||||
/*-----------------------------------------------------------*/
|
||||
|
||||
void vSerialClose( xComPortHandle xPort )
|
||||
{
|
||||
}
|
||||
/*-----------------------------------------------------------*/
|
||||
|
||||
void vU2InterruptHandler( void )
|
||||
{
|
||||
/* Declared static to minimise stack use. */
|
||||
static portCHAR cChar;
|
||||
static portBASE_TYPE xYieldRequired;
|
||||
|
||||
xYieldRequired = pdFALSE;
|
||||
|
||||
/* Are any Rx interrupts pending? */
|
||||
if( mU2RXGetIntFlag() )
|
||||
{
|
||||
while( U2STAbits.URXDA )
|
||||
{
|
||||
/* Retrieve the received character and place it in the queue of
|
||||
received characters. */
|
||||
cChar = U2RXREG;
|
||||
xYieldRequired = xQueueSendFromISR( xRxedChars, &cChar, xYieldRequired );
|
||||
}
|
||||
mU2RXClearIntFlag();
|
||||
}
|
||||
|
||||
/* Are any Tx interrupts pending? */
|
||||
if( mU2TXGetIntFlag() )
|
||||
{
|
||||
while( !( U2STAbits.UTXBF ) )
|
||||
{
|
||||
if( xQueueReceiveFromISR( xCharsForTx, &cChar, &xYieldRequired ) == pdTRUE )
|
||||
{
|
||||
/* Send the next character queued for Tx. */
|
||||
U2TXREG = cChar;
|
||||
}
|
||||
else
|
||||
{
|
||||
/* Queue empty, nothing to send. */
|
||||
xTxHasEnded = pdTRUE;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
mU2TXClearIntFlag();
|
||||
}
|
||||
|
||||
/* If sending or receiving necessitates a context switch, then switch now. */
|
||||
portEND_SWITCHING_ISR( xYieldRequired );
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
@ -0,0 +1,24 @@
|
||||
#include <p32xxxx.h>
|
||||
#include <sys/asm.h>
|
||||
#include "ISR_Support.h"
|
||||
|
||||
.set nomips16
|
||||
.set noreorder
|
||||
|
||||
.extern vU2InterruptHandler
|
||||
.extern xISRStackTop
|
||||
.global vU2InterruptWrapper
|
||||
|
||||
.set noreorder
|
||||
.set noat
|
||||
.ent vU2InterruptWrapper
|
||||
|
||||
vU2InterruptWrapper:
|
||||
|
||||
portSAVE_CONTEXT
|
||||
jal vU2InterruptHandler
|
||||
nop
|
||||
portRESTORE_CONTEXT
|
||||
|
||||
.end vU2InterruptWrapper
|
||||
|
@ -0,0 +1,125 @@
|
||||
/*
|
||||
FreeRTOS.org V4.6.1 - Copyright (C) 2003-2007 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.
|
||||
|
||||
Also see http://www.SafeRTOS.com a version that has been certified for use
|
||||
in safety critical systems, plus commercial licensing, development and
|
||||
support options.
|
||||
***************************************************************************
|
||||
*/
|
||||
|
||||
/* High speed timer test as described in main.c. */
|
||||
|
||||
|
||||
/* Scheduler includes. */
|
||||
#include "FreeRTOS.h"
|
||||
|
||||
/* Demo includes. */
|
||||
#include "partest.h"
|
||||
|
||||
/* The number of interrupts to pass before we start looking at the jitter. */
|
||||
#define timerSETTLE_TIME 200
|
||||
|
||||
/* The maximum value the 16bit timer can contain. */
|
||||
#define timerMAX_COUNT 0xffff
|
||||
|
||||
|
||||
/*-----------------------------------------------------------*/
|
||||
|
||||
/* The maximum time (in processor clocks) between two consecutive timer
|
||||
interrupts so far. */
|
||||
unsigned portLONG ulMaxJitter = 0;
|
||||
|
||||
/*-----------------------------------------------------------*/
|
||||
|
||||
void vSetupTimerTest( unsigned portSHORT usFrequencyHz )
|
||||
{
|
||||
/* T2 is used to generate interrupts. The core timer is used to provide an
|
||||
accurate time measurement. */
|
||||
T2CON = 0;
|
||||
TMR2 = 0;
|
||||
|
||||
/* Timer 2 is going to interrupt at usFrequencyHz Hz. */
|
||||
PR2 = ( unsigned portSHORT ) ( configPERIPHERAL_CLOCK_HZ / ( unsigned portLONG ) usFrequencyHz );
|
||||
|
||||
/* Setup timer 2 interrupt priority to be above the kernel priority so
|
||||
the timer jitter is not effected by the kernel activity. */
|
||||
ConfigIntTimer2( T2_INT_ON | ( configKERNEL_INTERRUPT_PRIORITY + 1 ) );
|
||||
|
||||
/* Clear the interrupt as a starting condition. */
|
||||
IFS0bits.T2IF = 0;
|
||||
|
||||
/* Enable the interrupt. */
|
||||
IEC0bits.T2IE = 1;
|
||||
|
||||
/* Start the timer. */
|
||||
T2CONbits.TON = 1;
|
||||
}
|
||||
/*-----------------------------------------------------------*/
|
||||
|
||||
void __attribute__( (interrupt(ipl0), vector(_TIMER_2_VECTOR))) vT2InterruptHandler( void );
|
||||
void vT2InterruptHandler( void )
|
||||
{
|
||||
static unsigned portLONG ulLastCount = 0, ulSettleCount = 0;
|
||||
static unsigned portLONG ulThisCount, ulDifference;
|
||||
|
||||
/* Capture the timer value as we enter the interrupt. */
|
||||
ulThisCount = _CP0_GET_COUNT();
|
||||
|
||||
if( ulSettleCount >= timerSETTLE_TIME )
|
||||
{
|
||||
/* What is the difference between the timer value in this interrupt
|
||||
and the value from the last interrupt. */
|
||||
ulDifference = ulThisCount - ulLastCount;
|
||||
|
||||
/* 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( ulDifference > ulMaxJitter )
|
||||
{
|
||||
ulMaxJitter = ulDifference;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
/* Don't bother storing any values for the first couple of
|
||||
interrupts. */
|
||||
ulSettleCount++;
|
||||
}
|
||||
|
||||
/* Remember what the timer value was this time through, so we can calculate
|
||||
the difference the next time through. */
|
||||
ulLastCount = ulThisCount;
|
||||
|
||||
/* Clear the timer interrupt. */
|
||||
IFS0bits.T2IF = 0;
|
||||
}
|
||||
|
||||
|
@ -0,0 +1,46 @@
|
||||
/*
|
||||
FreeRTOS.org V4.6.1 - Copyright (C) 2003-2007 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.
|
||||
|
||||
Also see http://www.SafeRTOS.com a version that has been certified for use
|
||||
in safety critical systems, plus commercial licensing, development and
|
||||
support options.
|
||||
***************************************************************************
|
||||
*/
|
||||
|
||||
#ifndef TIMER_TEST_H
|
||||
#define TIMER_TEST_H
|
||||
|
||||
/* Setup the high frequency timer interrupt. */
|
||||
void vSetupTimerTest( unsigned portSHORT usFrequencyHz );
|
||||
|
||||
#endif /* TIMER_TEST_H */
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue