]> git.sur5r.net Git - freertos/blob - FreeRTOS/Source/portable/IAR/STR91x/ISR_Support.h
Update version numbers in preparation for V8.2.0 release candidate 1.
[freertos] / FreeRTOS / Source / portable / IAR / STR91x / ISR_Support.h
1 /*\r
2     FreeRTOS V8.2.0rc1 - Copyright (C) 2014 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     >>!   NOTE: The modification to the GPL is included to allow you to     !<<\r
14     >>!   distribute a combined work that includes FreeRTOS without being   !<<\r
15     >>!   obliged to provide the source code for proprietary components     !<<\r
16     >>!   outside of the FreeRTOS kernel.                                   !<<\r
17 \r
18     FreeRTOS is distributed in the hope that it will be useful, but WITHOUT ANY\r
19     WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\r
20     FOR A PARTICULAR PURPOSE.  Full license text is available on the following\r
21     link: http://www.freertos.org/a00114.html\r
22 \r
23     1 tab == 4 spaces!\r
24 \r
25     ***************************************************************************\r
26      *                                                                       *\r
27      *    Having a problem?  Start by reading the FAQ "My application does   *\r
28      *    not run, what could be wrong?".  Have you defined configASSERT()?  *\r
29      *                                                                       *\r
30      *    http://www.FreeRTOS.org/FAQHelp.html                               *\r
31      *                                                                       *\r
32     ***************************************************************************\r
33 \r
34     ***************************************************************************\r
35      *                                                                       *\r
36      *    FreeRTOS provides completely free yet professionally developed,    *\r
37      *    robust, strictly quality controlled, supported, and cross          *\r
38      *    platform software that is more than just the market leader, it     *\r
39      *    is the industry's de facto standard.                               *\r
40      *                                                                       *\r
41      *    Help yourself get started quickly while simultaneously helping     *\r
42      *    to support the FreeRTOS project by purchasing a FreeRTOS           *\r
43      *    tutorial book, reference manual, or both:                          *\r
44      *    http://www.FreeRTOS.org/Documentation                              *\r
45      *                                                                       *\r
46     ***************************************************************************\r
47 \r
48     ***************************************************************************\r
49      *                                                                       *\r
50      *   Investing in training allows your team to be as productive as       *\r
51      *   possible as early as possible, lowering your overall development    *\r
52      *   cost, and enabling you to bring a more robust product to market     *\r
53      *   earlier than would otherwise be possible.  Richard Barry is both    *\r
54      *   the architect and key author of FreeRTOS, and so also the world's   *\r
55      *   leading authority on what is the world's most popular real time     *\r
56      *   kernel for deeply embedded MCU designs.  Obtaining your training    *\r
57      *   from Richard ensures your team will gain directly from his in-depth *\r
58      *   product knowledge and years of usage experience.  Contact Real Time *\r
59      *   Engineers Ltd to enquire about the FreeRTOS Masterclass, presented  *\r
60      *   by Richard Barry:  http://www.FreeRTOS.org/contact\r
61      *                                                                       *\r
62     ***************************************************************************\r
63 \r
64     ***************************************************************************\r
65      *                                                                       *\r
66      *    You are receiving this top quality software for free.  Please play *\r
67      *    fair and reciprocate by reporting any suspected issues and         *\r
68      *    participating in the community forum:                              *\r
69      *    http://www.FreeRTOS.org/support                                    *\r
70      *                                                                       *\r
71      *    Thank you!                                                         *\r
72      *                                                                       *\r
73     ***************************************************************************\r
74 \r
75     http://www.FreeRTOS.org - Documentation, books, training, latest versions,\r
76     license and Real Time Engineers Ltd. contact details.\r
77 \r
78     http://www.FreeRTOS.org/plus - A selection of FreeRTOS ecosystem products,\r
79     including FreeRTOS+Trace - an indispensable productivity tool, a DOS\r
80     compatible FAT file system, and our tiny thread aware UDP/IP stack.\r
81 \r
82     http://www.FreeRTOS.org/labs - Where new FreeRTOS products go to incubate.\r
83     Come and try FreeRTOS+TCP, our new open source TCP/IP stack for FreeRTOS.\r
84 \r
85     http://www.OpenRTOS.com - Real Time Engineers ltd license FreeRTOS to High\r
86     Integrity Systems ltd. to sell under the OpenRTOS brand.  Low cost OpenRTOS\r
87     licenses offer ticketed support, indemnification and commercial middleware.\r
88 \r
89     http://www.SafeRTOS.com - High Integrity Systems also provide a safety\r
90     engineered and independently SIL3 certified version for use in safety and\r
91     mission critical applications that require provable dependability.\r
92 \r
93     1 tab == 4 spaces!\r
94 */\r
95 \r
96         EXTERN pxCurrentTCB\r
97         EXTERN ulCriticalNesting\r
98 \r
99 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;\r
100 ; Context save and restore macro definitions\r
101 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;\r
102 \r
103 portSAVE_CONTEXT MACRO\r
104 \r
105         ; Push R0 as we are going to use the register.                                  \r
106         STMDB   SP!, {R0}\r
107 \r
108         ; Set R0 to point to the task stack pointer.                                    \r
109         STMDB   SP, {SP}^\r
110         NOP\r
111         SUB             SP, SP, #4\r
112         LDMIA   SP!, {R0}\r
113 \r
114         ; Push the return address onto the stack.                                               \r
115         STMDB   R0!, {LR}\r
116 \r
117         ; Now we have saved LR we can use it instead of R0.                             \r
118         MOV             LR, R0\r
119 \r
120         ; Pop R0 so we can save it onto the system mode stack.                  \r
121         LDMIA   SP!, {R0}\r
122 \r
123         ; Push all the system mode registers onto the task stack.               \r
124         STMDB   LR, {R0-LR}^\r
125         NOP\r
126         SUB             LR, LR, #60\r
127 \r
128         ; Push the SPSR onto the task stack.                                                    \r
129         MRS             R0, SPSR\r
130         STMDB   LR!, {R0}\r
131 \r
132         LDR             R0, =ulCriticalNesting \r
133         LDR             R0, [R0]\r
134         STMDB   LR!, {R0}\r
135 \r
136         ; Store the new top of stack for the task.                                              \r
137         LDR             R1, =pxCurrentTCB\r
138         LDR             R0, [R1]\r
139         STR             LR, [R0]\r
140 \r
141         ENDM\r
142 \r
143 \r
144 portRESTORE_CONTEXT MACRO\r
145 \r
146         ; Set the LR to the task stack.                                                                         \r
147         LDR             R1, =pxCurrentTCB\r
148         LDR             R0, [R1]\r
149         LDR             LR, [R0]\r
150 \r
151         ; The critical nesting depth is the first item on the stack.    \r
152         ; Load it into the ulCriticalNesting variable.                                  \r
153         LDR             R0, =ulCriticalNesting\r
154         LDMFD   LR!, {R1}\r
155         STR             R1, [R0]\r
156 \r
157         ; Get the SPSR from the stack.                                                                  \r
158         LDMFD   LR!, {R0}\r
159         MSR             SPSR_cxsf, R0\r
160 \r
161         ; Restore all system mode registers for the task.                               \r
162         LDMFD   LR, {R0-R14}^\r
163         NOP\r
164 \r
165         ; Restore the return address.                                                                   \r
166         LDR             LR, [LR, #+60]\r
167 \r
168         ; And return - correcting the offset in the LR to obtain the    \r
169         ; correct address.                                                                                              \r
170         SUBS    PC, LR, #4\r
171 \r
172         ENDM\r
173 \r