]> git.sur5r.net Git - freertos/blob - FreeRTOS/Demo/RL78_E2Studio_GCC/src/RegTest.S
RL78 GCC: Save and restore all register banks.
[freertos] / FreeRTOS / Demo / RL78_E2Studio_GCC / src / RegTest.S
1 /*\r
2     FreeRTOS V7.4.0 - Copyright (C) 2013 Real Time Engineers Ltd.\r
3 \r
4     FEATURES AND PORTS ARE ADDED TO FREERTOS ALL THE TIME.  PLEASE VISIT\r
5     http://www.FreeRTOS.org TO ENSURE YOU ARE USING THE LATEST VERSION.\r
6 \r
7     ***************************************************************************\r
8      *                                                                       *\r
9      *    FreeRTOS tutorial books are available in pdf and paperback.        *\r
10      *    Complete, revised, and edited pdf reference manuals are also       *\r
11      *    available.                                                         *\r
12      *                                                                       *\r
13      *    Purchasing FreeRTOS documentation will not only help you, by       *\r
14      *    ensuring you get running as quickly as possible and with an        *\r
15      *    in-depth knowledge of how to use FreeRTOS, it will also help       *\r
16      *    the FreeRTOS project to continue with its mission of providing     *\r
17      *    professional grade, cross platform, de facto standard solutions    *\r
18      *    for microcontrollers - completely free of charge!                  *\r
19      *                                                                       *\r
20      *    >>> See http://www.FreeRTOS.org/Documentation for details. <<<     *\r
21      *                                                                       *\r
22      *    Thank you for using FreeRTOS, and thank you for your support!      *\r
23      *                                                                       *\r
24     ***************************************************************************\r
25 \r
26 \r
27     This file is part of the FreeRTOS distribution.\r
28 \r
29     FreeRTOS is free software; you can redistribute it and/or modify it under\r
30     the terms of the GNU General Public License (version 2) as published by the\r
31     Free Software Foundation AND MODIFIED BY the FreeRTOS exception.\r
32 \r
33     >>>>>>NOTE<<<<<< The modification to the GPL is included to allow you to\r
34     distribute a combined work that includes FreeRTOS without being obliged to\r
35     provide the source code for proprietary components outside of the FreeRTOS\r
36     kernel.\r
37 \r
38     FreeRTOS is distributed in the hope that it will be useful, but WITHOUT ANY\r
39     WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\r
40     FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more\r
41     details. You should have received a copy of the GNU General Public License\r
42     and the FreeRTOS license exception along with FreeRTOS; if not itcan be\r
43     viewed here: http://www.freertos.org/a00114.html and also obtained by\r
44     writing to Real Time Engineers Ltd., contact details for whom are available\r
45     on the FreeRTOS WEB site.\r
46 \r
47     1 tab == 4 spaces!\r
48 \r
49     ***************************************************************************\r
50      *                                                                       *\r
51      *    Having a problem?  Start by reading the FAQ "My application does   *\r
52      *    not run, what could be wrong?"                                     *\r
53      *                                                                       *\r
54      *    http://www.FreeRTOS.org/FAQHelp.html                               *\r
55      *                                                                       *\r
56     ***************************************************************************\r
57 \r
58 \r
59     http://www.FreeRTOS.org - Documentation, books, training, latest versions,\r
60     license and Real Time Engineers Ltd. contact details.\r
61 \r
62     http://www.FreeRTOS.org/plus - A selection of FreeRTOS ecosystem products,\r
63     including FreeRTOS+Trace - an indispensable productivity tool, and our new\r
64     fully thread aware and reentrant UDP/IP stack.\r
65 \r
66     http://www.OpenRTOS.com - Real Time Engineers ltd license FreeRTOS to High\r
67     Integrity Systems, who sell the code with commercial support,\r
68     indemnification and middleware, under the OpenRTOS brand.\r
69 \r
70     http://www.SafeRTOS.com - High Integrity Systems also provide a safety\r
71     engineered and independently SIL3 certified version for use in safety and\r
72     mission critical applications that require provable dependability.\r
73 */\r
74 \r
75 /*\r
76  * This file defines the RegTest tasks as described at the top of main.c\r
77  */\r
78 \r
79         .global _vRegTest1Task\r
80         .short  _vRegTest1Task\r
81         .global _vRegTest2Task\r
82         .short  _vRegTest2Task\r
83 \r
84         .extern _vRegTestError\r
85         .extern _usRegTest1LoopCounter\r
86         .extern _usRegTest2LoopCounter\r
87 \r
88         .text\r
89 /*\r
90  * Fill all the registers with known values, then check that the registers\r
91  * contain the expected value.  An incorrect value being indicative of an\r
92  * error in the context switch mechanism.\r
93  */\r
94 _vRegTest1Task:\r
95 \r
96         /* First fill the registers. */\r
97         SEL             RB0\r
98         MOVW    AX, #0x1122\r
99         MOVW    BC, #0x3344\r
100         MOVW    DE, #0x5566\r
101         MOVW    HL, #0x7788\r
102         SEL             RB1\r
103         MOVW    AX, #0x1111\r
104         MOVW    BC, #0x2222\r
105         MOVW    DE, #0x3333\r
106         MOVW    HL, #0x4444\r
107         SEL             RB2\r
108         MOVW    AX, #0x5555\r
109         MOVW    BC, #0x6666\r
110         MOVW    DE, #0x7777\r
111         MOVW    HL, #0x8888\r
112         SEL             RB3\r
113         MOVW    AX, #0xAAAA\r
114         MOVW    BC, #0xBBBB\r
115         MOVW    DE, #0xCCCC\r
116         MOVW    HL, #0xDDDD\r
117         SEL             RB0\r
118 \r
119 _loop1:\r
120 \r
121         /* Continuously check that the register values remain at their expected\r
122         values.  The BRK is to test the yield.  This task runs at low priority\r
123         so will also regularly get preempted. */\r
124         BRK\r
125 \r
126         /* Compare with the expected value. */\r
127         CMPW    AX, #0x1122\r
128         BZ              $.+5\r
129 \r
130         /* Jump over the branch to vRegTestError() if the register contained the\r
131         expected value - otherwise flag an error by executing vRegTestError(). */\r
132         BR              !!_vRegTestError\r
133 \r
134         /* Repeat for all the registers. */\r
135         MOVW    AX, BC\r
136         CMPW    AX, #0x3344\r
137         BZ              $.+5\r
138         BR              !!_vRegTestError\r
139         MOVW    AX, DE\r
140         CMPW    AX, #0x5566\r
141         BZ              $.+5\r
142         BR              !!_vRegTestError\r
143         MOVW    AX, HL\r
144         CMPW    AX, #0x7788\r
145         BZ              $.+5\r
146         BR              !!_vRegTestError\r
147 \r
148         /* Set AX back to its initial value. */\r
149         MOVW    AX, #0x1122\r
150 \r
151         SEL             RB1\r
152         CMPW    AX, #0x1111\r
153         BZ              $.+5\r
154         BR              !!_vRegTestError\r
155         MOVW    AX, BC\r
156         CMPW    AX, #0x2222\r
157         BZ              $.+5\r
158         BR              !!_vRegTestError\r
159         MOVW    AX, DE\r
160         CMPW    AX, #0x3333\r
161         BZ              $.+5\r
162         BR              !!_vRegTestError\r
163         MOVW    AX, HL\r
164         CMPW    AX, #0x4444\r
165         BZ              $.+5\r
166         BR              !!_vRegTestError\r
167         MOVW    AX, #0x1111\r
168 \r
169 \r
170         SEL             RB2\r
171         CMPW    AX, #0x5555\r
172         BZ              $.+5\r
173         BR              !!_vRegTestError\r
174         MOVW    AX, BC\r
175         CMPW    AX, #0x6666\r
176         BZ              $.+5\r
177         BR              !!_vRegTestError\r
178         MOVW    AX, DE\r
179         CMPW    AX, #0x7777\r
180         BZ              $.+5\r
181         BR              !!_vRegTestError\r
182         MOVW    AX, HL\r
183         CMPW    AX, #0x8888\r
184         BZ              $.+5\r
185         BR              !!_vRegTestError\r
186         MOVW    AX, #0x5555\r
187 \r
188 \r
189         SEL             RB3\r
190         CMPW    AX, #0xAAAA\r
191         BZ              $.+5\r
192         BR              !!_vRegTestError\r
193         MOVW    AX, BC\r
194         CMPW    AX, #0xBBBB\r
195         BZ              $.+5\r
196         BR              !!_vRegTestError\r
197         MOVW    AX, DE\r
198         CMPW    AX, #0xCCCC\r
199         BZ              $.+5\r
200         BR              !!_vRegTestError\r
201         MOVW    AX, HL\r
202         CMPW    AX, #0xDDDD\r
203         BZ              $.+5\r
204         BR              !!_vRegTestError\r
205         MOVW    AX, #0xAAAA\r
206 \r
207 \r
208         SEL     RB0\r
209 \r
210         /* Indicate that this task is still cycling. */\r
211         INCW    !_usRegTest1LoopCounter\r
212 \r
213         BR              !!_loop1\r
214 \r
215 \r
216 /*\r
217  * Fill all the registers with known values, then check that the registers\r
218  * contain the expected value.  An incorrect value being indicative of an\r
219  * error in the context switch mechanism.\r
220  */\r
221 _vRegTest2Task:\r
222 \r
223         SEL             RB0\r
224         MOVW    AX, #0x99aa\r
225         MOVW    BC, #0xbbcc\r
226         MOVW    DE, #0xddee\r
227         MOVW    HL, #0xff12\r
228         SEL             RB1\r
229         MOVW    AX, #0x0110\r
230         MOVW    BC, #0x0220\r
231         MOVW    DE, #0x0330\r
232         MOVW    HL, #0x0440\r
233         SEL             RB2\r
234         MOVW    AX, #0x0550\r
235         MOVW    BC, #0x0660\r
236         MOVW    DE, #0x0770\r
237         MOVW    HL, #0x0880\r
238         SEL             RB3\r
239         MOVW    AX, #0x0AA0\r
240         MOVW    BC, #0x0BB0\r
241         MOVW    DE, #0x0CC0\r
242         MOVW    HL, #0x0DD0\r
243         SEL             RB0\r
244 \r
245 _loop2:\r
246         CMPW    AX, #0x99aa\r
247         BZ              $.+5\r
248         BR              !!_vRegTestError\r
249         MOVW    AX, BC\r
250         CMPW    AX, #0xbbcc\r
251         BZ              $.+5\r
252         BR              !!_vRegTestError\r
253         MOVW    AX, DE\r
254         CMPW    AX, #0xddee\r
255         BZ              $.+5\r
256         BR              !!_vRegTestError\r
257         MOVW    AX, HL\r
258         CMPW    AX, #0xff12\r
259         BZ              $.+5\r
260         BR              !!_vRegTestError\r
261         MOVW    AX, #0x99aa\r
262 \r
263         SEL             RB1\r
264         CMPW    AX, #0x0110\r
265         BZ              $.+5\r
266         BR              !!_vRegTestError\r
267         MOVW    AX, BC\r
268         CMPW    AX, #0x0220\r
269         BZ              $.+5\r
270         BR              !!_vRegTestError\r
271         MOVW    AX, DE\r
272         CMPW    AX, #0x0330\r
273         BZ              $.+5\r
274         BR              !!_vRegTestError\r
275         MOVW    AX, HL\r
276         CMPW    AX, #0x0440\r
277         BZ              $.+5\r
278         BR              !!_vRegTestError\r
279         MOVW    AX, #0x0110\r
280 \r
281         SEL             RB2\r
282         CMPW    AX, #0x0550\r
283         BZ              $.+5\r
284         BR              !!_vRegTestError\r
285         MOVW    AX, BC\r
286         CMPW    AX, #0x0660\r
287         BZ              $.+5\r
288         BR              !!_vRegTestError\r
289         MOVW    AX, DE\r
290         CMPW    AX, #0x0770\r
291         BZ              $.+5\r
292         BR              !!_vRegTestError\r
293         MOVW    AX, HL\r
294         CMPW    AX, #0x0880\r
295         BZ              $.+5\r
296         BR              !!_vRegTestError\r
297         MOVW    AX, #0x0550\r
298 \r
299         SEL             RB3\r
300         CMPW    AX, #0x0AA0\r
301         BZ              $.+5\r
302         BR              !!_vRegTestError\r
303         MOVW    AX, BC\r
304         CMPW    AX, #0x0BB0\r
305         BZ              $.+5\r
306         BR              !!_vRegTestError\r
307         MOVW    AX, DE\r
308         CMPW    AX, #0x0CC0\r
309         BZ              $.+5\r
310         BR              !!_vRegTestError\r
311         MOVW    AX, HL\r
312         CMPW    AX, #0x0DD0\r
313         BZ              $.+5\r
314         BR              !!_vRegTestError\r
315         MOVW    AX, #0x0AA0\r
316 \r
317         SEL     RB0\r
318 \r
319         /* Indicate that this task is still cycling. */\r
320         INCW    !_usRegTest2LoopCounter\r
321 \r
322         BR              !!_loop2\r
323 \r
324         .end\r
325 \r