]> git.sur5r.net Git - freertos/blob - FreeRTOS/Source/portable/IAR/V850ES/ISR_Support.h
Update version number to 9.0.0rc2.
[freertos] / FreeRTOS / Source / portable / IAR / V850ES / ISR_Support.h
1 /*\r
2     FreeRTOS V9.0.0rc2 - Copyright (C) 2016 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         EXTERN pxCurrentTCB\r
71         EXTERN usCriticalNesting\r
72 \r
73 #include "FreeRTOSConfig.h"\r
74 \r
75 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;\r
76 ; Context save and restore macro definitions\r
77 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;\r
78 \r
79 portSAVE_CONTEXT MACRO\r
80 \r
81     add     -0x0C,sp                    ; prepare stack to save necessary values\r
82     st.w    lp,8[sp]                    ; store LP to stack\r
83     stsr    0,r31\r
84     st.w    lp,4[sp]                    ; store EIPC to stack\r
85     stsr    1,lp\r
86     st.w    lp,0[sp]                    ; store EIPSW to stack\r
87 #if configDATA_MODE == 1                                        ; Using the Tiny data model\r
88     prepare {r20,r21,r22,r23,r24,r25,r26,r27,r28,r29,r30},76,sp ; save general purpose registers\r
89     sst.w   r19,72[ep]\r
90     sst.w   r18,68[ep]\r
91     sst.w   r17,64[ep]\r
92     sst.w   r16,60[ep]\r
93     sst.w   r15,56[ep]\r
94     sst.w   r14,52[ep]\r
95     sst.w   r13,48[ep]\r
96     sst.w   r12,44[ep]\r
97     sst.w   r11,40[ep]\r
98     sst.w   r10,36[ep]\r
99     sst.w   r9,32[ep]\r
100     sst.w   r8,28[ep]\r
101     sst.w   r7,24[ep]\r
102     sst.w   r6,20[ep]\r
103     sst.w   r5,16[ep]\r
104     sst.w   r4,12[ep]\r
105 #else                                                           ; Using the Small/Large data model\r
106     prepare {r20,r21,r22,r23,r24,r26,r27,r28,r29,r30},72,sp     ; save general purpose registers\r
107     sst.w   r19,68[ep]\r
108     sst.w   r18,64[ep]\r
109     sst.w   r17,60[ep]\r
110     sst.w   r16,56[ep]\r
111     sst.w   r15,52[ep]\r
112     sst.w   r14,48[ep]\r
113     sst.w   r13,44[ep]\r
114     sst.w   r12,40[ep]\r
115     sst.w   r11,36[ep]\r
116     sst.w   r10,32[ep]\r
117     sst.w   r9,28[ep]\r
118     sst.w   r8,24[ep]\r
119     sst.w   r7,20[ep]\r
120     sst.w   r6,16[ep]\r
121     sst.w   r5,12[ep]\r
122 #endif /* configDATA_MODE */\r
123     sst.w   r2,8[ep]\r
124     sst.w   r1,4[ep]\r
125     MOVHI   hi1(usCriticalNesting),r0,r1        ; save usCriticalNesting value to stack\r
126     ld.w    lw1(usCriticalNesting)[r1],r2\r
127     sst.w   r2,0[ep]\r
128     MOVHI   hi1(pxCurrentTCB),r0,r1                     ; save SP to top of current TCB\r
129     ld.w    lw1(pxCurrentTCB)[r1],r2\r
130     st.w    sp,0[r2]\r
131     ENDM\r
132 \r
133 \r
134 portRESTORE_CONTEXT MACRO\r
135 \r
136     MOVHI   hi1(pxCurrentTCB),r0,r1                     ; get Stackpointer address\r
137     ld.w    lw1(pxCurrentTCB)[r1],sp\r
138     MOV     sp,r1\r
139     ld.w    0[r1],sp                                            ; load stackpointer\r
140     MOV     sp,ep                                                       ; set stack pointer to element pointer\r
141     sld.w   0[ep],r1                                            ; load usCriticalNesting value from stack\r
142     MOVHI   hi1(usCriticalNesting),r0,r2\r
143     st.w    r1,lw1(usCriticalNesting)[r2]\r
144     sld.w   4[ep],r1                                            ; restore general purpose registers\r
145     sld.w   8[ep],r2\r
146 #if configDATA_MODE == 1                                        ; Using Tiny data model\r
147     sld.w   12[ep],r4\r
148     sld.w   16[ep],r5\r
149     sld.w   20[ep],r6\r
150     sld.w   24[ep],r7\r
151     sld.w   28[ep],r8\r
152     sld.w   32[ep],r9\r
153     sld.w   36[ep],r10\r
154     sld.w   40[ep],r11\r
155     sld.w   44[ep],r12\r
156     sld.w   48[ep],r13\r
157     sld.w   52[ep],r14\r
158     sld.w   56[ep],r15\r
159     sld.w   60[ep],r16\r
160     sld.w   64[ep],r17\r
161     sld.w   68[ep],r18\r
162     sld.w   72[ep],r19\r
163     dispose 76,{r20,r21,r22,r23,r24,r25,r26,r27,r28,r29,r30}\r
164 #else                                                                           ; Using Small/Large data model\r
165     sld.w   12[ep],r5\r
166     sld.w   16[ep],r6\r
167     sld.w   20[ep],r7\r
168     sld.w   24[ep],r8\r
169     sld.w   28[ep],r9\r
170     sld.w   32[ep],r10\r
171     sld.w   36[ep],r11\r
172     sld.w   40[ep],r12\r
173     sld.w   44[ep],r13\r
174     sld.w   48[ep],r14\r
175     sld.w   52[ep],r15\r
176     sld.w   56[ep],r16\r
177     sld.w   60[ep],r17\r
178     sld.w   64[ep],r18\r
179     sld.w   68[ep],r19\r
180     dispose 72,{r20,r21,r22,r23,r24,r26,r27,r28,r29,r30}\r
181 #endif /* configDATA_MODE */\r
182     ld.w    0[sp],lp                                            ; restore EIPSW from stack\r
183     ldsr    lp,1\r
184     ld.w    4[sp],lp                                            ; restore EIPC from stack\r
185     ldsr    lp,0\r
186     ld.w    8[sp],lp                                            ; restore LP from stack\r
187     add     0x0C,sp                                                     ; set SP to right position\r
188 \r
189     RETI\r
190 \r
191     ENDM\r