From b5a714d2d109847ac20487eae9861df27670c016 Mon Sep 17 00:00:00 2001 From: rtel Date: Tue, 2 Sep 2014 16:06:57 +0000 Subject: [PATCH] Demo code only: Add the IntQ standard test to the SAM4S project. git-svn-id: https://svn.code.sf.net/p/freertos/code/trunk@2300 1d2547de-c912-0410-9cb9-b8ca96c0e9e2 --- .../CreateProjectDirectoryStructure.bat | 1 + .../RTOSDemo.atsln | 3 + .../RTOSDemo.atsuo | Bin 46080 -> 59904 bytes .../RTOSDemo.cproj | 720 +++++++++--------- .../src/FreeRTOSConfig.h | 1 + .../src/IntQueueTimer.c | 198 +++++ .../src/IntQueueTimer.h | 74 ++ .../CORTEX_M4_ATSAM4S_Atmel_Studio/src/asf.h | 123 +-- .../src/asf/sam/drivers/tc/tc.c | 580 ++++++++++++++ .../src/asf/sam/drivers/tc/tc.h | 113 +++ .../src/main_full.c | 7 + 11 files changed, 1409 insertions(+), 411 deletions(-) create mode 100644 FreeRTOS/Demo/CORTEX_M4_ATSAM4S_Atmel_Studio/src/IntQueueTimer.c create mode 100644 FreeRTOS/Demo/CORTEX_M4_ATSAM4S_Atmel_Studio/src/IntQueueTimer.h create mode 100644 FreeRTOS/Demo/CORTEX_M4_ATSAM4S_Atmel_Studio/src/asf/sam/drivers/tc/tc.c create mode 100644 FreeRTOS/Demo/CORTEX_M4_ATSAM4S_Atmel_Studio/src/asf/sam/drivers/tc/tc.h diff --git a/FreeRTOS/Demo/CORTEX_M4_ATSAM4S_Atmel_Studio/CreateProjectDirectoryStructure.bat b/FreeRTOS/Demo/CORTEX_M4_ATSAM4S_Atmel_Studio/CreateProjectDirectoryStructure.bat index eec526613..26df7ce1d 100644 --- a/FreeRTOS/Demo/CORTEX_M4_ATSAM4S_Atmel_Studio/CreateProjectDirectoryStructure.bat +++ b/FreeRTOS/Demo/CORTEX_M4_ATSAM4S_Atmel_Studio/CreateProjectDirectoryStructure.bat @@ -47,6 +47,7 @@ IF EXIST src\asf\thirdparty\FreeRTOS Goto END copy %COMMON_SOURCE%\countsem.c src\Common-Demo-Source copy %COMMON_SOURCE%\integer.c src\Common-Demo-Source copy %COMMON_SOURCE%\QueueSet.c src\Common-Demo-Source + COPY %COMMON_SOURCE%\IntQueue.c src\Common-Demo-Source REM Copy the common demo file headers. copy %COMMON_INCLUDE%\*.h src\Common-Demo-Source\include diff --git a/FreeRTOS/Demo/CORTEX_M4_ATSAM4S_Atmel_Studio/RTOSDemo.atsln b/FreeRTOS/Demo/CORTEX_M4_ATSAM4S_Atmel_Studio/RTOSDemo.atsln index cbafd976a..d6af61e52 100644 --- a/FreeRTOS/Demo/CORTEX_M4_ATSAM4S_Atmel_Studio/RTOSDemo.atsln +++ b/FreeRTOS/Demo/CORTEX_M4_ATSAM4S_Atmel_Studio/RTOSDemo.atsln @@ -6,10 +6,13 @@ EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|ARM = Debug|ARM + Release|ARM = Release|ARM EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {3D8959CD-73CA-4147-9C1B-CFCF2EE40326}.Debug|ARM.ActiveCfg = Debug|ARM {3D8959CD-73CA-4147-9C1B-CFCF2EE40326}.Debug|ARM.Build.0 = Debug|ARM + {3D8959CD-73CA-4147-9C1B-CFCF2EE40326}.Release|ARM.ActiveCfg = Release|ARM + {3D8959CD-73CA-4147-9C1B-CFCF2EE40326}.Release|ARM.Build.0 = Release|ARM EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/FreeRTOS/Demo/CORTEX_M4_ATSAM4S_Atmel_Studio/RTOSDemo.atsuo b/FreeRTOS/Demo/CORTEX_M4_ATSAM4S_Atmel_Studio/RTOSDemo.atsuo index 9e0627d8022f81611163c87eb35e3c8874d672c8..f2ad135f456c55a7dc55cee8c782c2c8d9e4734a 100644 GIT binary patch delta 6998 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 2.0 - 6.0 + 6.2 {3d8959cd-73ca-4147-9c1b-cfcf2ee40326} $(MSBuildProjectName) $(MSBuildProjectName) @@ -10,137 +10,146 @@ 2.11.1 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ATSAM4S16C sam4s C - com.Atmel.ARMGCC + com.Atmel.ARMGCC.C $(MSBuildProjectDirectory)\$(Configuration) $(MSBuildProjectName) @@ -149,18 +158,14 @@ Native true false - + exception_table 1 JTAG com.atmel.avrdbg.tool.samice com.atmel.avrdbg.tool.samice J-Link - 000158008149 - true - false - - + 158002654 127.0.0.1 1637 @@ -169,250 +174,249 @@ JTAG - 4000000 + 0 1000000 150000 false - false + true 0 0 0 0 + + + + + true + true + 0x20000000 + + 2 - - - __SAM4S16C__ - True - True - True - True - - - ARM_MATH_CM4=true - BOARD=SAM4S_EK - __SAM4S16C__ - - - - - ../src - ../src/asf/common/applications/user_application/sam4s16c_sam4s_ek - ../src/asf/common/boards - ../src/asf/common/services/gpio - ../src/asf/common/utils - ../src/asf/sam/boards - ../src/asf/sam/boards/sam4s_ek - ../src/asf/sam/drivers/pio - ../src/asf/sam/utils - ../src/asf/sam/utils/cmsis/sam4s/include - ../src/asf/sam/utils/cmsis/sam4s/source/templates - ../src/asf/sam/utils/header_files - ../src/asf/sam/utils/preprocessor - ../src/asf/thirdparty/CMSIS/Include - ../src/asf/thirdparty/CMSIS/Lib/GCC - ../src/config - C:\devtools\Atmel\Atmel Studio 6.0\extensions\Atmel\ARMGCC\3.3.1.83\ARMSupportFiles - C:\devtools\Atmel\Atmel Studio 6.0\extensions\Atmel\ARMGCC\3.3.1.83\ARMSupportFiles\CMSIS\Include - C:\devtools\Atmel\Atmel Studio 6.0\extensions\Atmel\ARMGCC\3.3.1.83\ARMSupportFiles\Device\ATMEL - C:\devtools\Atmel\Atmel Studio 6.0\extensions\Atmel\ARMGCC\3.3.1.83\ARMSupportFiles\Device\ATMEL\sam4s\include - ../src/asf/sam/drivers/pmc - ../src/asf/common/services/clock - ../src/asf/sam/drivers/usart - - - Optimize for size (-Os) - -fdata-sections - True - True - -pipe -Wall -Wstrict-prototypes -Wmissing-prototypes -Werror-implicit-function-declaration -Wpointer-arith -std=gnu99 -ffunction-sections -fdata-sections -Wchar-subscripts -Wcomment -Wformat=2 -Wimplicit-int -Wmain -Wparentheses -Wsequence-point -Wreturn-type -Wswitch -Wtrigraphs -Wunused -Wuninitialized -Wunknown-pragmas -Wfloat-equal -Wundef -Wshadow -Wbad-function-cast -Wwrite-strings -Wsign-compare -Waggregate-return -Wmissing-declarations -Wformat -Wmissing-format-attribute -Wno-deprecated-declarations -Wpacked -Wredundant-decls -Wnested-externs -Winline -Wlong-long -Wunreachable-code -Wcast-align --param max-inline-insns-single=500 -Dprintf=iprintf - - - - - - arm_cortexM4l_math - - - - - ../src/asf/thirdparty/CMSIS/Lib/GCC - - - True - -T../src/asf/sam/utils/linker_scripts/sam4s/sam4s16/gcc/flash.ld -Wl,--cref -Wl,--entry=Reset_Handler -mthumb - - - ../src - ../src/asf/common/applications/user_application/sam4s16c_sam4s_ek - ../src/asf/common/boards - ../src/asf/common/services/gpio - ../src/asf/common/utils - ../src/asf/sam/boards - ../src/asf/sam/boards/sam4s_ek - ../src/asf/sam/drivers/pio - ../src/asf/sam/utils - ../src/asf/sam/utils/cmsis/sam4s/include - ../src/asf/sam/utils/cmsis/sam4s/source/templates - ../src/asf/sam/utils/header_files - ../src/asf/sam/utils/preprocessor - ../src/asf/thirdparty/CMSIS/Include - ../src/asf/thirdparty/CMSIS/Lib/GCC - ../src/config - ../src/asf/sam/drivers/pmc - ../src/asf/common/services/clock - ../src/asf/sam/drivers/usart - - - -DARM_MATH_CM4=true -DBOARD=SAM4S_EK -D__SAM4S16C__ - - - ../src - ../src/asf/common/applications/user_application/sam4s16c_sam4s_ek - ../src/asf/common/boards - ../src/asf/common/services/gpio - ../src/asf/common/utils - ../src/asf/sam/boards - ../src/asf/sam/boards/sam4s_ek - ../src/asf/sam/drivers/pio - ../src/asf/sam/utils - ../src/asf/sam/utils/cmsis/sam4s/include - ../src/asf/sam/utils/cmsis/sam4s/source/templates - ../src/asf/sam/utils/header_files - ../src/asf/sam/utils/preprocessor - ../src/asf/thirdparty/CMSIS/Include - ../src/asf/thirdparty/CMSIS/Lib/GCC - ../src/config - ../src/asf/sam/drivers/pmc - ../src/asf/common/services/clock - ../src/asf/sam/drivers/usart - - - - True True True True - - - __SAM4S16C__ - True - True - True - True - - - ARM_MATH_CM4=true - BOARD=SAM4S_EK - __SAM4S16C__ - XMEGA=0 - MEGA=0 - UC3=0 - - - - - ../src - ../src/asf/common/applications/user_application/sam4s16c_sam4s_ek - ../src/asf/common/boards - ../src/asf/common/services/gpio - ../src/asf/common/utils - ../src/asf/sam/boards - ../src/asf/sam/boards/sam4s_ek - ../src/asf/sam/drivers/pio - ../src/asf/sam/utils - ../src/asf/sam/utils/cmsis/sam4s/include - ../src/asf/sam/utils/cmsis/sam4s/source/templates - ../src/asf/sam/utils/header_files - ../src/asf/sam/utils/preprocessor - ../src/asf/thirdparty/CMSIS/Include - ../src/asf/thirdparty/CMSIS/Lib/GCC - ../src/config - ../src/asf/thirdparty/FreeRTOS/include - ../src/asf/thirdparty/FreeRTOS/portable/GCC/ARM_CM3 - ../src/Common-Demo-Source/include - C:\devtools\Atmel\Atmel Studio 6.0\extensions\Atmel\ARMGCC\3.3.1.83\ARMSupportFiles - C:\devtools\Atmel\Atmel Studio 6.0\extensions\Atmel\ARMGCC\3.3.1.83\ARMSupportFiles\CMSIS\Include - C:\devtools\Atmel\Atmel Studio 6.0\extensions\Atmel\ARMGCC\3.3.1.83\ARMSupportFiles\Device\ATMEL - C:\devtools\Atmel\Atmel Studio 6.0\extensions\Atmel\ARMGCC\3.3.1.83\ARMSupportFiles\Device\ATMEL\sam4s\include - ../src/asf/sam/drivers/pmc - ../src/asf/common/services/clock - ../src/asf/sam/drivers/usart - - - -fdata-sections - True - Maximum (-g3) - True - -pipe -Wall -Wextra -std=gnu99 -ffunction-sections -fdata-sections --param max-inline-insns-single=500 -Dprintf=iprintf - - - ../src/asf/thirdparty/CMSIS/Lib/GCC - - - True - -T../src/asf/sam/utils/linker_scripts/sam4s/sam4s16/gcc/flash.ld -Wl,--cref -Wl,--entry=Reset_Handler -mthumb - - - ../src - ../src/asf/common/applications/user_application/sam4s16c_sam4s_ek - ../src/asf/common/boards - ../src/asf/common/services/gpio - ../src/asf/common/utils - ../src/asf/sam/boards - ../src/asf/sam/boards/sam4s_ek - ../src/asf/sam/drivers/pio - ../src/asf/sam/utils - ../src/asf/sam/utils/cmsis/sam4s/include - ../src/asf/sam/utils/cmsis/sam4s/source/templates - ../src/asf/sam/utils/header_files - ../src/asf/sam/utils/preprocessor - ../src/asf/thirdparty/CMSIS/Include - ../src/asf/thirdparty/CMSIS/Lib/GCC - ../src/config - ../src/asf/sam/drivers/pmc - ../src/asf/common/services/clock - ../src/asf/sam/drivers/usart - - - -DARM_MATH_CM4=true -DBOARD=SAM4S_EK -D__SAM4S16C__ - - - ../src - ../src/asf/common/applications/user_application/sam4s16c_sam4s_ek - ../src/asf/common/boards - ../src/asf/common/services/gpio - ../src/asf/common/utils - ../src/asf/sam/boards - ../src/asf/sam/boards/sam4s_ek - ../src/asf/sam/drivers/pio - ../src/asf/sam/utils - ../src/asf/sam/utils/cmsis/sam4s/include - ../src/asf/sam/utils/cmsis/sam4s/source/templates - ../src/asf/sam/utils/header_files - ../src/asf/sam/utils/preprocessor - ../src/asf/thirdparty/CMSIS/Include - ../src/asf/thirdparty/CMSIS/Lib/GCC - ../src/config - ../src/asf/sam/drivers/pmc - ../src/asf/common/services/clock - ../src/asf/sam/drivers/usart - - - + True + True + True + True + True + + + ARM_MATH_CM4=true + BOARD=SAM4S_EK + __SAM4S16C__ + + + + + ../src + ../src/asf/common/applications/user_application/sam4s16c_sam4s_ek + ../src/asf/common/boards + ../src/asf/common/services/gpio + ../src/asf/common/utils + ../src/asf/sam/boards + ../src/asf/sam/boards/sam4s_ek + ../src/asf/sam/drivers/pio + ../src/asf/sam/utils + ../src/asf/sam/utils/cmsis/sam4s/include + ../src/asf/sam/utils/cmsis/sam4s/source/templates + ../src/asf/sam/utils/header_files + ../src/asf/sam/utils/preprocessor + ../src/asf/thirdparty/CMSIS/Include + ../src/asf/thirdparty/CMSIS/Lib/GCC + ../src/config + C:\devtools\Atmel\Atmel Studio 6.0\extensions\Atmel\ARMGCC\3.3.1.83\ARMSupportFiles + C:\devtools\Atmel\Atmel Studio 6.0\extensions\Atmel\ARMGCC\3.3.1.83\ARMSupportFiles\CMSIS\Include + C:\devtools\Atmel\Atmel Studio 6.0\extensions\Atmel\ARMGCC\3.3.1.83\ARMSupportFiles\Device\ATMEL + C:\devtools\Atmel\Atmel Studio 6.0\extensions\Atmel\ARMGCC\3.3.1.83\ARMSupportFiles\Device\ATMEL\sam4s\include + ../src/asf/sam/drivers/pmc + ../src/asf/common/services/clock + ../src/asf/sam/drivers/usart + %24(ToolchainDir)\..\..\CMSIS_Atmel\Device\ATMEL\sam4s\include + %24(ToolchainDir)\..\..\CMSIS_Atmel + %24(ToolchainDir)\..\..\CMSIS_Atmel\CMSIS\Include + %24(ToolchainDir)\..\..\CMSIS_Atmel\Device\ATMEL + ../src/ASF/sam/drivers/tc + + + Optimize for size (-Os) + -fdata-sections + True + True + -pipe -Wall -Wstrict-prototypes -Wmissing-prototypes -Werror-implicit-function-declaration -Wpointer-arith -std=gnu99 -ffunction-sections -fdata-sections -Wchar-subscripts -Wcomment -Wformat=2 -Wimplicit-int -Wmain -Wparentheses -Wsequence-point -Wreturn-type -Wswitch -Wtrigraphs -Wunused -Wuninitialized -Wunknown-pragmas -Wfloat-equal -Wundef -Wshadow -Wbad-function-cast -Wwrite-strings -Wsign-compare -Waggregate-return -Wmissing-declarations -Wformat -Wmissing-format-attribute -Wno-deprecated-declarations -Wpacked -Wredundant-decls -Wnested-externs -Winline -Wlong-long -Wunreachable-code -Wcast-align --param max-inline-insns-single=500 -Dprintf=iprintf + + + + + + arm_cortexM4l_math + + + + + ../src/asf/thirdparty/CMSIS/Lib/GCC + + + True + -T../src/asf/sam/utils/linker_scripts/sam4s/sam4s16/gcc/flash.ld -Wl,--cref -Wl,--entry=Reset_Handler -mthumb + + + ../src/ASF/sam/drivers/tc + + + -DARM_MATH_CM4=true -DBOARD=SAM4S_EK -D__SAM4S16C__ + + + ../src + ../src/asf/common/applications/user_application/sam4s16c_sam4s_ek + ../src/asf/common/boards + ../src/asf/common/services/gpio + ../src/asf/common/utils + ../src/asf/sam/boards + ../src/asf/sam/boards/sam4s_ek + ../src/asf/sam/drivers/pio + ../src/asf/sam/utils + ../src/asf/sam/utils/cmsis/sam4s/include + ../src/asf/sam/utils/cmsis/sam4s/source/templates + ../src/asf/sam/utils/header_files + ../src/asf/sam/utils/preprocessor + ../src/asf/thirdparty/CMSIS/Include + ../src/asf/thirdparty/CMSIS/Lib/GCC + ../src/config + ../src/asf/sam/drivers/pmc + ../src/asf/common/services/clock + ../src/asf/sam/drivers/usart + %24(ToolchainDir)\..\..\CMSIS_Atmel\Device\ATMEL\sam4s\include + %24(ToolchainDir)\..\..\CMSIS_Atmel + %24(ToolchainDir)\..\..\CMSIS_Atmel\CMSIS\Include + %24(ToolchainDir)\..\..\CMSIS_Atmel\Device\ATMEL + ../src/ASF/sam/drivers/tc + + + + + True True True True + + + True + True + True + True + True + + + ARM_MATH_CM4=true + BOARD=SAM4S_EK + __SAM4S16C__ + XMEGA=0 + MEGA=0 + UC3=0 + + + + + ../src + ../src/asf/common/applications/user_application/sam4s16c_sam4s_ek + ../src/asf/common/boards + ../src/asf/common/services/gpio + ../src/asf/common/utils + ../src/asf/sam/boards + ../src/asf/sam/boards/sam4s_ek + ../src/asf/sam/drivers/pio + ../src/asf/sam/utils + ../src/asf/sam/utils/cmsis/sam4s/include + ../src/asf/sam/utils/cmsis/sam4s/source/templates + ../src/asf/sam/utils/header_files + ../src/asf/sam/utils/preprocessor + ../src/asf/thirdparty/CMSIS/Include + ../src/asf/thirdparty/CMSIS/Lib/GCC + ../src/config + ../src/asf/thirdparty/FreeRTOS/include + ../src/asf/thirdparty/FreeRTOS/portable/GCC/ARM_CM3 + ../src/Common-Demo-Source/include + C:\devtools\Atmel\Atmel Studio 6.0\extensions\Atmel\ARMGCC\3.3.1.83\ARMSupportFiles + C:\devtools\Atmel\Atmel Studio 6.0\extensions\Atmel\ARMGCC\3.3.1.83\ARMSupportFiles\CMSIS\Include + C:\devtools\Atmel\Atmel Studio 6.0\extensions\Atmel\ARMGCC\3.3.1.83\ARMSupportFiles\Device\ATMEL + C:\devtools\Atmel\Atmel Studio 6.0\extensions\Atmel\ARMGCC\3.3.1.83\ARMSupportFiles\Device\ATMEL\sam4s\include + ../src/asf/sam/drivers/pmc + ../src/asf/common/services/clock + ../src/asf/sam/drivers/usart + %24(ToolchainDir)\..\..\CMSIS_Atmel\Device\ATMEL\sam4s\include + %24(ToolchainDir)\..\..\CMSIS_Atmel + %24(ToolchainDir)\..\..\CMSIS_Atmel\CMSIS\Include + %24(ToolchainDir)\..\..\CMSIS_Atmel\Device\ATMEL + ../src/ASF/sam/drivers/tc + + + -fdata-sections + True + Maximum (-g3) + True + -pipe -Wall -Wextra -std=gnu99 -ffunction-sections -fdata-sections --param max-inline-insns-single=500 -Dprintf=iprintf + + + ../src/asf/thirdparty/CMSIS/Lib/GCC + + + True + -T../src/asf/sam/utils/linker_scripts/sam4s/sam4s16/gcc/flash.ld -Wl,--cref -Wl,--entry=Reset_Handler -mthumb + + + ../src/ASF/sam/drivers/tc + + + -DARM_MATH_CM4=true -DBOARD=SAM4S_EK -D__SAM4S16C__ + + + ../src + ../src/asf/common/applications/user_application/sam4s16c_sam4s_ek + ../src/asf/common/boards + ../src/asf/common/services/gpio + ../src/asf/common/utils + ../src/asf/sam/boards + ../src/asf/sam/boards/sam4s_ek + ../src/asf/sam/drivers/pio + ../src/asf/sam/utils + ../src/asf/sam/utils/cmsis/sam4s/include + ../src/asf/sam/utils/cmsis/sam4s/source/templates + ../src/asf/sam/utils/header_files + ../src/asf/sam/utils/preprocessor + ../src/asf/thirdparty/CMSIS/Include + ../src/asf/thirdparty/CMSIS/Lib/GCC + ../src/config + ../src/asf/sam/drivers/pmc + ../src/asf/common/services/clock + ../src/asf/sam/drivers/usart + %24(ToolchainDir)\..\..\CMSIS_Atmel\Device\ATMEL\sam4s\include + %24(ToolchainDir)\..\..\CMSIS_Atmel + %24(ToolchainDir)\..\..\CMSIS_Atmel\CMSIS\Include + %24(ToolchainDir)\..\..\CMSIS_Atmel\Device\ATMEL + ../src/ASF/sam/drivers/tc + + + + + + compile + + + compile + compile @@ -425,9 +429,15 @@ compile + + compile + compile + + compile + compile @@ -893,9 +903,6 @@ compile - - compile - compile @@ -924,6 +931,7 @@ + diff --git a/FreeRTOS/Demo/CORTEX_M4_ATSAM4S_Atmel_Studio/src/FreeRTOSConfig.h b/FreeRTOS/Demo/CORTEX_M4_ATSAM4S_Atmel_Studio/src/FreeRTOSConfig.h index 459baffa8..57383f686 100644 --- a/FreeRTOS/Demo/CORTEX_M4_ATSAM4S_Atmel_Studio/src/FreeRTOSConfig.h +++ b/FreeRTOS/Demo/CORTEX_M4_ATSAM4S_Atmel_Studio/src/FreeRTOSConfig.h @@ -131,6 +131,7 @@ to exclude the API function. */ #define INCLUDE_vTaskSuspend 1 #define INCLUDE_vTaskDelayUntil 1 #define INCLUDE_vTaskDelay 1 +#define INCLUDE_eTaskGetState 1 /* Cortex-M specific definitions. */ #ifdef __NVIC_PRIO_BITS diff --git a/FreeRTOS/Demo/CORTEX_M4_ATSAM4S_Atmel_Studio/src/IntQueueTimer.c b/FreeRTOS/Demo/CORTEX_M4_ATSAM4S_Atmel_Studio/src/IntQueueTimer.c new file mode 100644 index 000000000..b3534fdf3 --- /dev/null +++ b/FreeRTOS/Demo/CORTEX_M4_ATSAM4S_Atmel_Studio/src/IntQueueTimer.c @@ -0,0 +1,198 @@ +/* + FreeRTOS V8.1.1 - Copyright (C) 2014 Real Time Engineers Ltd. + All rights reserved + + VISIT http://www.FreeRTOS.org TO ENSURE YOU ARE USING THE LATEST VERSION. + + *************************************************************************** + * * + * FreeRTOS provides completely free yet professionally developed, * + * robust, strictly quality controlled, supported, and cross * + * platform software that has become a de facto standard. * + * * + * Help yourself get started quickly and support the FreeRTOS * + * project by purchasing a FreeRTOS tutorial book, reference * + * manual, or both from: http://www.FreeRTOS.org/Documentation * + * * + * Thank you! * + * * + *************************************************************************** + + This file is part of the FreeRTOS distribution. + + FreeRTOS is free software; you can redistribute it and/or modify it under + the terms of the GNU General Public License (version 2) as published by the + Free Software Foundation >>!AND MODIFIED BY!<< the FreeRTOS exception. + + >>! NOTE: The modification to the GPL is included to allow you to !<< + >>! distribute a combined work that includes FreeRTOS without being !<< + >>! obliged to provide the source code for proprietary components !<< + >>! outside of the FreeRTOS kernel. !<< + + FreeRTOS is distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS + FOR A PARTICULAR PURPOSE. Full license text is available from the following + link: http://www.freertos.org/a00114.html + + 1 tab == 4 spaces! + + *************************************************************************** + * * + * Having a problem? Start by reading the FAQ "My application does * + * not run, what could be wrong?" * + * * + * http://www.FreeRTOS.org/FAQHelp.html * + * * + *************************************************************************** + + http://www.FreeRTOS.org - Documentation, books, training, latest versions, + license and Real Time Engineers Ltd. contact details. + + http://www.FreeRTOS.org/plus - A selection of FreeRTOS ecosystem products, + including FreeRTOS+Trace - an indispensable productivity tool, a DOS + compatible FAT file system, and our tiny thread aware UDP/IP stack. + + http://www.OpenRTOS.com - Real Time Engineers ltd license FreeRTOS to High + Integrity Systems to sell under the OpenRTOS brand. Low cost OpenRTOS + licenses offer ticketed support, indemnification and middleware. + + http://www.SafeRTOS.com - High Integrity Systems also provide a safety + engineered and independently SIL3 certified version for use in safety and + mission critical applications that require provable dependability. + + 1 tab == 4 spaces! +*/ + +/* + * Provides the two timers sources for the standard demo IntQueue test. Also + * includes a high frequency timer to maximise the interrupt nesting achieved. + */ + +/* Standard includes. */ +#include + +/* Scheduler includes. */ +#include "FreeRTOS.h" +#include "task.h" + +/* Demo includes. */ +#include "IntQueueTimer.h" +#include "IntQueue.h" + +/* System includes. */ +#include "board.h" +#include "asf.h" + +/* The frequencies at which the first two timers expire are slightly offset to +ensure they don't remain synchronised. The frequency of the highest priority +interrupt is 20 times faster so really hammers the interrupt entry and exit +code. */ +#define tmrTIMER_0_FREQUENCY ( 2000UL ) +#define tmrTIMER_1_FREQUENCY ( 1003UL ) +#define tmrTIMER_2_FREQUENCY ( 20000UL ) + +/* Priorities used by the timer interrupts - these are set differently to make +nesting likely/common. The high frequency timer operates above the max +system call interrupt priority, but does not use the RTOS API. */ +#define tmrTIMER_0_PRIORITY ( configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY ) +#define tmrTIMER_1_PRIORITY ( configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY + 1 ) +#define tmrTIMER_2_PRIORITY ( configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY - 1 ) + +/* The channels used within the TC0 timer. */ +#define tmrTIMER_0_CHANNEL ( 0 ) +#define tmrTIMER_1_CHANNEL ( 1 ) +#define tmrTIMER_2_CHANNEL ( 2 ) + +/* TC register bit specifics. */ +#define tmrTRIGGER_ON_RC ( 1UL << 4UL ) +#define trmDIVIDER ( 128 ) + +/*-----------------------------------------------------------*/ + +/* Handers for the timer interrupts. */ +void TC0_Handler( void ); +void TC1_Handler( void ); +void TC2_Handler( void ); + +/*-----------------------------------------------------------*/ + +/* Incremented by the high frequency timer, which operates above the max +syscall interrupt priority. This is just for inspection. */ +volatile uint32_t ulHighFrequencyTimerInterrupts = 0; + +/*-----------------------------------------------------------*/ + +void vInitialiseTimerForIntQueueTest( void ) +{ +uint32_t ulInputFrequency; + + /* Calculate the frequency of the clock that feeds the TC. */ + ulInputFrequency = configCPU_CLOCK_HZ; + ulInputFrequency /= trmDIVIDER; + + /* Three channels are used - two that run at or under + configMAX_SYSCALL_INTERRUPT_PRIORITY, and one that runs over + configMAX_SYSCALL_INTERRUPT_PRIORITY. */ + sysclk_enable_peripheral_clock( ID_TC0 ); + sysclk_enable_peripheral_clock( ID_TC1 ); + sysclk_enable_peripheral_clock( ID_TC2 ); + + /* Init TC channels to waveform mode - up mode clean on RC match. */ + tc_init( TC0, tmrTIMER_0_CHANNEL, TC_CMR_TCCLKS_TIMER_CLOCK4 | TC_CMR_WAVE | TC_CMR_ACPC_CLEAR | TC_CMR_CPCTRG ); + tc_init( TC0, tmrTIMER_1_CHANNEL, TC_CMR_TCCLKS_TIMER_CLOCK4 | TC_CMR_WAVE | TC_CMR_ACPC_CLEAR | TC_CMR_CPCTRG ); + tc_init( TC0, tmrTIMER_2_CHANNEL, TC_CMR_TCCLKS_TIMER_CLOCK4 | TC_CMR_WAVE | TC_CMR_ACPC_CLEAR | TC_CMR_CPCTRG ); + + tc_enable_interrupt( TC0, tmrTIMER_0_CHANNEL, tmrTRIGGER_ON_RC ); + tc_enable_interrupt( TC0, tmrTIMER_1_CHANNEL, tmrTRIGGER_ON_RC ); + tc_enable_interrupt( TC0, tmrTIMER_2_CHANNEL, tmrTRIGGER_ON_RC ); + + tc_write_rc( TC0, tmrTIMER_0_CHANNEL, ( ulInputFrequency / tmrTIMER_0_FREQUENCY ) ); + tc_write_rc( TC0, tmrTIMER_1_CHANNEL, ( ulInputFrequency / tmrTIMER_1_FREQUENCY ) ); + tc_write_rc( TC0, tmrTIMER_2_CHANNEL, ( ulInputFrequency / tmrTIMER_2_FREQUENCY ) ); + + NVIC_SetPriority( TC0_IRQn, tmrTIMER_0_PRIORITY ); + NVIC_SetPriority( TC1_IRQn, tmrTIMER_1_PRIORITY ); + NVIC_SetPriority( TC2_IRQn, tmrTIMER_2_PRIORITY ); + + NVIC_EnableIRQ( TC0_IRQn ); + NVIC_EnableIRQ( TC1_IRQn ); + NVIC_EnableIRQ( TC2_IRQn ); + + tc_start( TC0, tmrTIMER_0_CHANNEL ); + tc_start( TC0, tmrTIMER_1_CHANNEL ); + tc_start( TC0, tmrTIMER_2_CHANNEL ); +} +/*-----------------------------------------------------------*/ + +void TC0_Handler( void ) +{ + /* Handler for the first timer in the IntQueue test. Was the interrupt + caused by a compare on RC? */ + if( ( tc_get_status( TC0, tmrTIMER_0_CHANNEL ) & ~TC_SR_CPCS ) != 0 ) + { + portYIELD_FROM_ISR( xFirstTimerHandler() ); + } +} +/*-----------------------------------------------------------*/ + +void TC1_Handler( void ) +{ + /* Handler for the second timer in the IntQueue test. Was the interrupt + caused by a compare on RC? */ + if( ( tc_get_status( TC0, tmrTIMER_1_CHANNEL ) & ~TC_SR_CPCS ) != 0 ) + { + portYIELD_FROM_ISR( xSecondTimerHandler() ); + } +} +/*-----------------------------------------------------------*/ + +void TC2_Handler( void ) +{ + /* Handler for the high frequency timer that does nothing but increment a + variable to give an indication that it is running. Was the interrupt caused + by a compare on RC? */ + if( ( tc_get_status( TC0, tmrTIMER_2_CHANNEL ) & ~TC_SR_CPCS ) != 0 ) + { + ulHighFrequencyTimerInterrupts++; + } +} diff --git a/FreeRTOS/Demo/CORTEX_M4_ATSAM4S_Atmel_Studio/src/IntQueueTimer.h b/FreeRTOS/Demo/CORTEX_M4_ATSAM4S_Atmel_Studio/src/IntQueueTimer.h new file mode 100644 index 000000000..df2b8228b --- /dev/null +++ b/FreeRTOS/Demo/CORTEX_M4_ATSAM4S_Atmel_Studio/src/IntQueueTimer.h @@ -0,0 +1,74 @@ +/* + FreeRTOS V8.1.1 - Copyright (C) 2014 Real Time Engineers Ltd. + All rights reserved + + VISIT http://www.FreeRTOS.org TO ENSURE YOU ARE USING THE LATEST VERSION. + + *************************************************************************** + * * + * FreeRTOS provides completely free yet professionally developed, * + * robust, strictly quality controlled, supported, and cross * + * platform software that has become a de facto standard. * + * * + * Help yourself get started quickly and support the FreeRTOS * + * project by purchasing a FreeRTOS tutorial book, reference * + * manual, or both from: http://www.FreeRTOS.org/Documentation * + * * + * Thank you! * + * * + *************************************************************************** + + This file is part of the FreeRTOS distribution. + + FreeRTOS is free software; you can redistribute it and/or modify it under + the terms of the GNU General Public License (version 2) as published by the + Free Software Foundation >>!AND MODIFIED BY!<< the FreeRTOS exception. + + >>! NOTE: The modification to the GPL is included to allow you to !<< + >>! distribute a combined work that includes FreeRTOS without being !<< + >>! obliged to provide the source code for proprietary components !<< + >>! outside of the FreeRTOS kernel. !<< + + FreeRTOS is distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS + FOR A PARTICULAR PURPOSE. Full license text is available from the following + link: http://www.freertos.org/a00114.html + + 1 tab == 4 spaces! + + *************************************************************************** + * * + * Having a problem? Start by reading the FAQ "My application does * + * not run, what could be wrong?" * + * * + * http://www.FreeRTOS.org/FAQHelp.html * + * * + *************************************************************************** + + http://www.FreeRTOS.org - Documentation, books, training, latest versions, + license and Real Time Engineers Ltd. contact details. + + http://www.FreeRTOS.org/plus - A selection of FreeRTOS ecosystem products, + including FreeRTOS+Trace - an indispensable productivity tool, a DOS + compatible FAT file system, and our tiny thread aware UDP/IP stack. + + http://www.OpenRTOS.com - Real Time Engineers ltd license FreeRTOS to High + Integrity Systems to sell under the OpenRTOS brand. Low cost OpenRTOS + licenses offer ticketed support, indemnification and middleware. + + http://www.SafeRTOS.com - High Integrity Systems also provide a safety + engineered and independently SIL3 certified version for use in safety and + mission critical applications that require provable dependability. + + 1 tab == 4 spaces! +*/ + +#ifndef INT_QUEUE_TIMER_H +#define INT_QUEUE_TIMER_H + +void vInitialiseTimerForIntQueueTest( void ); +BaseType_t xTimer0Handler( void ); +BaseType_t xTimer1Handler( void ); + +#endif + diff --git a/FreeRTOS/Demo/CORTEX_M4_ATSAM4S_Atmel_Studio/src/asf.h b/FreeRTOS/Demo/CORTEX_M4_ATSAM4S_Atmel_Studio/src/asf.h index 3021332fa..902796e2c 100644 --- a/FreeRTOS/Demo/CORTEX_M4_ATSAM4S_Atmel_Studio/src/asf.h +++ b/FreeRTOS/Demo/CORTEX_M4_ATSAM4S_Atmel_Studio/src/asf.h @@ -1,54 +1,56 @@ -/** - * \file - * - * \brief Autogenerated API include file for the Atmel Software Framework (ASF) - * - * Copyright (c) 2012 Atmel Corporation. All rights reserved. - * - * \asf_license_start - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * - * 3. The name of Atmel may not be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * 4. This software may only be redistributed and used in connection with an - * Atmel microcontroller product. - * - * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE - * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR - * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, - * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - * \asf_license_stop - * - */ - -#ifndef ASF_H -#define ASF_H - -/* - * This file includes all API header files for the selected drivers from ASF. - * Note: There might be duplicate includes required by more than one driver. - * - * The file is automatically generated and will be re-written when - * running the ASF driver selector tool. Any changes will be discarded. - */ +/** + * \file + * + * \brief Autogenerated API include file for the Atmel Software Framework (ASF) + * + * Copyright (c) 2012 Atmel Corporation. All rights reserved. + * + * \asf_license_start + * + * \page License + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an + * Atmel microcontroller product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + * \asf_license_stop + * + */ + +#ifndef ASF_H +#define ASF_H + +/* + * This file includes all API header files for the selected drivers from ASF. + * Note: There might be duplicate includes required by more than one driver. + * + * The file is automatically generated and will be re-written when + * running the ASF driver selector tool. Any changes will be discarded. + */ // From module: Common SAM compiler driver #include @@ -60,21 +62,32 @@ // From module: Generic board support #include -// From module: Interrupt management - SAM3 implementation +// From module: Interrupt management - SAM implementation #include // From module: PIO - Parallel Input/Output Controller #include -#include // From module: PMC - Power Management Controller #include #include +// From module: Part identification macros +#include + +// From module: SAM4S startup code +#include + // From module: System Clock Control - SAM4S implementation #include +// From module: TC - Timer Counter +#include + // From module: USART - Univ. Syn Async Rec/Trans #include - -#endif // ASF_H + +// From module: pio_handler support enabled +#include + +#endif // ASF_H diff --git a/FreeRTOS/Demo/CORTEX_M4_ATSAM4S_Atmel_Studio/src/asf/sam/drivers/tc/tc.c b/FreeRTOS/Demo/CORTEX_M4_ATSAM4S_Atmel_Studio/src/asf/sam/drivers/tc/tc.c new file mode 100644 index 000000000..d2bf3aeed --- /dev/null +++ b/FreeRTOS/Demo/CORTEX_M4_ATSAM4S_Atmel_Studio/src/asf/sam/drivers/tc/tc.c @@ -0,0 +1,580 @@ +/** + * \file + * + * \brief Timer Counter (TC) driver for SAM. + * + * Copyright (c) 2011-2012 Atmel Corporation. All rights reserved. + * + * \asf_license_start + * + * \page License + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an + * Atmel microcontroller product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + * \asf_license_stop + * + */ + +#include +#include "tc.h" + +/// @cond 0 +/**INDENT-OFF**/ +#ifdef __cplusplus +extern "C" { +#endif +/**INDENT-ON**/ +/// @endcond + +#define TC_WPMR_WPKEY_VALUE TC_WPMR_WPKEY((uint32_t)0x54494D) + +/** + * \defgroup sam_drivers_tc_group Timer Counter (TC) + * + * The Timer Counter (TC) includes three identical 32-bit Timer Counter + * channels. Each channel can be independently programmed to perform a wide + * range of functions including frequency measurement, event counting, + * interval measurement, pulse generation, delay timing and pulse width + * modulation. + * + * @{ + */ + +/** + * \brief Configure TC for timer, waveform generation or capture. + * + * \param p_tc Pointer to a TC instance. + * \param ul_channel Channel to configure. + * \param ul_mode Control mode register value to set. + * + * \attention If the TC is configured for waveform generation, the external + * event selection (EEVT) should only be set to \c TC_CMR_EEVT_TIOB or the + * equivalent value \c 0 if it really is the intention to use TIOB as an + * external event trigger.\n + * This is because the setting forces TIOB to be an input even if the + * external event trigger has not been enabled with \c TC_CMR_ENETRG, and + * thus prevents normal operation of TIOB. + */ +void tc_init(Tc *p_tc, uint32_t ul_channel, uint32_t ul_mode) +{ + TcChannel *tc_channel; + + Assert(ul_channel < + (sizeof(p_tc->TC_CHANNEL) / sizeof(p_tc->TC_CHANNEL[0]))); + tc_channel = p_tc->TC_CHANNEL + ul_channel; + + /* Disable TC clock. */ + tc_channel->TC_CCR = TC_CCR_CLKDIS; + + /* Disable interrupts. */ + tc_channel->TC_IDR = 0xFFFFFFFF; + + /* Clear status register. */ + tc_channel->TC_SR; + + /* Set mode. */ + tc_channel->TC_CMR = ul_mode; +} + +/** + * \brief Asserts a SYNC signal to generate a software trigger to + * all channels. + * + * \param p_tc Pointer to a TC instance. + * + */ +void tc_sync_trigger(Tc *p_tc) +{ + p_tc->TC_BCR = TC_BCR_SYNC; +} + +/** + * \brief Configure TC Block mode. + * \note tc_init() must be called first. + * + * \param p_tc Pointer to a TC instance. + * \param ul_blockmode Block mode register value to set. + * + */ +void tc_set_block_mode(Tc *p_tc, uint32_t ul_blockmode) +{ + p_tc->TC_BMR = ul_blockmode; +} + +#if (!SAM3U) + +/** + * \brief Configure TC for 2-bit Gray Counter for Stepper Motor. + * \note tc_init() must be called first. + * + * \param p_tc Pointer to a TC instance. + * \param ul_channel Channel to configure. + * \param ul_steppermode Stepper motor mode register value to set. + * + * \return 0 for OK. + */ +uint32_t tc_init_2bit_gray(Tc *p_tc, uint32_t ul_channel, + uint32_t ul_steppermode) +{ + Assert(ul_channel < + (sizeof(p_tc->TC_CHANNEL) / sizeof(p_tc->TC_CHANNEL[0]))); + + p_tc->TC_CHANNEL[ul_channel].TC_SMMR = ul_steppermode; + return 0; +} + +#endif + +/** + * \brief Start TC clock counter on the selected channel. + * + * \param p_tc Pointer to a TC instance. + * \param ul_channel Channel to configure. + */ +void tc_start(Tc *p_tc, uint32_t ul_channel) +{ + Assert(ul_channel < + (sizeof(p_tc->TC_CHANNEL) / sizeof(p_tc->TC_CHANNEL[0]))); + + p_tc->TC_CHANNEL[ul_channel].TC_CCR = TC_CCR_CLKEN | TC_CCR_SWTRG; +} + +/** + * \brief Stop TC clock counter on the selected channel. + * + * \param p_tc Pointer to a TC instance. + * \param ul_channel Channel to configure. + */ +void tc_stop(Tc *p_tc, uint32_t ul_channel) +{ + Assert(ul_channel < + (sizeof(p_tc->TC_CHANNEL) / sizeof(p_tc->TC_CHANNEL[0]))); + + p_tc->TC_CHANNEL[ul_channel].TC_CCR = TC_CCR_CLKDIS; +} + +/** + * \brief Read RA TC counter on the selected channel. + * + * \param p_tc Pointer to a TC instance. + * \param ul_channel Channel to configure. + * + * \return RA value. + */ +int tc_read_ra(Tc *p_tc, uint32_t ul_channel) +{ + Assert(ul_channel < + (sizeof(p_tc->TC_CHANNEL) / sizeof(p_tc->TC_CHANNEL[0]))); + + return p_tc->TC_CHANNEL[ul_channel].TC_RA; +} + +/** + * \brief Read RB TC counter on the selected channel. + * + * \param p_tc Pointer to a TC instance. + * \param ul_channel Channel to configure. + * + * \return RB value. + */ +int tc_read_rb(Tc *p_tc, uint32_t ul_channel) +{ + Assert(ul_channel < + (sizeof(p_tc->TC_CHANNEL) / sizeof(p_tc->TC_CHANNEL[0]))); + + return p_tc->TC_CHANNEL[ul_channel].TC_RB; +} + +/** + * \brief Read RC TC counter on the selected channel. + * + * \param p_tc Pointer to a TC instance. + * \param ul_channel Channel to configure. + * + * \return RC value. + */ +int tc_read_rc(Tc *p_tc, uint32_t ul_channel) +{ + Assert(ul_channel < + (sizeof(p_tc->TC_CHANNEL) / sizeof(p_tc->TC_CHANNEL[0]))); + + return p_tc->TC_CHANNEL[ul_channel].TC_RC; +} + +/** + * \brief Write RA TC counter on the selected channel. + * + * \param p_tc Pointer to a TC instance. + * \param ul_channel Channel to configure. + * \param ul_value Value to set in register. + */ +void tc_write_ra(Tc *p_tc, uint32_t ul_channel, + uint32_t ul_value) +{ + Assert(ul_channel < + (sizeof(p_tc->TC_CHANNEL) / sizeof(p_tc->TC_CHANNEL[0]))); + + p_tc->TC_CHANNEL[ul_channel].TC_RA = ul_value; +} + +/** + * \brief Write RB TC counter on the selected channel. + * + * \param p_tc Pointer to a TC instance. + * \param ul_channel Channel to configure. + * \param ul_value Value to set in register. + */ +void tc_write_rb(Tc *p_tc, uint32_t ul_channel, + uint32_t ul_value) +{ + Assert(ul_channel < + (sizeof(p_tc->TC_CHANNEL) / sizeof(p_tc->TC_CHANNEL[0]))); + + p_tc->TC_CHANNEL[ul_channel].TC_RB = ul_value; +} + +/** + * \brief Write RC TC counter on the selected channel. + * + * \param p_tc Pointer to a TC instance. + * \param ul_channel Channel to configure. + * \param ul_value Value to set in register. + */ +void tc_write_rc(Tc *p_tc, uint32_t ul_channel, + uint32_t ul_value) +{ + Assert(ul_channel < + (sizeof(p_tc->TC_CHANNEL) / sizeof(p_tc->TC_CHANNEL[0]))); + + p_tc->TC_CHANNEL[ul_channel].TC_RC = ul_value; +} + +/** + * \brief Enable TC interrupts on the selected channel. + * + * \param p_tc Pointer to a TC instance. + * \param ul_channel Channel to configure. + * \param ul_sources Interrupt sources bit map. + */ +void tc_enable_interrupt(Tc *p_tc, uint32_t ul_channel, + uint32_t ul_sources) +{ + TcChannel *tc_channel; + + Assert(ul_channel < + (sizeof(p_tc->TC_CHANNEL) / sizeof(p_tc->TC_CHANNEL[0]))); + tc_channel = p_tc->TC_CHANNEL + ul_channel; + tc_channel->TC_IER = ul_sources; +} + +/** + * \brief Disable TC interrupts on the selected channel. + * + * \param p_tc Pointer to a TC instance. + * \param ul_channel Channel to configure. + * \param ul_sources Interrupt sources bit map. + */ +void tc_disable_interrupt(Tc *p_tc, uint32_t ul_channel, + uint32_t ul_sources) +{ + TcChannel *tc_channel; + + Assert(ul_channel < + (sizeof(p_tc->TC_CHANNEL) / sizeof(p_tc->TC_CHANNEL[0]))); + tc_channel = p_tc->TC_CHANNEL + ul_channel; + tc_channel->TC_IDR = ul_sources; +} + +/** + * \brief Read TC interrupt mask on the selected channel. + * + * \param p_tc Pointer to a TC instance. + * \param ul_channel Channel to configure. + * + * \return The interrupt mask value. + */ +uint32_t tc_get_interrupt_mask(Tc *p_tc, uint32_t ul_channel) +{ + TcChannel *tc_channel; + + Assert(ul_channel < + (sizeof(p_tc->TC_CHANNEL) / sizeof(p_tc->TC_CHANNEL[0]))); + tc_channel = p_tc->TC_CHANNEL + ul_channel; + return tc_channel->TC_IMR; +} + +/** + * \brief Get current status on the selected channel. + * + * \param p_tc Pointer to a TC instance. + * \param ul_channel Channel to configure. + * + * \return The current TC status. + */ +uint32_t tc_get_status(Tc *p_tc, uint32_t ul_channel) +{ + TcChannel *tc_channel; + + Assert(ul_channel < + (sizeof(p_tc->TC_CHANNEL) / sizeof(p_tc->TC_CHANNEL[0]))); + tc_channel = p_tc->TC_CHANNEL + ul_channel; + return tc_channel->TC_SR; +} + +/* TC divisor used to find the lowest acceptable timer frequency */ +#define TC_DIV_FACTOR 65536 + +#if (!SAM4L) + +#ifndef FREQ_SLOW_CLOCK_EXT +#define FREQ_SLOW_CLOCK_EXT 32768 /* External slow clock frequency (hz) */ +#endif + +/** + * \brief Find the best MCK divisor. + * + * Finds the best MCK divisor given the timer frequency and MCK. The result + * is guaranteed to satisfy the following equation: + * \code + * (MCK / (DIV * 65536)) <= freq <= (MCK / DIV) + * \endcode + * with DIV being the lowest possible value, + * to maximize timing adjust resolution. + * + * \param ul_freq Desired timer frequency. + * \param ul_mck Master clock frequency. + * \param p_uldiv Divisor value. + * \param p_ultcclks TCCLKS field value for divisor. + * \param ul_boardmck Board clock frequency. + * + * \return 1 if a proper divisor has been found, otherwise 0. + */ +uint32_t tc_find_mck_divisor(uint32_t ul_freq, uint32_t ul_mck, + uint32_t *p_uldiv, uint32_t *p_ultcclks, uint32_t ul_boardmck) +{ + const uint32_t divisors[5] = { 2, 8, 32, 128, + ul_boardmck / FREQ_SLOW_CLOCK_EXT }; + uint32_t ul_index; + uint32_t ul_high, ul_low; + + /* Satisfy frequency bound. */ + for (ul_index = 0; + ul_index < (sizeof(divisors) / sizeof(divisors[0])); + ul_index++) { + ul_high = ul_mck / divisors[ul_index]; + ul_low = ul_high / TC_DIV_FACTOR; + if (ul_freq > ul_high) { + return 0; + } else if (ul_freq >= ul_low) { + break; + } + } + if (ul_index >= (sizeof(divisors) / sizeof(divisors[0]))) { + return 0; + } + + /* Store results. */ + if (p_uldiv) { + *p_uldiv = divisors[ul_index]; + } + + if (p_ultcclks) { + *p_ultcclks = ul_index; + } + + return 1; +} + +#endif + +#if (SAM4L) +/** + * \brief Find the best PBA clock divisor. + * + * Finds the best divisor given the timer frequency and PBA clock. The result + * is guaranteed to satisfy the following equation: + * \code + * (ul_pbaclk / (2* DIV * 65536)) <= freq <= (ul_pbaclk / (2* DIV)) + * \endcode + * with DIV being the lowest possible value, + * to maximize timing adjust resolution. + * + * \param ul_freq Desired timer frequency. + * \param ul_mck PBA clock frequency. + * \param p_uldiv Divisor value. + * \param p_ultcclks TCCLKS field value for divisor. + * \param ul_boardmck useless here. + * + * \return 1 if a proper divisor has been found, otherwise 0. + */ +uint32_t tc_find_mck_divisor(uint32_t ul_freq, uint32_t ul_mck, + uint32_t *p_uldiv, uint32_t *p_ultcclks, uint32_t ul_boardmck) +{ + const uint32_t divisors[5] = { 0, 2, 8, 32, 128}; + uint32_t ul_index; + uint32_t ul_high, ul_low; + + UNUSED(ul_boardmck); + + /* Satisfy frequency bound. */ + for (ul_index = 1; + ul_index < (sizeof(divisors) / sizeof(divisors[0])); + ul_index++) { + ul_high = ul_mck / divisors[ul_index]; + ul_low = ul_high / TC_DIV_FACTOR; + if (ul_freq > ul_high) { + return 0; + } else if (ul_freq >= ul_low) { + break; + } + } + if (ul_index >= (sizeof(divisors) / sizeof(divisors[0]))) { + return 0; + } + + /* Store results. */ + if (p_uldiv) { + *p_uldiv = divisors[ul_index]; + } + + if (p_ultcclks) { + *p_ultcclks = ul_index; + } + + return 1; +} + +#endif + +#if (!SAM4L) + +/** + * \brief Enable TC QDEC interrupts. + * + * \param p_tc Pointer to a TC instance. + * \param ul_sources Interrupts to be enabled. + */ +void tc_enable_qdec_interrupt(Tc *p_tc, uint32_t ul_sources) +{ + p_tc->TC_QIER = ul_sources; +} + +/** + * \brief Disable TC QDEC interrupts. + * + * \param p_tc Pointer to a TC instance. + * \param ul_sources Interrupts to be disabled. + */ +void tc_disable_qdec_interrupt(Tc *p_tc, uint32_t ul_sources) +{ + p_tc->TC_QIDR = ul_sources; +} + +/** + * \brief Read TC QDEC interrupt mask. + * + * \param p_tc Pointer to a TC instance. + * + * \return The interrupt mask value. + */ +uint32_t tc_get_qdec_interrupt_mask(Tc *p_tc) +{ + return p_tc->TC_QIMR; +} + +/** + * \brief Get current QDEC status. + * + * \param p_tc Pointer to a TC instance. + * + * \return The current TC status. + */ +uint32_t tc_get_qdec_interrupt_status(Tc *p_tc) +{ + return p_tc->TC_QISR; +} + +#endif + +#if (!SAM3U) + +/** + * \brief Enable or disable write protection of TC registers. + * + * \param p_tc Pointer to a TC instance. + * \param ul_enable 1 to enable, 0 to disable. + */ +void tc_set_writeprotect(Tc *p_tc, uint32_t ul_enable) +{ + if (ul_enable) { + p_tc->TC_WPMR = TC_WPMR_WPKEY_VALUE | TC_WPMR_WPEN; + } else { + p_tc->TC_WPMR = TC_WPMR_WPKEY_VALUE; + } +} + +#endif + +#if SAM4L + +/** + * \brief Indicate features. + * + * \param p_tc Pointer to a TC instance. + * + * \return TC_FEATURES value. + */ +uint32_t tc_get_feature(Tc *p_tc) +{ + return p_tc->TC_FEATURES; +} + +/** + * \brief Indicate version. + * + * \param p_tc Pointer to a TC instance. + * + * \return TC_VERSION value. + */ +uint32_t tc_get_version(Tc *p_tc) +{ + return p_tc->TC_VERSION; +} + +#endif + +//@} + +/// @cond 0 +/**INDENT-OFF**/ +#ifdef __cplusplus +} +#endif +/**INDENT-ON**/ +/// @endcond diff --git a/FreeRTOS/Demo/CORTEX_M4_ATSAM4S_Atmel_Studio/src/asf/sam/drivers/tc/tc.h b/FreeRTOS/Demo/CORTEX_M4_ATSAM4S_Atmel_Studio/src/asf/sam/drivers/tc/tc.h new file mode 100644 index 000000000..05cdd1017 --- /dev/null +++ b/FreeRTOS/Demo/CORTEX_M4_ATSAM4S_Atmel_Studio/src/asf/sam/drivers/tc/tc.h @@ -0,0 +1,113 @@ +/** + * \file + * + * \brief Timer Counter (TC) driver for SAM. + * + * Copyright (c) 2011-2012 Atmel Corporation. All rights reserved. + * + * \asf_license_start + * + * \page License + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an + * Atmel microcontroller product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + * \asf_license_stop + * + */ + +#ifndef TC_H_INCLUDED +#define TC_H_INCLUDED + +#include "compiler.h" + +/// @cond 0 +/**INDENT-OFF**/ +#ifdef __cplusplus +extern "C" { +#endif +/**INDENT-ON**/ +/// @endcond + +void tc_init(Tc *p_tc, uint32_t ul_Channel, uint32_t ul_Mode); +void tc_sync_trigger(Tc *p_tc); +void tc_set_block_mode(Tc *p_tc, uint32_t ul_blockmode); + +#if (!SAM3U) +uint32_t tc_init_2bit_gray(Tc *p_tc, uint32_t ul_channel, + uint32_t ul_steppermode); +#endif + +void tc_start(Tc *p_tc, uint32_t ul_channel); +void tc_stop(Tc *p_tc, uint32_t ul_channel); + +int tc_read_ra(Tc *p_tc, uint32_t ul_channel); +int tc_read_rb(Tc *p_tc, uint32_t ul_channel); +int tc_read_rc(Tc *p_tc, uint32_t ul_channel); + +void tc_write_ra(Tc *p_tc, uint32_t ul_channel, + uint32_t ul_value); +void tc_write_rb(Tc *p_tc, uint32_t ul_channel, + uint32_t ul_value); +void tc_write_rc(Tc *p_tc, uint32_t ul_channel, + uint32_t ul_value); + +uint32_t tc_find_mck_divisor(uint32_t ul_freq, uint32_t ul_mck, + uint32_t *p_uldiv, uint32_t *ul_tcclks, uint32_t ul_boardmck); +void tc_enable_interrupt(Tc *p_tc, uint32_t ul_channel, + uint32_t ul_sources); +void tc_disable_interrupt(Tc *p_tc, uint32_t ul_channel, + uint32_t ul_sources); +uint32_t tc_get_interrupt_mask(Tc *p_tc, uint32_t ul_channel); +uint32_t tc_get_status(Tc *p_tc, uint32_t ul_channel); +#if (!SAM4L) +void tc_enable_qdec_interrupt(Tc *p_tc, uint32_t ul_sources); +void tc_disable_qdec_interrupt(Tc *p_tc, uint32_t ul_sources); +uint32_t tc_get_qdec_interrupt_mask(Tc *p_tc); +uint32_t tc_get_qdec_interrupt_status(Tc *p_tc); +#endif + +#if (!SAM3U) +void tc_set_writeprotect(Tc *p_tc, uint32_t ul_enable); +#endif + +#if SAM4L +uint32_t tc_get_feature(Tc *p_tc); +uint32_t tc_get_version(Tc *p_tc); + +#endif + +/// @cond 0 +/**INDENT-OFF**/ +#ifdef __cplusplus +} +#endif +/**INDENT-ON**/ +/// @endcond + +#endif /* TC_H_INCLUDED */ diff --git a/FreeRTOS/Demo/CORTEX_M4_ATSAM4S_Atmel_Studio/src/main_full.c b/FreeRTOS/Demo/CORTEX_M4_ATSAM4S_Atmel_Studio/src/main_full.c index 6cc81b758..3f48aeefe 100644 --- a/FreeRTOS/Demo/CORTEX_M4_ATSAM4S_Atmel_Studio/src/main_full.c +++ b/FreeRTOS/Demo/CORTEX_M4_ATSAM4S_Atmel_Studio/src/main_full.c @@ -123,6 +123,7 @@ #include "partest.h" #include "comtest2.h" #include "QueueSet.h" +#include "IntQueue.h" /* Atmel library includes. */ #include "asf.h" @@ -180,6 +181,7 @@ TimerHandle_t xCheckTimer = NULL; /* Start all the other standard demo/test tasks. The have not particular functionality, but do demonstrate how to use the FreeRTOS API and test the kernel port. */ + vStartInterruptQueueTasks(); vStartIntegerMathTasks( tskIDLE_PRIORITY ); vStartDynamicPriorityTasks(); vStartBlockingQueueTasks( mainBLOCK_Q_PRIORITY ); @@ -232,6 +234,11 @@ unsigned long ulErrorFound = pdFALSE; /* Check all the demo tasks (other than the flash tasks) to ensure they are all still running, and that none have detected an error. */ + if( xAreIntQueueTasksStillRunning() != pdTRUE ) + { + ulErrorFound = pdTRUE; + } + if( xAreIntegerMathsTaskStillRunning() != pdTRUE ) { ulErrorFound = pdTRUE; -- 2.39.5