diff options
| author | Yuval Adam <yuv.adm@gmail.com> | 2014-08-08 14:42:07 +0300 |
|---|---|---|
| committer | Yuval Adam <yuv.adm@gmail.com> | 2014-08-08 14:42:07 +0300 |
| commit | a6163888f3c56123b1db313743c6147ba498732c (patch) | |
| tree | ff7d15d991d1d09ba6cbc0cec80924f57445bfdd /third_party/FreeRTOS/Demo/CORTEX_LM3Sxxxx_Rowley/timertest.c | |
| parent | c3e4c9a25c2910d2d66d52215b3406b13d5b23d5 (diff) | |
Add third_party libs
Diffstat (limited to 'third_party/FreeRTOS/Demo/CORTEX_LM3Sxxxx_Rowley/timertest.c')
| -rw-r--r-- | third_party/FreeRTOS/Demo/CORTEX_LM3Sxxxx_Rowley/timertest.c | 176 |
1 files changed, 176 insertions, 0 deletions
diff --git a/third_party/FreeRTOS/Demo/CORTEX_LM3Sxxxx_Rowley/timertest.c b/third_party/FreeRTOS/Demo/CORTEX_LM3Sxxxx_Rowley/timertest.c new file mode 100644 index 0000000..7fcc85e --- /dev/null +++ b/third_party/FreeRTOS/Demo/CORTEX_LM3Sxxxx_Rowley/timertest.c @@ -0,0 +1,176 @@ +/*
+ FreeRTOS V7.6.0 - Copyright (C) 2013 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!
+*/
+
+/* High speed timer test as described in main.c. */
+
+/* Scheduler includes. */
+#include "FreeRTOS.h"
+
+/* Library includes. */
+#include "hw_ints.h"
+#include "hw_memmap.h"
+#include "hw_types.h"
+#include "interrupt.h"
+#include "sysctl.h"
+#include "lmi_timer.h"
+
+/* The set frequency of the interrupt. Deviations from this are measured as
+the jitter. */
+#define timerINTERRUPT_FREQUENCY ( 20000UL )
+
+/* The expected time between each of the timer interrupts - if the jitter was
+zero. */
+#define timerEXPECTED_DIFFERENCE_VALUE ( configCPU_CLOCK_HZ / timerINTERRUPT_FREQUENCY )
+
+/* The highest available interrupt priority. */
+#define timerHIGHEST_PRIORITY ( 0 )
+
+/* Misc defines. */
+#define timerMAX_32BIT_VALUE ( 0xffffffffUL )
+#define timerTIMER_1_COUNT_VALUE ( * ( ( unsigned long * ) ( TIMER1_BASE + 0x48 ) ) )
+
+/*-----------------------------------------------------------*/
+
+/* Interrupt handler in which the jitter is measured. */
+void Timer0IntHandler( void );
+
+/* Stores the value of the maximum recorded jitter between interrupts. */
+volatile unsigned long ulMaxJitter = 0UL;
+
+/* Counts the total number of times that the high frequency timer has 'ticked'.
+This value is used by the run time stats function to work out what percentage
+of CPU time each task is taking. */
+volatile unsigned long ulHighFrequencyTimerTicks = 0UL;
+/*-----------------------------------------------------------*/
+
+void vSetupHighFrequencyTimer( void )
+{
+unsigned long ulFrequency;
+
+ /* Timer zero is used to generate the interrupts, and timer 1 is used
+ to measure the jitter. */
+ SysCtlPeripheralEnable( SYSCTL_PERIPH_TIMER0 );
+ SysCtlPeripheralEnable( SYSCTL_PERIPH_TIMER1 );
+ TimerConfigure( TIMER0_BASE, TIMER_CFG_32_BIT_PER );
+ TimerConfigure( TIMER1_BASE, TIMER_CFG_32_BIT_PER );
+
+ /* Set the timer interrupt to be above the kernel - highest. */
+ IntPrioritySet( INT_TIMER0A, timerHIGHEST_PRIORITY );
+
+ /* Just used to measure time. */
+ TimerLoadSet(TIMER1_BASE, TIMER_A, timerMAX_32BIT_VALUE );
+
+ /* Ensure interrupts do not start until the scheduler is running. */
+ portDISABLE_INTERRUPTS();
+
+ /* The rate at which the timer will interrupt. */
+ ulFrequency = configCPU_CLOCK_HZ / timerINTERRUPT_FREQUENCY;
+ TimerLoadSet( TIMER0_BASE, TIMER_A, ulFrequency );
+ IntEnable( INT_TIMER0A );
+ TimerIntEnable( TIMER0_BASE, TIMER_TIMA_TIMEOUT );
+
+ /* Enable both timers. */
+ TimerEnable( TIMER0_BASE, TIMER_A );
+ TimerEnable( TIMER1_BASE, TIMER_A );
+}
+/*-----------------------------------------------------------*/
+
+void Timer0IntHandler( void )
+{
+unsigned long ulDifference;
+volatile unsigned long ulCurrentCount;
+static unsigned long ulMaxDifference = 0, ulLastCount = 0;
+
+ /* We use the timer 1 counter value to measure the clock cycles between
+ the timer 0 interrupts. */
+ ulCurrentCount = timerTIMER_1_COUNT_VALUE;
+
+ TimerIntClear( TIMER0_BASE, TIMER_TIMA_TIMEOUT );
+
+ if( ulCurrentCount < ulLastCount )
+ {
+ /* How many times has timer 1 counted since the last interrupt? */
+ ulDifference = ulLastCount - ulCurrentCount;
+
+ /* Is this the largest difference we have measured yet? */
+ if( ulDifference > ulMaxDifference )
+ {
+ ulMaxDifference = ulDifference;
+ ulMaxJitter = ulMaxDifference - timerEXPECTED_DIFFERENCE_VALUE;
+ }
+ }
+
+ ulLastCount = ulCurrentCount;
+
+ /* Keep a count of the total number of 20KHz ticks. This is used by the
+ run time stats functionality to calculate how much CPU time is used by
+ each task. */
+ ulHighFrequencyTimerTicks++;
+}
+
+
+
+
+
|
