]> git.sur5r.net Git - freertos/blob - FreeRTOS/Demo/CORTEX_M4F_MSP432_LaunchPad_IAR_CCS_Keil/Full_Demo/IntQueueTimer.c
Final V8.2.1 release ready for tagging:
[freertos] / FreeRTOS / Demo / CORTEX_M4F_MSP432_LaunchPad_IAR_CCS_Keil / Full_Demo / IntQueueTimer.c
1 /*\r
2     FreeRTOS V8.2.1 - Copyright (C) 2015 Real Time Engineers Ltd.\r
3     All rights reserved\r
4 \r
5     VISIT http://www.FreeRTOS.org TO ENSURE YOU ARE USING THE LATEST VERSION.\r
6 \r
7     This file is part of the FreeRTOS distribution.\r
8 \r
9     FreeRTOS is free software; you can redistribute it and/or modify it under\r
10     the terms of the GNU General Public License (version 2) as published by the\r
11     Free Software Foundation >>!AND MODIFIED BY!<< the FreeRTOS exception.\r
12 \r
13     ***************************************************************************\r
14     >>!   NOTE: The modification to the GPL is included to allow you to     !<<\r
15     >>!   distribute a combined work that includes FreeRTOS without being   !<<\r
16     >>!   obliged to provide the source code for proprietary components     !<<\r
17     >>!   outside of the FreeRTOS kernel.                                   !<<\r
18     ***************************************************************************\r
19 \r
20     FreeRTOS is distributed in the hope that it will be useful, but WITHOUT ANY\r
21     WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\r
22     FOR A PARTICULAR PURPOSE.  Full license text is available on the following\r
23     link: http://www.freertos.org/a00114.html\r
24 \r
25     ***************************************************************************\r
26      *                                                                       *\r
27      *    FreeRTOS provides completely free yet professionally developed,    *\r
28      *    robust, strictly quality controlled, supported, and cross          *\r
29      *    platform software that is more than just the market leader, it     *\r
30      *    is the industry's de facto standard.                               *\r
31      *                                                                       *\r
32      *    Help yourself get started quickly while simultaneously helping     *\r
33      *    to support the FreeRTOS project by purchasing a FreeRTOS           *\r
34      *    tutorial book, reference manual, or both:                          *\r
35      *    http://www.FreeRTOS.org/Documentation                              *\r
36      *                                                                       *\r
37     ***************************************************************************\r
38 \r
39     http://www.FreeRTOS.org/FAQHelp.html - Having a problem?  Start by reading\r
40     the FAQ page "My application does not run, what could be wrong?".  Have you\r
41     defined configASSERT()?\r
42 \r
43     http://www.FreeRTOS.org/support - In return for receiving this top quality\r
44     embedded software for free we request you assist our global community by\r
45     participating in the support forum.\r
46 \r
47     http://www.FreeRTOS.org/training - Investing in training allows your team to\r
48     be as productive as possible as early as possible.  Now you can receive\r
49     FreeRTOS training directly from Richard Barry, CEO of Real Time Engineers\r
50     Ltd, and the world's leading authority on the world's leading RTOS.\r
51 \r
52     http://www.FreeRTOS.org/plus - A selection of FreeRTOS ecosystem products,\r
53     including FreeRTOS+Trace - an indispensable productivity tool, a DOS\r
54     compatible FAT file system, and our tiny thread aware UDP/IP stack.\r
55 \r
56     http://www.FreeRTOS.org/labs - Where new FreeRTOS products go to incubate.\r
57     Come and try FreeRTOS+TCP, our new open source TCP/IP stack for FreeRTOS.\r
58 \r
59     http://www.OpenRTOS.com - Real Time Engineers ltd. license FreeRTOS to High\r
60     Integrity Systems ltd. to sell under the OpenRTOS brand.  Low cost OpenRTOS\r
61     licenses offer ticketed support, indemnification and commercial middleware.\r
62 \r
63     http://www.SafeRTOS.com - High Integrity Systems also provide a safety\r
64     engineered and independently SIL3 certified version for use in safety and\r
65     mission critical applications that require provable dependability.\r
66 \r
67     1 tab == 4 spaces!\r
68 */\r
69 \r
70 /*\r
71  * This file initialises the two timers available in the Timer32 peripheral.\r
72  *\r
73  * Channels 0 and 1 provide the interrupts that are used with the IntQ\r
74  * standard demo tasks, which test interrupt nesting and using queues from\r
75  * interrupts.\r
76  */\r
77 \r
78 /* Scheduler includes. */\r
79 #include "FreeRTOS.h"\r
80 \r
81 /* Demo includes. */\r
82 #include "IntQueueTimer.h"\r
83 #include "IntQueue.h"\r
84 \r
85 /* The frequencies at which the two timers expire are slightly offset to ensure\r
86 they don't remain synchronised. */\r
87 #define tmrTIMER_0_FREQUENCY    ( 2000UL )\r
88 #define tmrTIMER_1_FREQUENCY    ( 2003UL )\r
89 \r
90 /* The interrupts use the FreeRTOS API so must be at or below the max syscall\r
91 interrupt priority.  Counter-intuitively, the higher the numeric number the\r
92 lower the logical priority. http://www.freertos.org/RTOS-Cortex-M3-M4.html */\r
93 #define tmrLOWER_PRIORITY               ( configMAX_SYSCALL_INTERRUPT_PRIORITY )\r
94 #define tmrHIGHER_PRIORITY              ( configMAX_SYSCALL_INTERRUPT_PRIORITY + 1 )\r
95 /*-----------------------------------------------------------*/\r
96 \r
97 /* Handlers for the two timer peripherals - two channels are used in the TC0\r
98 timer. */\r
99 void vT32_0_Handler( void );\r
100 void vT32_1_Handler( void );\r
101 \r
102 /*-----------------------------------------------------------*/\r
103 \r
104 void vInitialiseTimerForIntQueueTest( void )\r
105 {\r
106     /* Configure the timer channels. */\r
107         MAP_Timer32_initModule( TIMER32_0_MODULE, TIMER32_PRESCALER_1, TIMER32_32BIT, TIMER32_PERIODIC_MODE );\r
108         MAP_Timer32_setCount( TIMER32_0_MODULE, CS_getMCLK() / tmrTIMER_0_FREQUENCY );\r
109         MAP_Timer32_enableInterrupt( TIMER32_0_MODULE );\r
110         MAP_Timer32_startTimer( TIMER32_0_MODULE, false );\r
111         MAP_Interrupt_setPriority( INT_T32_INT1, tmrLOWER_PRIORITY );\r
112         MAP_Interrupt_enableInterrupt( INT_T32_INT1 );\r
113 \r
114         MAP_Timer32_initModule( TIMER32_1_MODULE, TIMER32_PRESCALER_1, TIMER32_32BIT, TIMER32_PERIODIC_MODE );\r
115         MAP_Timer32_setCount( TIMER32_1_MODULE, CS_getMCLK() / tmrTIMER_1_FREQUENCY );\r
116         MAP_Timer32_enableInterrupt( TIMER32_1_MODULE );\r
117         MAP_Timer32_startTimer( TIMER32_1_MODULE, false );\r
118         MAP_Interrupt_setPriority( INT_T32_INT2, tmrHIGHER_PRIORITY );\r
119         MAP_Interrupt_enableInterrupt( INT_T32_INT2 );\r
120 }\r
121 /*-----------------------------------------------------------*/\r
122 \r
123 void vT32_0_Handler( void )\r
124 {\r
125     MAP_Timer32_clearInterruptFlag( TIMER32_0_MODULE );\r
126         portYIELD_FROM_ISR( xFirstTimerHandler() );\r
127 }\r
128 /*-----------------------------------------------------------*/\r
129 \r
130 void vT32_1_Handler( void )\r
131 {\r
132     MAP_Timer32_clearInterruptFlag( TIMER32_1_MODULE );\r
133         portYIELD_FROM_ISR( xSecondTimerHandler() );\r
134 }\r
135 \r