[修改] 增加freeRTOS
1. 版本FreeRTOSv202212.01,命名为kernel;
This commit is contained in:
71
kernel/FreeRTOS/Demo/PIC24_MPLAB/FreeRTOSConfig.h
Normal file
71
kernel/FreeRTOS/Demo/PIC24_MPLAB/FreeRTOSConfig.h
Normal file
@ -0,0 +1,71 @@
|
||||
/*
|
||||
* FreeRTOS V202212.01
|
||||
* Copyright (C) 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||
* this software and associated documentation files (the "Software"), to deal in
|
||||
* the Software without restriction, including without limitation the rights to
|
||||
* use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
|
||||
* the Software, and to permit persons to whom the Software is furnished to do so,
|
||||
* subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in all
|
||||
* copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
||||
* FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
||||
* COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
||||
* IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
*
|
||||
* https://www.FreeRTOS.org
|
||||
* https://github.com/FreeRTOS
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef FREERTOS_CONFIG_H
|
||||
#define FREERTOS_CONFIG_H
|
||||
|
||||
#include <p24FJ128GA010.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.
|
||||
*
|
||||
* See http://www.freertos.org/a00110.html
|
||||
*----------------------------------------------------------*/
|
||||
|
||||
#define configUSE_PREEMPTION 1
|
||||
#define configUSE_IDLE_HOOK 1
|
||||
#define configUSE_TICK_HOOK 0
|
||||
#define configTICK_RATE_HZ ( ( TickType_t ) 1000 )
|
||||
#define configCPU_CLOCK_HZ ( ( unsigned long ) 16000000 ) /* Fosc / 2 */
|
||||
#define configMAX_PRIORITIES ( 4 )
|
||||
#define configMINIMAL_STACK_SIZE ( 115 )
|
||||
#define configTOTAL_HEAP_SIZE ( ( size_t ) 5120 )
|
||||
#define configMAX_TASK_NAME_LEN ( 4 )
|
||||
#define configUSE_TRACE_FACILITY 0
|
||||
#define configUSE_16_BIT_TICKS 1
|
||||
#define configIDLE_SHOULD_YIELD 1
|
||||
#define configCHECK_FOR_STACK_OVERFLOW 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 0
|
||||
#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 */
|
||||
108
kernel/FreeRTOS/Demo/PIC24_MPLAB/Makefile
Normal file
108
kernel/FreeRTOS/Demo/PIC24_MPLAB/Makefile
Normal file
@ -0,0 +1,108 @@
|
||||
#
|
||||
# There exist several targets which are by default empty and which can be
|
||||
# used for execution of your targets. These targets are usually executed
|
||||
# before and after some main targets. They are:
|
||||
#
|
||||
# .build-pre: called before 'build' target
|
||||
# .build-post: called after 'build' target
|
||||
# .clean-pre: called before 'clean' target
|
||||
# .clean-post: called after 'clean' target
|
||||
# .clobber-pre: called before 'clobber' target
|
||||
# .clobber-post: called after 'clobber' target
|
||||
# .all-pre: called before 'all' target
|
||||
# .all-post: called after 'all' target
|
||||
# .help-pre: called before 'help' target
|
||||
# .help-post: called after 'help' target
|
||||
#
|
||||
# Targets beginning with '.' are not intended to be called on their own.
|
||||
#
|
||||
# Main targets can be executed directly, and they are:
|
||||
#
|
||||
# build build a specific configuration
|
||||
# clean remove built files from a configuration
|
||||
# clobber remove all built files
|
||||
# all build all configurations
|
||||
# help print help mesage
|
||||
#
|
||||
# Targets .build-impl, .clean-impl, .clobber-impl, .all-impl, and
|
||||
# .help-impl are implemented in nbproject/makefile-impl.mk.
|
||||
#
|
||||
# Available make variables:
|
||||
#
|
||||
# CND_BASEDIR base directory for relative paths
|
||||
# CND_DISTDIR default top distribution directory (build artifacts)
|
||||
# CND_BUILDDIR default top build directory (object files, ...)
|
||||
# CONF name of current configuration
|
||||
# CND_ARTIFACT_DIR_${CONF} directory of build artifact (current configuration)
|
||||
# CND_ARTIFACT_NAME_${CONF} name of build artifact (current configuration)
|
||||
# CND_ARTIFACT_PATH_${CONF} path to build artifact (current configuration)
|
||||
# CND_PACKAGE_DIR_${CONF} directory of package (current configuration)
|
||||
# CND_PACKAGE_NAME_${CONF} name of package (current configuration)
|
||||
# CND_PACKAGE_PATH_${CONF} path to package (current configuration)
|
||||
#
|
||||
# NOCDDL
|
||||
|
||||
|
||||
# Environment
|
||||
MKDIR=mkdir
|
||||
CP=cp
|
||||
CCADMIN=CCadmin
|
||||
RANLIB=ranlib
|
||||
|
||||
|
||||
# build
|
||||
build: .build-post
|
||||
|
||||
.build-pre:
|
||||
# Add your pre 'build' code here...
|
||||
|
||||
.build-post: .build-impl
|
||||
# Add your post 'build' code here...
|
||||
|
||||
|
||||
# clean
|
||||
clean: .clean-post
|
||||
|
||||
.clean-pre:
|
||||
# Add your pre 'clean' code here...
|
||||
|
||||
.clean-post: .clean-impl
|
||||
# Add your post 'clean' code here...
|
||||
|
||||
|
||||
# clobber
|
||||
clobber: .clobber-post
|
||||
|
||||
.clobber-pre:
|
||||
# Add your pre 'clobber' code here...
|
||||
|
||||
.clobber-post: .clobber-impl
|
||||
# Add your post 'clobber' code here...
|
||||
|
||||
|
||||
# all
|
||||
all: .all-post
|
||||
|
||||
.all-pre:
|
||||
# Add your pre 'all' code here...
|
||||
|
||||
.all-post: .all-impl
|
||||
# Add your post 'all' code here...
|
||||
|
||||
|
||||
# help
|
||||
help: .help-post
|
||||
|
||||
.help-pre:
|
||||
# Add your pre 'help' code here...
|
||||
|
||||
.help-post: .help-impl
|
||||
# Add your post 'help' code here...
|
||||
|
||||
|
||||
|
||||
# include project implementation makefile
|
||||
include nbproject/Makefile-impl.mk
|
||||
|
||||
# include project make variables
|
||||
include nbproject/Makefile-variables.mk
|
||||
97
kernel/FreeRTOS/Demo/PIC24_MPLAB/ParTest/ParTest.c
Normal file
97
kernel/FreeRTOS/Demo/PIC24_MPLAB/ParTest/ParTest.c
Normal file
@ -0,0 +1,97 @@
|
||||
/*
|
||||
* FreeRTOS V202212.01
|
||||
* Copyright (C) 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||
* this software and associated documentation files (the "Software"), to deal in
|
||||
* the Software without restriction, including without limitation the rights to
|
||||
* use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
|
||||
* the Software, and to permit persons to whom the Software is furnished to do so,
|
||||
* subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in all
|
||||
* copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
||||
* FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
||||
* COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
||||
* IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
*
|
||||
* https://www.FreeRTOS.org
|
||||
* https://github.com/FreeRTOS
|
||||
*
|
||||
*/
|
||||
|
||||
/* 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 )
|
||||
{
|
||||
/* The explorer 16 board has LED's on port A. All bits are set as output
|
||||
so PORTA is read-modified-written directly. */
|
||||
TRISA = ptOUTPUT;
|
||||
PORTA = ptALL_OFF;
|
||||
}
|
||||
/*-----------------------------------------------------------*/
|
||||
|
||||
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. */
|
||||
portENTER_CRITICAL();
|
||||
{
|
||||
PORTA |= uxLEDBit;
|
||||
}
|
||||
portEXIT_CRITICAL();
|
||||
}
|
||||
else
|
||||
{
|
||||
/* Turn the LED off. */
|
||||
portENTER_CRITICAL();
|
||||
{
|
||||
PORTA &= ~uxLEDBit;
|
||||
}
|
||||
portEXIT_CRITICAL();
|
||||
}
|
||||
}
|
||||
/*-----------------------------------------------------------*/
|
||||
|
||||
void vParTestToggleLED( unsigned portBASE_TYPE uxLED )
|
||||
{
|
||||
unsigned portBASE_TYPE uxLEDBit;
|
||||
|
||||
uxLEDBit = 1 << uxLED;
|
||||
portENTER_CRITICAL();
|
||||
{
|
||||
/* If the LED is already on - turn it off. If the LED is already
|
||||
off, turn it on. */
|
||||
if( PORTA & uxLEDBit )
|
||||
{
|
||||
PORTA &= ~uxLEDBit;
|
||||
}
|
||||
else
|
||||
{
|
||||
PORTA |= uxLEDBit;
|
||||
}
|
||||
}
|
||||
portEXIT_CRITICAL();
|
||||
}
|
||||
|
||||
3
kernel/FreeRTOS/Demo/PIC24_MPLAB/RTOSDemo.mcs
Normal file
3
kernel/FreeRTOS/Demo/PIC24_MPLAB/RTOSDemo.mcs
Normal file
@ -0,0 +1,3 @@
|
||||
[Header]
|
||||
MagicCookie={0b13fe8c-dfe0-40eb-8900-6712719559a7}
|
||||
Version=1.0
|
||||
BIN
kernel/FreeRTOS/Demo/PIC24_MPLAB/RTOSDemo.mcw
Normal file
BIN
kernel/FreeRTOS/Demo/PIC24_MPLAB/RTOSDemo.mcw
Normal file
Binary file not shown.
127
kernel/FreeRTOS/Demo/PIC24_MPLAB/RTOSDemo_PIC24.mcp
Normal file
127
kernel/FreeRTOS/Demo/PIC24_MPLAB/RTOSDemo_PIC24.mcp
Normal file
@ -0,0 +1,127 @@
|
||||
[HEADER]
|
||||
magic_cookie={66E99B07-E706-4689-9E80-9B2582898A13}
|
||||
file_version=1.0
|
||||
device=PIC24FJ128GA010
|
||||
[PATH_INFO]
|
||||
BuildDirPolicy=BuildDirIsSourceDir
|
||||
dir_src=
|
||||
dir_bin=
|
||||
dir_tmp=
|
||||
dir_sin=
|
||||
dir_inc=.;.\include;..\include;..\..\include;..\..\..\include;..\..\Source\include;..\..\..\Source\include;..\Demo\PIC24_MPLAB;..\..\..\Demo\PIC24_MPLAB;..\..\..\..\Demo\PIC24_MPLAB;.\FileSystem;..\Common\include;..\..\Common\include
|
||||
dir_lib=
|
||||
dir_lkr=
|
||||
[CAT_FILTERS]
|
||||
filter_src=*.s;*.c
|
||||
filter_inc=*.h;*.inc
|
||||
filter_obj=*.o
|
||||
filter_lib=*.a
|
||||
filter_lkr=*.gld
|
||||
[CAT_SUBFOLDERS]
|
||||
subfolder_src=FreeRTOS Source;Standard Demo Source
|
||||
subfolder_inc=
|
||||
subfolder_obj=
|
||||
subfolder_lib=
|
||||
subfolder_lkr=
|
||||
[FILE_SUBFOLDERS]
|
||||
file_000=.
|
||||
file_001=.
|
||||
file_002=.
|
||||
file_003=.
|
||||
file_004=.
|
||||
file_005=.
|
||||
file_006=Standard Demo Source
|
||||
file_007=Standard Demo Source
|
||||
file_008=Standard Demo Source
|
||||
file_009=Standard Demo Source
|
||||
file_010=FreeRTOS Source
|
||||
file_011=FreeRTOS Source
|
||||
file_012=Standard Demo Source
|
||||
file_013=FreeRTOS Source
|
||||
file_014=FreeRTOS Source
|
||||
file_015=FreeRTOS Source
|
||||
file_016=Standard Demo Source
|
||||
file_017=.
|
||||
file_018=.
|
||||
file_019=.
|
||||
[GENERATED_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
|
||||
[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_INFO]
|
||||
file_000=main.c
|
||||
file_001=..\..\source\list.c
|
||||
file_002=..\..\source\queue.c
|
||||
file_003=ParTest\ParTest.c
|
||||
file_004=serial\serial.c
|
||||
file_005=lcd.c
|
||||
file_006=..\Common\Minimal\BlockQ.c
|
||||
file_007=..\Common\Minimal\blocktim.c
|
||||
file_008=..\Common\Minimal\comtest.c
|
||||
file_009=..\..\source\portable\MemMang\heap_1.c
|
||||
file_010=..\Common\Minimal\integer.c
|
||||
file_011=..\..\source\portable\MPLAB\PIC24_dsPIC\port.c
|
||||
file_012=..\..\Source\portable\MPLAB\PIC24_dsPIC\portasm_PIC24.S
|
||||
file_013=..\..\source\tasks.c
|
||||
file_014=timertest.c
|
||||
file_015=..\..\source\include\semphr.h
|
||||
file_016=..\..\source\include\task.h
|
||||
file_017=..\..\source\include\queue.h
|
||||
file_018=FreeRTOSConfig.h
|
||||
file_019=p24FJ128GA010.gld
|
||||
[SUITE_INFO]
|
||||
suite_guid={479DDE59-4D56-455E-855E-FFF59A3DB57E}
|
||||
suite_state=
|
||||
[TOOL_SETTINGS]
|
||||
TS{7D9C6ECE-785D-44CB-BA22-17BF2E119622}=-g
|
||||
TS{25AC22BD-2378-4FDB-BFB6-7345A15512D3}=-fno-omit-frame-pointer -g -Wall -DMPLAB_PIC24_PORT -mlarge-code -O1 -fno-schedule-insns -fno-schedule-insns2
|
||||
TS{25AC22BD-2378-4FDB-BFB6-7345A15512D3}_alt=yes
|
||||
TS{7DAC9A1D-4C45-45D6-B25A-D117C74E8F5A}=--heap=0 --defsym=__ICD2RAM=1 -o"$(BINDIR_)$(TARGETBASE).$(TARGETSUFFIX)"
|
||||
TS{509E5861-1E2A-483B-8B6B-CA8DB7F2DD78}=
|
||||
[INSTRUMENTED_TRACE]
|
||||
enable=0
|
||||
transport=0
|
||||
format=0
|
||||
[CUSTOM_BUILD]
|
||||
Pre-Build=
|
||||
Pre-BuildEnabled=1
|
||||
Post-Build=
|
||||
Post-BuildEnabled=1
|
||||
7
kernel/FreeRTOS/Demo/PIC24_MPLAB/RTOSDemo_PIC24.mcs
Normal file
7
kernel/FreeRTOS/Demo/PIC24_MPLAB/RTOSDemo_PIC24.mcs
Normal file
@ -0,0 +1,7 @@
|
||||
[Header]
|
||||
MagicCookie={0b13fe8c-dfe0-40eb-8900-6712719559a7}
|
||||
Version=1.0
|
||||
[TOOL_LOC_STAMPS]
|
||||
tool_loc{DE18EB1A-B46B-486B-B96F-A811A635DFAC}=C:\devtools\Microchip\mplabc30\v3.25\bin\pic30-as.exe
|
||||
tool_loc{069BD372-6CA0-40D4-BF2F-5DC806D05083}=C:\devtools\Microchip\mplabc30\v3.25\bin\pic30-gcc.exe
|
||||
tool_loc{433C3D55-811D-409D-A6BF-159CF9355B42}=C:\devtools\Microchip\mplabc30\v3.25\bin\pic30-ld.exe
|
||||
204
kernel/FreeRTOS/Demo/PIC24_MPLAB/lcd.c
Normal file
204
kernel/FreeRTOS/Demo/PIC24_MPLAB/lcd.c
Normal file
@ -0,0 +1,204 @@
|
||||
/*
|
||||
* FreeRTOS V202212.01
|
||||
* Copyright (C) 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||
* this software and associated documentation files (the "Software"), to deal in
|
||||
* the Software without restriction, including without limitation the rights to
|
||||
* use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
|
||||
* the Software, and to permit persons to whom the Software is furnished to do so,
|
||||
* subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in all
|
||||
* copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
||||
* FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
||||
* COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
||||
* IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
*
|
||||
* https://www.FreeRTOS.org
|
||||
* https://github.com/FreeRTOS
|
||||
*
|
||||
*/
|
||||
|
||||
/* 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 short usRow );
|
||||
|
||||
/*
|
||||
* Write a string of text to the LCD.
|
||||
*/
|
||||
static void prvLCDPutString( char *pcString );
|
||||
|
||||
/*
|
||||
* Clear the LCD.
|
||||
*/
|
||||
static void prvLCDClear( void );
|
||||
|
||||
/*-----------------------------------------------------------*/
|
||||
|
||||
/* Brief delay to permit the LCD to catch up with commands. */
|
||||
#define lcdSHORT_DELAY 3
|
||||
|
||||
/* SFR that seems to be missing from the standard header files. */
|
||||
#define PMAEN *( ( unsigned short * ) 0x60c )
|
||||
|
||||
/* LCD commands. */
|
||||
#define lcdDEFAULT_FUNCTION 0x3c
|
||||
#define lcdDISPLAY_CONTROL 0x0c
|
||||
#define lcdCLEAR_DISPLAY 0x01
|
||||
#define lcdENTRY_MODE 0x06
|
||||
|
||||
/* 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. */
|
||||
QueueHandle_t xLCDQueue;
|
||||
|
||||
|
||||
/*-----------------------------------------------------------*/
|
||||
|
||||
QueueHandle_t 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, "LCD", configMINIMAL_STACK_SIZE, NULL, tskIDLE_PRIORITY + 1, NULL );
|
||||
|
||||
return xLCDQueue;
|
||||
}
|
||||
/*-----------------------------------------------------------*/
|
||||
|
||||
static void prvLCDGotoRow( unsigned short usRow )
|
||||
{
|
||||
if( usRow == 0 )
|
||||
{
|
||||
PMADDR = 0x0000;
|
||||
PMDIN1 = 0x02;
|
||||
}
|
||||
else
|
||||
{
|
||||
PMADDR = 0x0000;
|
||||
PMDIN1 = 0xc0;
|
||||
}
|
||||
|
||||
vTaskDelay( lcdSHORT_DELAY );
|
||||
}
|
||||
/*-----------------------------------------------------------*/
|
||||
|
||||
static void prvLCDPutString( char *pcString )
|
||||
{
|
||||
/* Write out each character with appropriate delay between each. */
|
||||
while( *pcString )
|
||||
{
|
||||
PMADDR = 0x0001;
|
||||
PMDIN1 = *pcString;
|
||||
pcString++;
|
||||
vTaskDelay( lcdSHORT_DELAY );
|
||||
}
|
||||
}
|
||||
/*-----------------------------------------------------------*/
|
||||
|
||||
static void prvLCDClear( void )
|
||||
{
|
||||
/* Clear the display. */
|
||||
PMADDR = 0x0000;
|
||||
PMDIN1 = lcdCLEAR_DISPLAY;
|
||||
vTaskDelay( lcdSHORT_DELAY );
|
||||
}
|
||||
/*-----------------------------------------------------------*/
|
||||
|
||||
static void prvSetupLCD( void )
|
||||
{
|
||||
/* Setup the PMP. */
|
||||
PMCON = 0x83BF;
|
||||
PMMODE = 0x3FF;
|
||||
PMAEN = 1;
|
||||
PMADDR = 0x0000;
|
||||
vTaskDelay( lcdSHORT_DELAY );
|
||||
|
||||
/* Set the default function. */
|
||||
PMDIN1 = lcdDEFAULT_FUNCTION;
|
||||
vTaskDelay( lcdSHORT_DELAY );
|
||||
|
||||
/* Set the display control. */
|
||||
PMDIN1 = lcdDISPLAY_CONTROL;
|
||||
vTaskDelay( lcdSHORT_DELAY );
|
||||
|
||||
/* Clear the display. */
|
||||
PMDIN1 = lcdCLEAR_DISPLAY;
|
||||
vTaskDelay( lcdSHORT_DELAY );
|
||||
|
||||
/* Set the entry mode. */
|
||||
PMDIN1 = lcdENTRY_MODE;
|
||||
vTaskDelay( lcdSHORT_DELAY );
|
||||
}
|
||||
/*-----------------------------------------------------------*/
|
||||
|
||||
static void vLCDTask( void *pvParameters )
|
||||
{
|
||||
xLCDMessage xMessage;
|
||||
unsigned short usRow = 0;
|
||||
|
||||
/* Remove compiler warnings. */
|
||||
( void ) pvParameters;
|
||||
|
||||
/* 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 );
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
48
kernel/FreeRTOS/Demo/PIC24_MPLAB/lcd.h
Normal file
48
kernel/FreeRTOS/Demo/PIC24_MPLAB/lcd.h
Normal file
@ -0,0 +1,48 @@
|
||||
/*
|
||||
* FreeRTOS V202212.01
|
||||
* Copyright (C) 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||
* this software and associated documentation files (the "Software"), to deal in
|
||||
* the Software without restriction, including without limitation the rights to
|
||||
* use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
|
||||
* the Software, and to permit persons to whom the Software is furnished to do so,
|
||||
* subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in all
|
||||
* copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
||||
* FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
||||
* COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
||||
* IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
*
|
||||
* https://www.FreeRTOS.org
|
||||
* https://github.com/FreeRTOS
|
||||
*
|
||||
*/
|
||||
|
||||
#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. */
|
||||
QueueHandle_t xStartLCDTask( void );
|
||||
|
||||
typedef struct
|
||||
{
|
||||
/* The minimum amount of time the message should remain on the LCD without
|
||||
being overwritten. */
|
||||
TickType_t xMinDisplayTime;
|
||||
|
||||
/* A pointer to the string to be displayed. */
|
||||
char *pcMessage;
|
||||
|
||||
} xLCDMessage;
|
||||
|
||||
|
||||
#endif /* LCD_INC_H */
|
||||
|
||||
|
||||
257
kernel/FreeRTOS/Demo/PIC24_MPLAB/main.c
Normal file
257
kernel/FreeRTOS/Demo/PIC24_MPLAB/main.c
Normal file
@ -0,0 +1,257 @@
|
||||
/*
|
||||
* FreeRTOS V202212.01
|
||||
* Copyright (C) 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||
* this software and associated documentation files (the "Software"), to deal in
|
||||
* the Software without restriction, including without limitation the rights to
|
||||
* use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
|
||||
* the Software, and to permit persons to whom the Software is furnished to do so,
|
||||
* subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in all
|
||||
* copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
||||
* FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
||||
* COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
||||
* IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
*
|
||||
* https://www.FreeRTOS.org
|
||||
* https://github.com/FreeRTOS
|
||||
*
|
||||
*/
|
||||
|
||||
/*
|
||||
* 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 usMaxJitter
|
||||
* variable, and displayed on the LCD by the 'Check' as described below.
|
||||
* The fast interrupt is configured and handled in the timer_test.c source
|
||||
* file.
|
||||
*
|
||||
* "LCD" task - the LCD task is a 'gatekeeper' task. It is the only task that
|
||||
* is permitted to access the LCD 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. The LCD
|
||||
* task is defined in lcd.c.
|
||||
*
|
||||
* "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 "FAIL #n" to the LCD (via the LCD task). If all the demo tasks are
|
||||
* executing with their expected behaviour then the check task writes the max
|
||||
* jitter time to the LCD (again via the LCD task), as described above.
|
||||
*/
|
||||
|
||||
/* Standard includes. */
|
||||
#include <stdio.h>
|
||||
|
||||
/* Scheduler includes. */
|
||||
#include "FreeRTOS.h"
|
||||
#include "task.h"
|
||||
#include "queue.h"
|
||||
|
||||
/* Demo application includes. */
|
||||
#include "BlockQ.h"
|
||||
#include "blocktim.h"
|
||||
#include "integer.h"
|
||||
#include "comtest2.h"
|
||||
#include "partest.h"
|
||||
#include "lcd.h"
|
||||
#include "timertest.h"
|
||||
|
||||
/* Demo task priorities. */
|
||||
#define mainBLOCK_Q_PRIORITY ( tskIDLE_PRIORITY + 2 )
|
||||
#define mainCHECK_TASK_PRIORITY ( tskIDLE_PRIORITY + 3 )
|
||||
#define mainCOM_TEST_PRIORITY ( 2 )
|
||||
|
||||
/* The check task may require a bit more stack as it calls sprintf(). */
|
||||
#define mainCHECK_TAKS_STACK_SIZE ( configMINIMAL_STACK_SIZE * 2 )
|
||||
|
||||
/* The execution period of the check task. */
|
||||
#define mainCHECK_TASK_PERIOD ( ( TickType_t ) 3000 / portTICK_PERIOD_MS )
|
||||
|
||||
/* Baud rate used by the comtest tasks. */
|
||||
#define mainCOM_TEST_BAUD_RATE ( 19200 )
|
||||
|
||||
/* 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 ( 6 )
|
||||
|
||||
/* The frequency at which the "fast interrupt test" interrupt will occur. */
|
||||
#define mainTEST_INTERRUPT_FREQUENCY ( 20000 )
|
||||
|
||||
/* The number of processor clocks we expect to occur between each "fast
|
||||
interrupt test" interrupt. */
|
||||
#define mainEXPECTED_CLOCKS_BETWEEN_INTERRUPTS ( configCPU_CLOCK_HZ / mainTEST_INTERRUPT_FREQUENCY )
|
||||
|
||||
/* The number of nano seconds between each processor clock. */
|
||||
#define mainNS_PER_CLOCK ( ( unsigned short ) ( ( 1.0 / ( double ) configCPU_CLOCK_HZ ) * 1000000000.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 check task as described at the top of this file.
|
||||
*/
|
||||
static void vCheckTask( void *pvParameters );
|
||||
|
||||
/*
|
||||
* Setup the processor ready for the demo.
|
||||
*/
|
||||
static void prvSetupHardware( void );
|
||||
|
||||
/* Prototypes for the standard FreeRTOS callback/hook functions implemented
|
||||
within this file. */
|
||||
void vApplicationStackOverflowHook( TaskHandle_t pxTask, char *pcTaskName );
|
||||
|
||||
/*-----------------------------------------------------------*/
|
||||
|
||||
/* The queue used to send messages to the LCD task. */
|
||||
static QueueHandle_t xLCDQueue;
|
||||
|
||||
/*-----------------------------------------------------------*/
|
||||
|
||||
/*
|
||||
* Create the demo tasks then start the scheduler.
|
||||
*/
|
||||
int main( void )
|
||||
{
|
||||
/* Configure any hardware required for this demo. */
|
||||
prvSetupHardware();
|
||||
|
||||
/* Create the standard demo tasks. */
|
||||
vStartBlockingQueueTasks( mainBLOCK_Q_PRIORITY );
|
||||
vStartIntegerMathTasks( tskIDLE_PRIORITY );
|
||||
vAltStartComTestTasks( mainCOM_TEST_PRIORITY, mainCOM_TEST_BAUD_RATE, mainCOM_TEST_LED );
|
||||
vCreateBlockTimeTasks();
|
||||
|
||||
/* Create the test tasks defined within this file. */
|
||||
xTaskCreate( vCheckTask, "Check", mainCHECK_TAKS_STACK_SIZE, NULL, mainCHECK_TASK_PRIORITY, NULL );
|
||||
|
||||
/* Start the task that will control the LCD. This returns the handle
|
||||
to the queue used to write text out to the task. */
|
||||
xLCDQueue = xStartLCDTask();
|
||||
|
||||
/* Start the high frequency interrupt 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 prvSetupHardware( void )
|
||||
{
|
||||
vParTestInitialise();
|
||||
}
|
||||
/*-----------------------------------------------------------*/
|
||||
|
||||
static void vCheckTask( void *pvParameters )
|
||||
{
|
||||
/* Used to wake the task at the correct frequency. */
|
||||
TickType_t xLastExecutionTime;
|
||||
|
||||
/* The maximum jitter time measured by the fast interrupt test. */
|
||||
extern unsigned short usMaxJitter ;
|
||||
|
||||
/* Buffer into which the maximum jitter time is written as a string. */
|
||||
static char cStringBuffer[ mainMAX_STRING_LENGTH ];
|
||||
|
||||
/* The message that is sent on the queue to the LCD task. The first
|
||||
parameter is the minimum time (in ticks) that the message should be
|
||||
left on the LCD without being overwritten. The second parameter is a pointer
|
||||
to the message to display itself. */
|
||||
xLCDMessage xMessage = { 0, cStringBuffer };
|
||||
|
||||
/* Set to pdTRUE should an error be detected in any of the standard demo tasks. */
|
||||
unsigned short usErrorDetected = pdFALSE;
|
||||
|
||||
/* Remove compiler warnings. */
|
||||
( void ) pvParameters;
|
||||
|
||||
/* Initialise xLastExecutionTime so the first call to vTaskDelayUntil()
|
||||
works correctly. */
|
||||
xLastExecutionTime = xTaskGetTickCount();
|
||||
|
||||
for( ;; )
|
||||
{
|
||||
/* Wait until it is time for the next cycle. */
|
||||
vTaskDelayUntil( &xLastExecutionTime, mainCHECK_TASK_PERIOD );
|
||||
|
||||
/* Has an error been found in any of the standard demo tasks? */
|
||||
|
||||
if( xAreIntegerMathsTaskStillRunning() != pdTRUE )
|
||||
{
|
||||
usErrorDetected = pdTRUE;
|
||||
sprintf( cStringBuffer, "FAIL #1" );
|
||||
}
|
||||
|
||||
if( xAreComTestTasksStillRunning() != pdTRUE )
|
||||
{
|
||||
usErrorDetected = pdTRUE;
|
||||
sprintf( cStringBuffer, "FAIL #2" );
|
||||
}
|
||||
|
||||
if( xAreBlockTimeTestTasksStillRunning() != pdTRUE )
|
||||
{
|
||||
usErrorDetected = pdTRUE;
|
||||
sprintf( cStringBuffer, "FAIL #3" );
|
||||
}
|
||||
|
||||
if( xAreBlockingQueuesStillRunning() != pdTRUE )
|
||||
{
|
||||
usErrorDetected = pdTRUE;
|
||||
sprintf( cStringBuffer, "FAIL #4" );
|
||||
}
|
||||
|
||||
if( usErrorDetected == pdFALSE )
|
||||
{
|
||||
/* No errors have been discovered, so display the maximum jitter
|
||||
timer discovered by the "fast interrupt test". */
|
||||
sprintf( cStringBuffer, "%dns max jitter", ( short ) ( usMaxJitter - mainEXPECTED_CLOCKS_BETWEEN_INTERRUPTS ) * mainNS_PER_CLOCK );
|
||||
}
|
||||
|
||||
/* Send the message to the LCD gatekeeper for display. */
|
||||
xQueueSend( xLCDQueue, &xMessage, portMAX_DELAY );
|
||||
}
|
||||
}
|
||||
/*-----------------------------------------------------------*/
|
||||
|
||||
void vApplicationIdleHook( void )
|
||||
{
|
||||
}
|
||||
/*-----------------------------------------------------------*/
|
||||
|
||||
void vApplicationStackOverflowHook( TaskHandle_t pxTask, char *pcTaskName )
|
||||
{
|
||||
( void ) pcTaskName;
|
||||
( void ) pxTask;
|
||||
|
||||
/* Run time stack overflow checking is performed if
|
||||
configCHECK_FOR_STACK_OVERFLOW is defined to 1 or 2. This hook
|
||||
function is called if a stack overflow is detected. */
|
||||
taskDISABLE_INTERRUPTS();
|
||||
for( ;; );
|
||||
}
|
||||
|
||||
5
kernel/FreeRTOS/Demo/PIC24_MPLAB/nbproject/.gitignore
vendored
Normal file
5
kernel/FreeRTOS/Demo/PIC24_MPLAB/nbproject/.gitignore
vendored
Normal file
@ -0,0 +1,5 @@
|
||||
Makefile-local-default.mk
|
||||
Makefile-impl.mk
|
||||
Makefile-variables.mk
|
||||
Makefile-default.mk
|
||||
Package-default.bash
|
||||
@ -0,0 +1,9 @@
|
||||
#
|
||||
#Fri Oct 16 11:40:45 BST 2015
|
||||
default.com-microchip-mplab-nbide-toolchainXC16-XC16LanguageToolchain.md5=7b5555b9f3fac10bdeeaa71fff22c072
|
||||
default.languagetoolchain.dir=C\:\\DevTools\\Microchip\\xc16\\v1.25\\bin
|
||||
configurations-xml=e1668378027c43cfe57bea932c980e61
|
||||
com-microchip-mplab-nbide-embedded-makeproject-MakeProject.md5=17a71d03e7d3823160f3e8681fc226e8
|
||||
default.languagetoolchain.version=1.25
|
||||
host.platform=windows
|
||||
conf.ids=default
|
||||
475
kernel/FreeRTOS/Demo/PIC24_MPLAB/nbproject/configurations.xml
Normal file
475
kernel/FreeRTOS/Demo/PIC24_MPLAB/nbproject/configurations.xml
Normal file
@ -0,0 +1,475 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<configurationDescriptor version="62">
|
||||
<logicalFolder name="root" displayName="root" projectFiles="true">
|
||||
<logicalFolder name="HeaderFiles"
|
||||
displayName="Header Files"
|
||||
projectFiles="true">
|
||||
</logicalFolder>
|
||||
<logicalFolder name="LinkerScript"
|
||||
displayName="Linker Files"
|
||||
projectFiles="true">
|
||||
</logicalFolder>
|
||||
<logicalFolder name="SourceFiles"
|
||||
displayName="Source Files"
|
||||
projectFiles="true">
|
||||
<logicalFolder name="f1" displayName="FreeRTOS_Source" projectFiles="true">
|
||||
<logicalFolder name="f1" displayName="Portable" projectFiles="true">
|
||||
<logicalFolder name="f1" displayName="MemMang" projectFiles="true">
|
||||
<itemPath>../../Source/portable/MemMang/heap_1.c</itemPath>
|
||||
</logicalFolder>
|
||||
<itemPath>../../Source/portable/MPLAB/PIC24_dsPIC/port.c</itemPath>
|
||||
<itemPath>../../Source/portable/MPLAB/PIC24_dsPIC/portasm_PIC24.S</itemPath>
|
||||
<itemPath>../../Source/portable/MPLAB/PIC24_dsPIC/portmacro.h</itemPath>
|
||||
</logicalFolder>
|
||||
<itemPath>../../Source/list.c</itemPath>
|
||||
<itemPath>../../Source/queue.c</itemPath>
|
||||
<itemPath>../../Source/tasks.c</itemPath>
|
||||
<itemPath>../../Source/timers.c</itemPath>
|
||||
</logicalFolder>
|
||||
<logicalFolder name="f2" displayName="Standard Demo Tasks" projectFiles="true">
|
||||
<itemPath>../Common/Minimal/BlockQ.c</itemPath>
|
||||
<itemPath>../Common/Minimal/blocktim.c</itemPath>
|
||||
<itemPath>../Common/Minimal/comtest.c</itemPath>
|
||||
<itemPath>../Common/Minimal/integer.c</itemPath>
|
||||
<itemPath>timertest.c</itemPath>
|
||||
</logicalFolder>
|
||||
<itemPath>FreeRTOSConfig.h</itemPath>
|
||||
<itemPath>lcd.c</itemPath>
|
||||
<itemPath>lcd.h</itemPath>
|
||||
<itemPath>main.c</itemPath>
|
||||
<itemPath>timertest.h</itemPath>
|
||||
<itemPath>serial/serial.c</itemPath>
|
||||
<itemPath>ParTest/ParTest.c</itemPath>
|
||||
</logicalFolder>
|
||||
<logicalFolder name="ExternalFiles"
|
||||
displayName="Important Files"
|
||||
projectFiles="false">
|
||||
<itemPath>Makefile</itemPath>
|
||||
</logicalFolder>
|
||||
</logicalFolder>
|
||||
<sourceRootList>
|
||||
<Elem>../../Source</Elem>
|
||||
<Elem>../Common/Minimal</Elem>
|
||||
<Elem>serial</Elem>
|
||||
<Elem>ParTest</Elem>
|
||||
</sourceRootList>
|
||||
<projectmakefile>Makefile</projectmakefile>
|
||||
<confs>
|
||||
<conf name="default" type="2">
|
||||
<toolsSet>
|
||||
<developmentServer>localhost</developmentServer>
|
||||
<targetDevice>PIC24FJ128GA010</targetDevice>
|
||||
<targetHeader></targetHeader>
|
||||
<targetPluginBoard></targetPluginBoard>
|
||||
<platformTool>Simulator</platformTool>
|
||||
<languageToolchain>XC16</languageToolchain>
|
||||
<languageToolchainVersion>1.25</languageToolchainVersion>
|
||||
<platform>3</platform>
|
||||
</toolsSet>
|
||||
<compileType>
|
||||
<linkerTool>
|
||||
<linkerLibItems>
|
||||
</linkerLibItems>
|
||||
</linkerTool>
|
||||
<archiverTool>
|
||||
</archiverTool>
|
||||
<loading>
|
||||
<useAlternateLoadableFile>false</useAlternateLoadableFile>
|
||||
<parseOnProdLoad>false</parseOnProdLoad>
|
||||
<alternateLoadableFile></alternateLoadableFile>
|
||||
</loading>
|
||||
</compileType>
|
||||
<makeCustomizationType>
|
||||
<makeCustomizationPreStepEnabled>false</makeCustomizationPreStepEnabled>
|
||||
<makeCustomizationPreStep></makeCustomizationPreStep>
|
||||
<makeCustomizationPostStepEnabled>false</makeCustomizationPostStepEnabled>
|
||||
<makeCustomizationPostStep></makeCustomizationPostStep>
|
||||
<makeCustomizationPutChecksumInUserID>false</makeCustomizationPutChecksumInUserID>
|
||||
<makeCustomizationEnableLongLines>false</makeCustomizationEnableLongLines>
|
||||
<makeCustomizationNormalizeHexFile>false</makeCustomizationNormalizeHexFile>
|
||||
</makeCustomizationType>
|
||||
<C30>
|
||||
<property key="code-model" value="default"/>
|
||||
<property key="const-model" value="default"/>
|
||||
<property key="data-model" value="default"/>
|
||||
<property key="disable-instruction-scheduling" value="false"/>
|
||||
<property key="enable-all-warnings" value="true"/>
|
||||
<property key="enable-ansi-std" value="false"/>
|
||||
<property key="enable-ansi-warnings" value="false"/>
|
||||
<property key="enable-fatal-warnings" value="false"/>
|
||||
<property key="enable-large-arrays" value="false"/>
|
||||
<property key="enable-omit-frame-pointer" value="false"/>
|
||||
<property key="enable-procedural-abstraction" value="false"/>
|
||||
<property key="enable-short-double" value="false"/>
|
||||
<property key="enable-symbols" value="true"/>
|
||||
<property key="enable-unroll-loops" value="false"/>
|
||||
<property key="extra-include-directories" value=""/>
|
||||
<property key="isolate-each-function" value="true"/>
|
||||
<property key="keep-inline" value="false"/>
|
||||
<property key="oXC16gcc-align-arr" value="false"/>
|
||||
<property key="oXC16gcc-cnsts-mauxflash" value="false"/>
|
||||
<property key="oXC16gcc-data-sects" value="true"/>
|
||||
<property key="oXC16gcc-errata" value=""/>
|
||||
<property key="oXC16gcc-fillupper" value=""/>
|
||||
<property key="oXC16gcc-large-aggregate" value="false"/>
|
||||
<property key="oXC16gcc-mauxflash" value="false"/>
|
||||
<property key="oXC16gcc-mpa-lvl" value=""/>
|
||||
<property key="oXC16gcc-name-text-sec" value=""/>
|
||||
<property key="oXC16gcc-near-chars" value="false"/>
|
||||
<property key="oXC16gcc-no-isr-warn" value="false"/>
|
||||
<property key="oXC16gcc-sfr-warn" value="false"/>
|
||||
<property key="oXC16gcc-smar-io-lvl" value="1"/>
|
||||
<property key="oXC16gcc-smart-io-fmt" value=""/>
|
||||
<property key="optimization-level" value="0"/>
|
||||
<property key="post-instruction-scheduling" value="default"/>
|
||||
<property key="pre-instruction-scheduling" value="default"/>
|
||||
<property key="preprocessor-macros" value=""/>
|
||||
<property key="scalar-model" value="default"/>
|
||||
<property key="use-cci" value="false"/>
|
||||
<property key="use-iar" value="false"/>
|
||||
<appendMe value="-I ../../Source/include -I ../../Source/portable/MPLAB/PIC24_dsPIC -I ../Common/include -I . -Wextra"/>
|
||||
</C30>
|
||||
<C30-AR>
|
||||
<property key="additional-options-chop-files" value="false"/>
|
||||
</C30-AR>
|
||||
<C30-AS>
|
||||
<property key="assembler-symbols" value=""/>
|
||||
<property key="expand-macros" value="false"/>
|
||||
<property key="extra-include-directories-for-assembler" value=""/>
|
||||
<property key="extra-include-directories-for-preprocessor" value=""/>
|
||||
<property key="false-conditionals" value="false"/>
|
||||
<property key="keep-locals" value="false"/>
|
||||
<property key="list-assembly" value="false"/>
|
||||
<property key="list-section-info" value="false"/>
|
||||
<property key="list-source" value="false"/>
|
||||
<property key="list-symbols" value="false"/>
|
||||
<property key="oXC16asm-extra-opts" value=""/>
|
||||
<property key="oXC16asm-list-to-file" value="false"/>
|
||||
<property key="omit-debug-dirs" value="false"/>
|
||||
<property key="omit-forms" value="false"/>
|
||||
<property key="preprocessor-macros" value=""/>
|
||||
<property key="relax" value="false"/>
|
||||
<property key="warning-level" value="emit-warnings"/>
|
||||
</C30-AS>
|
||||
<C30-LD>
|
||||
<property key="additional-options-use-response-files" value="false"/>
|
||||
<property key="boot-eeprom" value="no_eeprom"/>
|
||||
<property key="boot-flash" value="no_flash"/>
|
||||
<property key="boot-ram" value="no_ram"/>
|
||||
<property key="boot-write-protect" value="no_write_protect"/>
|
||||
<property key="enable-check-sections" value="false"/>
|
||||
<property key="enable-data-init" value="true"/>
|
||||
<property key="enable-default-isr" value="true"/>
|
||||
<property key="enable-handles" value="true"/>
|
||||
<property key="enable-pack-data" value="true"/>
|
||||
<property key="extra-lib-directories" value=""/>
|
||||
<property key="fill-flash-options-addr" value=""/>
|
||||
<property key="fill-flash-options-const" value=""/>
|
||||
<property key="fill-flash-options-how" value="0"/>
|
||||
<property key="fill-flash-options-inc-const" value="1"/>
|
||||
<property key="fill-flash-options-increment" value=""/>
|
||||
<property key="fill-flash-options-seq" value=""/>
|
||||
<property key="fill-flash-options-what" value="0"/>
|
||||
<property key="general-code-protect" value="no_code_protect"/>
|
||||
<property key="general-write-protect" value="no_write_protect"/>
|
||||
<property key="generate-cross-reference-file" value="false"/>
|
||||
<property key="heap-size" value=""/>
|
||||
<property key="input-libraries" value=""/>
|
||||
<property key="linker-stack" value="true"/>
|
||||
<property key="linker-symbols" value=""/>
|
||||
<property key="map-file" value="${DISTDIR}/${PROJECTNAME}.${IMAGE_TYPE}.map"/>
|
||||
<property key="oXC16ld-extra-opts" value=""/>
|
||||
<property key="oXC16ld-fill-upper" value="0"/>
|
||||
<property key="oXC16ld-force-link" value="false"/>
|
||||
<property key="oXC16ld-no-smart-io" value="false"/>
|
||||
<property key="oXC16ld-nostdlib" value="false"/>
|
||||
<property key="oXC16ld-stackguard" value="16"/>
|
||||
<property key="preprocessor-macros" value=""/>
|
||||
<property key="remove-unused-sections" value="false"/>
|
||||
<property key="report-memory-usage" value="true"/>
|
||||
<property key="secure-eeprom" value="no_eeprom"/>
|
||||
<property key="secure-flash" value="no_flash"/>
|
||||
<property key="secure-ram" value="no_ram"/>
|
||||
<property key="secure-write-protect" value="no_write_protect"/>
|
||||
<property key="stack-size" value="16"/>
|
||||
<property key="symbol-stripping" value=""/>
|
||||
<property key="trace-symbols" value=""/>
|
||||
<property key="warn-section-align" value="false"/>
|
||||
</C30-LD>
|
||||
<C30Global>
|
||||
<property key="common-include-directories" value=""/>
|
||||
<property key="dual-boot-partition" value="0"/>
|
||||
<property key="fast-math" value="false"/>
|
||||
<property key="generic-16-bit" value="false"/>
|
||||
<property key="legacy-libc" value="false"/>
|
||||
<property key="oXC16glb-macros" value=""/>
|
||||
<property key="output-file-format" value="elf"/>
|
||||
<property key="relaxed-math" value="false"/>
|
||||
<property key="save-temps" value="false"/>
|
||||
</C30Global>
|
||||
<ICD3PlatformTool>
|
||||
<property key="ADC 1" value="true"/>
|
||||
<property key="AutoSelectMemRanges" value="auto"/>
|
||||
<property key="CRC" value="true"/>
|
||||
<property key="Freeze All Other Peripherals" value="true"/>
|
||||
<property key="I2C1" value="true"/>
|
||||
<property key="I2C2" value="true"/>
|
||||
<property key="INPUT CAPTURE 1" value="true"/>
|
||||
<property key="INPUT CAPTURE 2" value="true"/>
|
||||
<property key="INPUT CAPTURE 3" value="true"/>
|
||||
<property key="INPUT CAPTURE 4" value="true"/>
|
||||
<property key="INPUT CAPTURE 5" value="true"/>
|
||||
<property key="OUTPUT COMPARE 1" value="true"/>
|
||||
<property key="OUTPUT COMPARE 2" value="true"/>
|
||||
<property key="OUTPUT COMPARE 3" value="true"/>
|
||||
<property key="OUTPUT COMPARE 4" value="true"/>
|
||||
<property key="OUTPUT COMPARE 5" value="true"/>
|
||||
<property key="SPI 1" value="true"/>
|
||||
<property key="SPI 2" value="true"/>
|
||||
<property key="SecureSegment.SegmentProgramming" value="FullChipProgramming"/>
|
||||
<property key="TIMER1" value="true"/>
|
||||
<property key="TIMER2" value="true"/>
|
||||
<property key="TIMER3" value="true"/>
|
||||
<property key="TIMER4" value="true"/>
|
||||
<property key="TIMER5" value="true"/>
|
||||
<property key="ToolFirmwareFilePath"
|
||||
value="Press to browse for a specific firmware version"/>
|
||||
<property key="ToolFirmwareOption.UseLatestFirmware" value="true"/>
|
||||
<property key="UART 1" value="true"/>
|
||||
<property key="UART 2" value="true"/>
|
||||
<property key="debugoptions.useswbreakpoints" value="false"/>
|
||||
<property key="hwtoolclock.frcindebug" value="false"/>
|
||||
<property key="memories.aux" value="false"/>
|
||||
<property key="memories.bootflash" value="false"/>
|
||||
<property key="memories.configurationmemory" value="true"/>
|
||||
<property key="memories.configurationmemory2" value="true"/>
|
||||
<property key="memories.dataflash" value="true"/>
|
||||
<property key="memories.eeprom" value="true"/>
|
||||
<property key="memories.flashdata" value="true"/>
|
||||
<property key="memories.id" value="true"/>
|
||||
<property key="memories.programmemory" value="true"/>
|
||||
<property key="memories.programmemory.end" value="0x157fb"/>
|
||||
<property key="memories.programmemory.partition2" value="true"/>
|
||||
<property key="memories.programmemory.partition2.end"
|
||||
value="${memories.programmemory.partition2.end.value}"/>
|
||||
<property key="memories.programmemory.partition2.start"
|
||||
value="${memories.programmemory.partition2.start.value}"/>
|
||||
<property key="memories.programmemory.start" value="0x0"/>
|
||||
<property key="poweroptions.powerenable" value="false"/>
|
||||
<property key="programoptions.donoteraseauxmem" value="false"/>
|
||||
<property key="programoptions.eraseb4program" value="true"/>
|
||||
<property key="programoptions.preservedataflash" value="false"/>
|
||||
<property key="programoptions.preserveeeprom" value="false"/>
|
||||
<property key="programoptions.preserveprogramrange" value="false"/>
|
||||
<property key="programoptions.preserveprogramrange.end" value="0x157fb"/>
|
||||
<property key="programoptions.preserveprogramrange.start" value="0x0"/>
|
||||
<property key="programoptions.preserveuserid" value="false"/>
|
||||
<property key="programoptions.programcalmem" value="false"/>
|
||||
<property key="programoptions.programuserotp" value="false"/>
|
||||
<property key="programoptions.testmodeentrymethod" value="VDDFirst"/>
|
||||
<property key="programoptions.usehighvoltageonmclr" value="false"/>
|
||||
<property key="programoptions.uselvpprogramming" value="false"/>
|
||||
<property key="voltagevalue" value="3.25"/>
|
||||
</ICD3PlatformTool>
|
||||
<Simulator>
|
||||
<property key="codecoverage.enabled" value="Disable"/>
|
||||
<property key="codecoverage.enableoutputtofile" value="false"/>
|
||||
<property key="codecoverage.outputfile" value=""/>
|
||||
<property key="oscillator.auxfrequency" value="120"/>
|
||||
<property key="oscillator.auxfrequencyunit" value="Mega"/>
|
||||
<property key="oscillator.frequency" value="1"/>
|
||||
<property key="oscillator.frequencyunit" value="Mega"/>
|
||||
<property key="oscillator.rcfrequency" value="250"/>
|
||||
<property key="oscillator.rcfrequencyunit" value="Kilo"/>
|
||||
<property key="performancedata.show" value="false"/>
|
||||
<property key="periphADC1.altscl" value="false"/>
|
||||
<property key="periphADC1.minTacq" value=""/>
|
||||
<property key="periphADC1.tacqunits" value="microseconds"/>
|
||||
<property key="periphADC2.altscl" value="false"/>
|
||||
<property key="periphADC2.minTacq" value=""/>
|
||||
<property key="periphADC2.tacqunits" value="microseconds"/>
|
||||
<property key="periphComp1.gte" value="gt"/>
|
||||
<property key="periphComp2.gte" value="gt"/>
|
||||
<property key="periphComp3.gte" value="gt"/>
|
||||
<property key="periphComp4.gte" value="gt"/>
|
||||
<property key="periphComp5.gte" value="gt"/>
|
||||
<property key="periphComp6.gte" value="gt"/>
|
||||
<property key="uart10io.output" value="window"/>
|
||||
<property key="uart10io.outputfile" value=""/>
|
||||
<property key="uart10io.uartioenabled" value="false"/>
|
||||
<property key="uart1io.output" value="window"/>
|
||||
<property key="uart1io.outputfile" value=""/>
|
||||
<property key="uart1io.uartioenabled" value="false"/>
|
||||
<property key="uart2io.output" value="window"/>
|
||||
<property key="uart2io.outputfile" value=""/>
|
||||
<property key="uart2io.uartioenabled" value="false"/>
|
||||
<property key="uart3io.output" value="window"/>
|
||||
<property key="uart3io.outputfile" value=""/>
|
||||
<property key="uart3io.uartioenabled" value="false"/>
|
||||
<property key="uart4io.output" value="window"/>
|
||||
<property key="uart4io.outputfile" value=""/>
|
||||
<property key="uart4io.uartioenabled" value="false"/>
|
||||
<property key="uart5io.output" value="window"/>
|
||||
<property key="uart5io.outputfile" value=""/>
|
||||
<property key="uart5io.uartioenabled" value="false"/>
|
||||
<property key="uart6io.output" value="window"/>
|
||||
<property key="uart6io.outputfile" value=""/>
|
||||
<property key="uart6io.uartioenabled" value="false"/>
|
||||
<property key="uart7io.output" value="window"/>
|
||||
<property key="uart7io.outputfile" value=""/>
|
||||
<property key="uart7io.uartioenabled" value="false"/>
|
||||
<property key="uart8io.output" value="window"/>
|
||||
<property key="uart8io.outputfile" value=""/>
|
||||
<property key="uart8io.uartioenabled" value="false"/>
|
||||
<property key="uart9io.output" value="window"/>
|
||||
<property key="uart9io.outputfile" value=""/>
|
||||
<property key="uart9io.uartioenabled" value="false"/>
|
||||
<property key="warningmessagebreakoptions.W0001_CORE_BITREV_MODULO_EN"
|
||||
value="report"/>
|
||||
<property key="warningmessagebreakoptions.W0002_CORE_SECURE_MEMORYACCESS"
|
||||
value="report"/>
|
||||
<property key="warningmessagebreakoptions.W0003_CORE_SW_RESET" value="report"/>
|
||||
<property key="warningmessagebreakoptions.W0004_CORE_WDT_RESET" value="report"/>
|
||||
<property key="warningmessagebreakoptions.W0005_CORE_IOPUW_RESET"
|
||||
value="report"/>
|
||||
<property key="warningmessagebreakoptions.W0006_CORE_CODE_GUARD_PFC_RESET"
|
||||
value="report"/>
|
||||
<property key="warningmessagebreakoptions.W0007_CORE_DO_LOOP_STACK_UNDERFLOW"
|
||||
value="report"/>
|
||||
<property key="warningmessagebreakoptions.W0008_CORE_DO_LOOP_STACK_OVERFLOW"
|
||||
value="report"/>
|
||||
<property key="warningmessagebreakoptions.W0009_CORE_NESTED_DO_LOOP_RANGE"
|
||||
value="report"/>
|
||||
<property key="warningmessagebreakoptions.W0010_CORE_SIM32_ODD_WORDACCESS"
|
||||
value="report"/>
|
||||
<property key="warningmessagebreakoptions.W0011_CORE_SIM32_UNIMPLEMENTED_RAMACCESS"
|
||||
value="report"/>
|
||||
<property key="warningmessagebreakoptions.W0012_CORE_STACK_OVERFLOW_RESET"
|
||||
value="report"/>
|
||||
<property key="warningmessagebreakoptions.W0013_CORE_STACK_UNDERFLOW_RESET"
|
||||
value="report"/>
|
||||
<property key="warningmessagebreakoptions.W0101_SIM_UPDATE_FAILED"
|
||||
value="report"/>
|
||||
<property key="warningmessagebreakoptions.W0102_SIM_PERIPH_MISSING"
|
||||
value="report"/>
|
||||
<property key="warningmessagebreakoptions.W0103_SIM_PERIPH_FAILED"
|
||||
value="report"/>
|
||||
<property key="warningmessagebreakoptions.W0104_SIM_FAILED_TO_INIT_TOOL"
|
||||
value="report"/>
|
||||
<property key="warningmessagebreakoptions.W0105_SIM_INVALID_FIELD"
|
||||
value="report"/>
|
||||
<property key="warningmessagebreakoptions.W0201_ADC_NO_STIMULUS_FILE"
|
||||
value="report"/>
|
||||
<property key="warningmessagebreakoptions.W0202_ADC_GO_DONE_BIT" value="report"/>
|
||||
<property key="warningmessagebreakoptions.W0203_ADC_MINIMUM_2_TAD"
|
||||
value="report"/>
|
||||
<property key="warningmessagebreakoptions.W0204_ADC_TAD_TOO_SMALL"
|
||||
value="report"/>
|
||||
<property key="warningmessagebreakoptions.W0205_ADC_UNEXPECTED_TRANSITION"
|
||||
value="report"/>
|
||||
<property key="warningmessagebreakoptions.W0206_ADC_SAMP_TIME_TOO_SHORT"
|
||||
value="report"/>
|
||||
<property key="warningmessagebreakoptions.W0207_ADC_NO_PINS_SCANNED"
|
||||
value="report"/>
|
||||
<property key="warningmessagebreakoptions.W0208_ADC_UNSUPPORTED_CLOCK_SOURCE"
|
||||
value="report"/>
|
||||
<property key="warningmessagebreakoptions.W0209_ADC_ANALOG_CHANNEL_DIGITAL"
|
||||
value="report"/>
|
||||
<property key="warningmessagebreakoptions.W0210_ADC_ANALOG_CHANNEL_OUTPUT"
|
||||
value="report"/>
|
||||
<property key="warningmessagebreakoptions.W0211_ADC_PIN_INVALID_CHANNEL"
|
||||
value="report"/>
|
||||
<property key="warningmessagebreakoptions.W0212_ADC_BAND_GAP_NOT_SUPPORTED"
|
||||
value="report"/>
|
||||
<property key="warningmessagebreakoptions.W0213_ADC_RESERVED_SSRC"
|
||||
value="report"/>
|
||||
<property key="warningmessagebreakoptions.W0214_ADC_POSITIVE_INPUT_DIGITAL"
|
||||
value="report"/>
|
||||
<property key="warningmessagebreakoptions.W0215_ADC_POSITIVE_INPUT_OUTPUT"
|
||||
value="report"/>
|
||||
<property key="warningmessagebreakoptions.W0216_ADC_NEGATIVE_INPUT_DIGITAL"
|
||||
value="report"/>
|
||||
<property key="warningmessagebreakoptions.W0217_ADC_NEGATIVE_INPUT_OUTPUT"
|
||||
value="report"/>
|
||||
<property key="warningmessagebreakoptions.W0218_ADC_REFERENCE_HIGH_DIGITAL"
|
||||
value="report"/>
|
||||
<property key="warningmessagebreakoptions.W0219_ADC_REFERENCE_HIGH_OUTPUT"
|
||||
value="report"/>
|
||||
<property key="warningmessagebreakoptions.W0220_ADC_REFERENCE_LOW_DIGITAL"
|
||||
value="report"/>
|
||||
<property key="warningmessagebreakoptions.W0221_ADC_REFERENCE_LOW_OUTPUT"
|
||||
value="report"/>
|
||||
<property key="warningmessagebreakoptions.W0222_ADC_OVERFLOW" value="report"/>
|
||||
<property key="warningmessagebreakoptions.W0223_ADC_UNDERFLOW" value="report"/>
|
||||
<property key="warningmessagebreakoptions.W0224_ADC_CTMU_NOT_SUPPORTED"
|
||||
value="report"/>
|
||||
<property key="warningmessagebreakoptions.W0225_ADC_INVALID_CH0S"
|
||||
value="report"/>
|
||||
<property key="warningmessagebreakoptions.W0226_ADC_VBAT_NOT_SUPPORTED"
|
||||
value="report"/>
|
||||
<property key="warningmessagebreakoptions.W0227_ADC_INVALID_ADCS"
|
||||
value="report"/>
|
||||
<property key="warningmessagebreakoptions.W0228_ADC_INVALID_ADCS"
|
||||
value="report"/>
|
||||
<property key="warningmessagebreakoptions.W0229_ADC_INVALID_ADCS"
|
||||
value="report"/>
|
||||
<property key="warningmessagebreakoptions.W1201_DATAFLASH_MEM_OUTSIDE_RANGE"
|
||||
value="report"/>
|
||||
<property key="warningmessagebreakoptions.W1202_DATAFLASH_ERASE_WHILE_LOCKED"
|
||||
value="report"/>
|
||||
<property key="warningmessagebreakoptions.W1203_DATAFLASH_WRITE_WHILE_LOCKED"
|
||||
value="report"/>
|
||||
<property key="warningmessagebreakoptions.W1401_DMA_PERIPH_NOT_AVAIL"
|
||||
value="report"/>
|
||||
<property key="warningmessagebreakoptions.W1402_DMA_INVALID_IRQ" value="report"/>
|
||||
<property key="warningmessagebreakoptions.W1403_DMA_INVALID_SFR" value="report"/>
|
||||
<property key="warningmessagebreakoptions.W1404_DMA_INVALID_DMA_ADDR"
|
||||
value="report"/>
|
||||
<property key="warningmessagebreakoptions.W1405_DMA_IRQ_DIR_MISMATCH"
|
||||
value="report"/>
|
||||
<property key="warningmessagebreakoptions.W2001_INPUTCAPTURE_TMR3_UNAVAILABLE"
|
||||
value="report"/>
|
||||
<property key="warningmessagebreakoptions.W2002_INPUTCAPTURE_CAPTURE_EMPTY"
|
||||
value="report"/>
|
||||
<property key="warningmessagebreakoptions.W2003_INPUTCAPTURE_SYNCSEL_NOT_AVIALABLE"
|
||||
value="report"/>
|
||||
<property key="warningmessagebreakoptions.W2004_INPUTCAPTURE_BAD_SYNC_SOURCE"
|
||||
value="report"/>
|
||||
<property key="warningmessagebreakoptions.W2501_OUTPUTCOMPARE_SYNCSEL_NOT_AVIALABLE"
|
||||
value="report"/>
|
||||
<property key="warningmessagebreakoptions.W2502_OUTPUTCOMPARE_BAD_SYNC_SOURCE"
|
||||
value="report"/>
|
||||
<property key="warningmessagebreakoptions.W2503_OUTPUTCOMPARE_BAD_TRIGGER_SOURCE"
|
||||
value="report"/>
|
||||
<property key="warningmessagebreakoptions.W9001_TMR_GATE_AND_EXTCLOCK_ENABLED"
|
||||
value="report"/>
|
||||
<property key="warningmessagebreakoptions.W9002_TMR_NO_PIN_AVAILABLE"
|
||||
value="report"/>
|
||||
<property key="warningmessagebreakoptions.W9003_TMR_INVALID_CLOCK_SOURCE"
|
||||
value="report"/>
|
||||
<property key="warningmessagebreakoptions.W9201_UART_TX_OVERFLOW"
|
||||
value="report"/>
|
||||
<property key="warningmessagebreakoptions.W9202_UART_TX_CAPTUREFILE"
|
||||
value="report"/>
|
||||
<property key="warningmessagebreakoptions.W9203_UART_TX_INVALIDINTERRUPTMODE"
|
||||
value="report"/>
|
||||
<property key="warningmessagebreakoptions.W9204_UART_RX_EMPTY_QUEUE"
|
||||
value="report"/>
|
||||
<property key="warningmessagebreakoptions.W9205_UART_TX_BADFILE" value="report"/>
|
||||
<property key="warningmessagebreakoptions.W9801_SCL_BAD_SUBTYPE_INDICATION"
|
||||
value="report"/>
|
||||
<property key="warningmessagebreakoptions.W9802_SCL_FILE_NOT_FOUND"
|
||||
value="report"/>
|
||||
<property key="warningmessagebreakoptions.W9803_SCL_FAILED_TO_READ_FILE"
|
||||
value="report"/>
|
||||
<property key="warningmessagebreakoptions.W9804_SCL_UNRECOGNIZED_LABEL"
|
||||
value="report"/>
|
||||
<property key="warningmessagebreakoptions.W9805_SCL_UNRECOGNIZED_VAR"
|
||||
value="report"/>
|
||||
<property key="warningmessagebreakoptions.displaywarningmessagesoption"
|
||||
value=""/>
|
||||
<property key="warningmessagebreakoptions.warningmessages" value="holdstate"/>
|
||||
</Simulator>
|
||||
</conf>
|
||||
</confs>
|
||||
</configurationDescriptor>
|
||||
@ -0,0 +1,25 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<configurationDescriptor version="62">
|
||||
<projectmakefile>Makefile</projectmakefile>
|
||||
<defaultConf>0</defaultConf>
|
||||
<confs>
|
||||
<conf name="default" type="2">
|
||||
<platformToolSN></platformToolSN>
|
||||
<languageToolchainDir>C:\DevTools\Microchip\xc16\v1.25\bin</languageToolchainDir>
|
||||
<mdbdebugger version="1">
|
||||
<placeholder1>place holder 1</placeholder1>
|
||||
<placeholder2>place holder 2</placeholder2>
|
||||
</mdbdebugger>
|
||||
<runprofile version="6">
|
||||
<args></args>
|
||||
<rundir></rundir>
|
||||
<buildfirst>true</buildfirst>
|
||||
<console-type>0</console-type>
|
||||
<terminal-type>0</terminal-type>
|
||||
<remove-instrumentation>0</remove-instrumentation>
|
||||
<environment>
|
||||
</environment>
|
||||
</runprofile>
|
||||
</conf>
|
||||
</confs>
|
||||
</configurationDescriptor>
|
||||
@ -0,0 +1,10 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project-private xmlns="http://www.netbeans.org/ns/project-private/1">
|
||||
<editor-bookmarks xmlns="http://www.netbeans.org/ns/editor-bookmarks/1"/>
|
||||
<editor-bookmarks xmlns="http://www.netbeans.org/ns/editor-bookmarks/2" lastBookmarkId="0"/>
|
||||
<open-files xmlns="http://www.netbeans.org/ns/projectui-open-files/2">
|
||||
<group name="Masters19024">
|
||||
<file>file:/C:/E/Dev/FreeRTOS/WorkingCopy/FreeRTOS/Demo/PIC24_MPLAB/main.c</file>
|
||||
</group>
|
||||
</open-files>
|
||||
</project-private>
|
||||
17
kernel/FreeRTOS/Demo/PIC24_MPLAB/nbproject/project.xml
Normal file
17
kernel/FreeRTOS/Demo/PIC24_MPLAB/nbproject/project.xml
Normal file
@ -0,0 +1,17 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project xmlns="http://www.netbeans.org/ns/project/1">
|
||||
<type>com.microchip.mplab.nbide.embedded.makeproject</type>
|
||||
<configuration>
|
||||
<data xmlns="http://www.netbeans.org/ns/make-project/1">
|
||||
<name>RTOSDemo_PIC24_dsPIC</name>
|
||||
<creation-uuid>c6678f4a-9efa-4809-b5d8-ac295272b608</creation-uuid>
|
||||
<make-project-type>0</make-project-type>
|
||||
<c-extensions>c</c-extensions>
|
||||
<cpp-extensions/>
|
||||
<header-extensions>h</header-extensions>
|
||||
<sourceEncoding>ISO-8859-1</sourceEncoding>
|
||||
<asminc-extensions/>
|
||||
<make-dep-projects/>
|
||||
</data>
|
||||
</configuration>
|
||||
</project>
|
||||
1425
kernel/FreeRTOS/Demo/PIC24_MPLAB/p24FJ128GA010.gld
Normal file
1425
kernel/FreeRTOS/Demo/PIC24_MPLAB/p24FJ128GA010.gld
Normal file
File diff suppressed because it is too large
Load Diff
228
kernel/FreeRTOS/Demo/PIC24_MPLAB/serial/serial.c
Normal file
228
kernel/FreeRTOS/Demo/PIC24_MPLAB/serial/serial.c
Normal file
@ -0,0 +1,228 @@
|
||||
/*
|
||||
* FreeRTOS V202212.01
|
||||
* Copyright (C) 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||
* this software and associated documentation files (the "Software"), to deal in
|
||||
* the Software without restriction, including without limitation the rights to
|
||||
* use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
|
||||
* the Software, and to permit persons to whom the Software is furnished to do so,
|
||||
* subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in all
|
||||
* copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
||||
* FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
||||
* COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
||||
* IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
*
|
||||
* https://www.FreeRTOS.org
|
||||
* https://github.com/FreeRTOS
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
/* 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>
|
||||
|
||||
/* Scheduler include files. */
|
||||
#include "FreeRTOS.h"
|
||||
#include "queue.h"
|
||||
#include "task.h"
|
||||
|
||||
/* Demo app include files. */
|
||||
#include "serial.h"
|
||||
|
||||
/* Hardware setup. */
|
||||
#define serOUTPUT 0
|
||||
#define serINPUT 1
|
||||
#define serLOW_SPEED 0
|
||||
#define serONE_STOP_BIT 0
|
||||
#define serEIGHT_DATA_BITS_NO_PARITY 0
|
||||
#define serNORMAL_IDLE_STATE 0
|
||||
#define serAUTO_BAUD_OFF 0
|
||||
#define serLOOPBACK_OFF 0
|
||||
#define serWAKE_UP_DISABLE 0
|
||||
#define serNO_HARDWARE_FLOW_CONTROL 0
|
||||
#define serSTANDARD_IO 0
|
||||
#define serNO_IRDA 0
|
||||
#define serCONTINUE_IN_IDLE_MODE 0
|
||||
#define serUART_ENABLED 1
|
||||
#define serINTERRUPT_ON_SINGLE_CHAR 0
|
||||
#define serTX_ENABLE 1
|
||||
#define serINTERRUPT_ENABLE 1
|
||||
#define serINTERRUPT_DISABLE 0
|
||||
#define serCLEAR_FLAG 0
|
||||
#define serSET_FLAG 1
|
||||
|
||||
|
||||
/* The queues used to communicate between tasks and ISR's. */
|
||||
static QueueHandle_t xRxedChars;
|
||||
static QueueHandle_t xCharsForTx;
|
||||
|
||||
static portBASE_TYPE xTxHasEnded;
|
||||
/*-----------------------------------------------------------*/
|
||||
|
||||
xComPortHandle xSerialPortInitMinimal( unsigned long ulWantedBaud, unsigned portBASE_TYPE uxQueueLength )
|
||||
{
|
||||
char cChar;
|
||||
|
||||
/* Create the queues used by the com test task. */
|
||||
xRxedChars = xQueueCreate( uxQueueLength, ( unsigned portBASE_TYPE ) sizeof( signed char ) );
|
||||
xCharsForTx = xQueueCreate( uxQueueLength, ( unsigned portBASE_TYPE ) sizeof( signed char ) );
|
||||
|
||||
/* Setup the UART. */
|
||||
U2MODEbits.BRGH = serLOW_SPEED;
|
||||
U2MODEbits.STSEL = serONE_STOP_BIT;
|
||||
U2MODEbits.PDSEL = serEIGHT_DATA_BITS_NO_PARITY;
|
||||
U2MODEbits.RXINV = serNORMAL_IDLE_STATE;
|
||||
U2MODEbits.ABAUD = serAUTO_BAUD_OFF;
|
||||
U2MODEbits.LPBACK = serLOOPBACK_OFF;
|
||||
U2MODEbits.WAKE = serWAKE_UP_DISABLE;
|
||||
U2MODEbits.UEN = serNO_HARDWARE_FLOW_CONTROL;
|
||||
U2MODEbits.IREN = serNO_IRDA;
|
||||
U2MODEbits.USIDL = serCONTINUE_IN_IDLE_MODE;
|
||||
U2MODEbits.UARTEN = serUART_ENABLED;
|
||||
|
||||
U2BRG = (unsigned short)(( (float)configCPU_CLOCK_HZ / ( (float)16 * (float)ulWantedBaud ) ) - (float)0.5);
|
||||
|
||||
U2STAbits.URXISEL = serINTERRUPT_ON_SINGLE_CHAR;
|
||||
U2STAbits.UTXEN = serTX_ENABLE;
|
||||
U2STAbits.UTXINV = serNORMAL_IDLE_STATE;
|
||||
U2STAbits.UTXISEL0 = serINTERRUPT_ON_SINGLE_CHAR;
|
||||
U2STAbits.UTXISEL1 = serINTERRUPT_ON_SINGLE_CHAR;
|
||||
|
||||
/* It is assumed that this function is called prior to the scheduler being
|
||||
started. Therefore interrupts must not be allowed to occur yet as they
|
||||
may attempt to perform a context switch. */
|
||||
portDISABLE_INTERRUPTS();
|
||||
|
||||
IFS1bits.U2RXIF = serCLEAR_FLAG;
|
||||
IFS1bits.U2TXIF = serCLEAR_FLAG;
|
||||
IPC7bits.U2RXIP = configKERNEL_INTERRUPT_PRIORITY;
|
||||
IPC7bits.U2TXIP = configKERNEL_INTERRUPT_PRIORITY;
|
||||
IEC1bits.U2TXIE = serINTERRUPT_ENABLE;
|
||||
IEC1bits.U2RXIE = serINTERRUPT_ENABLE;
|
||||
|
||||
/* Clear the Rx buffer. */
|
||||
while( U2STAbits.URXDA == serSET_FLAG )
|
||||
{
|
||||
cChar = U2RXREG;
|
||||
}
|
||||
|
||||
xTxHasEnded = pdTRUE;
|
||||
|
||||
return NULL;
|
||||
}
|
||||
/*-----------------------------------------------------------*/
|
||||
|
||||
signed portBASE_TYPE xSerialGetChar( xComPortHandle pxPort, signed char *pcRxedChar, TickType_t 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 char cOutChar, TickType_t 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 )
|
||||
{
|
||||
/* Note implemented. */
|
||||
( void ) xPort;
|
||||
}
|
||||
/*-----------------------------------------------------------*/
|
||||
|
||||
void __attribute__((__interrupt__, auto_psv)) _U2RXInterrupt( void )
|
||||
{
|
||||
char cChar;
|
||||
portBASE_TYPE xHigherPriorityTaskWoken = pdFALSE;
|
||||
|
||||
/* Get the character and post it on the queue of Rxed characters.
|
||||
If the post causes a task to wake force a context switch as the woken task
|
||||
may have a higher priority than the task we have interrupted. */
|
||||
IFS1bits.U2RXIF = serCLEAR_FLAG;
|
||||
while( U2STAbits.URXDA )
|
||||
{
|
||||
cChar = U2RXREG;
|
||||
xQueueSendFromISR( xRxedChars, &cChar, &xHigherPriorityTaskWoken );
|
||||
}
|
||||
|
||||
if( xHigherPriorityTaskWoken != pdFALSE )
|
||||
{
|
||||
taskYIELD();
|
||||
}
|
||||
}
|
||||
/*-----------------------------------------------------------*/
|
||||
|
||||
void __attribute__((__interrupt__, auto_psv)) _U2TXInterrupt( void )
|
||||
{
|
||||
signed char cChar;
|
||||
portBASE_TYPE xHigherPriorityTaskWoken = pdFALSE;
|
||||
|
||||
/* If the transmit buffer is full we cannot get the next character.
|
||||
Another interrupt will occur the next time there is space so this does
|
||||
not matter. */
|
||||
IFS1bits.U2TXIF = serCLEAR_FLAG;
|
||||
while( !( U2STAbits.UTXBF ) )
|
||||
{
|
||||
if( xQueueReceiveFromISR( xCharsForTx, &cChar, &xHigherPriorityTaskWoken ) == pdTRUE )
|
||||
{
|
||||
/* Send the next character queued for Tx. */
|
||||
U2TXREG = cChar;
|
||||
}
|
||||
else
|
||||
{
|
||||
/* Queue empty, nothing to send. */
|
||||
xTxHasEnded = pdTRUE;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if( xHigherPriorityTaskWoken != pdFALSE )
|
||||
{
|
||||
taskYIELD();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
135
kernel/FreeRTOS/Demo/PIC24_MPLAB/timertest.c
Normal file
135
kernel/FreeRTOS/Demo/PIC24_MPLAB/timertest.c
Normal file
@ -0,0 +1,135 @@
|
||||
/*
|
||||
* FreeRTOS V202212.01
|
||||
* Copyright (C) 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||
* this software and associated documentation files (the "Software"), to deal in
|
||||
* the Software without restriction, including without limitation the rights to
|
||||
* use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
|
||||
* the Software, and to permit persons to whom the Software is furnished to do so,
|
||||
* subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in all
|
||||
* copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
||||
* FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
||||
* COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
||||
* IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
*
|
||||
* https://www.FreeRTOS.org
|
||||
* https://github.com/FreeRTOS
|
||||
*
|
||||
*/
|
||||
|
||||
/* 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 5
|
||||
|
||||
/* The maximum value the 16bit timer can contain. */
|
||||
#define timerMAX_COUNT 0xffff
|
||||
|
||||
/*-----------------------------------------------------------*/
|
||||
|
||||
/*
|
||||
* Measure the time between this interrupt and the previous interrupt to
|
||||
* calculate the timing jitter. Remember the maximum value the jitter has
|
||||
* ever been calculated to be.
|
||||
*/
|
||||
static void prvCalculateAndStoreJitter( void );
|
||||
|
||||
/*-----------------------------------------------------------*/
|
||||
|
||||
/* The maximum time (in processor clocks) between two consecutive timer
|
||||
interrupts so far. */
|
||||
unsigned short usMaxJitter = 0;
|
||||
|
||||
/*-----------------------------------------------------------*/
|
||||
|
||||
void vSetupTimerTest( unsigned short usFrequencyHz )
|
||||
{
|
||||
/* T2 is used to generate interrupts. T4 is used to provide an accurate
|
||||
time measurement. */
|
||||
T2CON = 0;
|
||||
T4CON = 0;
|
||||
TMR2 = 0;
|
||||
TMR4 = 0;
|
||||
|
||||
/* Timer 2 is going to interrupt at usFrequencyHz Hz. */
|
||||
PR2 = ( unsigned short ) ( configCPU_CLOCK_HZ / ( unsigned long ) usFrequencyHz );
|
||||
|
||||
/* Timer 4 is going to free run from minimum to maximum value. */
|
||||
PR4 = ( unsigned short ) timerMAX_COUNT;
|
||||
|
||||
/* Setup timer 2 interrupt priority to be above the kernel priority so
|
||||
the timer jitter is not effected by the kernel activity. */
|
||||
IPC1bits.T2IP = configKERNEL_INTERRUPT_PRIORITY + 1;
|
||||
|
||||
/* Clear the interrupt as a starting condition. */
|
||||
IFS0bits.T2IF = 0;
|
||||
|
||||
/* Enable the interrupt. */
|
||||
IEC0bits.T2IE = 1;
|
||||
|
||||
/* Start both timers. */
|
||||
T2CONbits.TON = 1;
|
||||
T4CONbits.TON = 1;
|
||||
}
|
||||
/*-----------------------------------------------------------*/
|
||||
|
||||
static void prvCalculateAndStoreJitter( void )
|
||||
{
|
||||
static unsigned short usLastCount = 0, usSettleCount = 0;
|
||||
unsigned short usThisCount, usDifference;
|
||||
|
||||
/* Capture the timer value as we enter the interrupt. */
|
||||
usThisCount = TMR4;
|
||||
|
||||
if( usSettleCount >= timerSETTLE_TIME )
|
||||
{
|
||||
/* What is the difference between the timer value in this interrupt
|
||||
and the value from the last interrupt. */
|
||||
usDifference = usThisCount - usLastCount;
|
||||
|
||||
/* Store the difference in the timer values if it is larger than the
|
||||
currently stored largest value. The difference over and above the
|
||||
expected difference will give the 'jitter' in the processing of these
|
||||
interrupts. */
|
||||
if( usDifference > usMaxJitter )
|
||||
{
|
||||
usMaxJitter = usDifference;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
/* Don't bother storing any values for the first couple of
|
||||
interrupts. */
|
||||
usSettleCount++;
|
||||
}
|
||||
|
||||
/* Remember what the timer value was this time through, so we can calculate
|
||||
the difference the next time through. */
|
||||
usLastCount = usThisCount;
|
||||
}
|
||||
/*-----------------------------------------------------------*/
|
||||
|
||||
void __attribute__((__interrupt__, auto_psv)) _T2Interrupt( void )
|
||||
{
|
||||
/* Work out the time between this and the previous interrupt. */
|
||||
prvCalculateAndStoreJitter();
|
||||
|
||||
/* Clear the timer interrupt. */
|
||||
IFS0bits.T2IF = 0;
|
||||
}
|
||||
|
||||
|
||||
36
kernel/FreeRTOS/Demo/PIC24_MPLAB/timertest.h
Normal file
36
kernel/FreeRTOS/Demo/PIC24_MPLAB/timertest.h
Normal file
@ -0,0 +1,36 @@
|
||||
/*
|
||||
* FreeRTOS V202212.01
|
||||
* Copyright (C) 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||
* this software and associated documentation files (the "Software"), to deal in
|
||||
* the Software without restriction, including without limitation the rights to
|
||||
* use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
|
||||
* the Software, and to permit persons to whom the Software is furnished to do so,
|
||||
* subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in all
|
||||
* copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
||||
* FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
||||
* COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
||||
* IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
*
|
||||
* https://www.FreeRTOS.org
|
||||
* https://github.com/FreeRTOS
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef TIMER_TEST_H
|
||||
#define TIMER_TEST_H
|
||||
|
||||
/* Setup the high frequency timer interrupt. */
|
||||
void vSetupTimerTest( unsigned short usFrequencyHz );
|
||||
|
||||
#endif /* TIMER_TEST_H */
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user