]> git.sur5r.net Git - freertos/blob - FreeRTOS/Demo/CORTEX_M4F_STM32F407ZG-SK/RegTest.s
9661b76d8420c49a5aaf508bad0d931389c98a93
[freertos] / FreeRTOS / Demo / CORTEX_M4F_STM32F407ZG-SK / RegTest.s
1 /*\r
2     FreeRTOS V7.3.0 - Copyright (C) 2012 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     >>>NOTE<<< The modification to the GPL is included to allow you to\r
33     distribute a combined work that includes FreeRTOS without being obliged to\r
34     provide the source code for proprietary components outside of the FreeRTOS\r
35     kernel.  FreeRTOS is distributed in the hope that it will be useful, but\r
36     WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\r
37     or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for\r
38     more details. You should have received a copy of the GNU General Public\r
39     License and the FreeRTOS license exception along with FreeRTOS; if not it\r
40     can be viewed here: http://www.freertos.org/a00114.html and also obtained\r
41     by writing to Richard Barry, contact details for whom are available on the\r
42     FreeRTOS WEB site.\r
43 \r
44     1 tab == 4 spaces!\r
45     \r
46     ***************************************************************************\r
47      *                                                                       *\r
48      *    Having a problem?  Start by reading the FAQ "My application does   *\r
49      *    not run, what could be wrong?"                                     *\r
50      *                                                                       *\r
51      *    http://www.FreeRTOS.org/FAQHelp.html                               *\r
52      *                                                                       *\r
53     ***************************************************************************\r
54 \r
55     \r
56     http://www.FreeRTOS.org - Documentation, training, latest versions, license \r
57     and contact details.  \r
58     \r
59     http://www.FreeRTOS.org/plus - A selection of FreeRTOS ecosystem products,\r
60     including FreeRTOS+Trace - an indispensable productivity tool.\r
61 \r
62     Real Time Engineers ltd license FreeRTOS to High Integrity Systems, who sell \r
63     the code with commercial support, indemnification, and middleware, under \r
64     the OpenRTOS brand: http://www.OpenRTOS.com.  High Integrity Systems also\r
65     provide a safety engineered and independently SIL3 certified version under \r
66     the SafeRTOS brand: http://www.SafeRTOS.com.\r
67 */\r
68 \r
69 #include <FreeRTOSConfig.h>\r
70 \r
71 \r
72         RSEG    CODE:CODE(2)\r
73         thumb\r
74 \r
75         EXTERN ulRegTest1LoopCounter\r
76         EXTERN ulRegTest2LoopCounter\r
77 \r
78         PUBLIC vRegTest1Task\r
79         PUBLIC vRegTest2Task\r
80         PUBLIC vRegTestClearFlopRegistersToParameterValue\r
81         PUBLIC ulRegTestCheckFlopRegistersContainParameterValue\r
82         \r
83 /*-----------------------------------------------------------*/\r
84 \r
85 vRegTest1Task\r
86 \r
87         /* Fill the core registers with known values. */\r
88         mov r0, #100\r
89         mov r1, #101\r
90         mov r2, #102\r
91         mov r3, #103\r
92         mov     r4, #104\r
93         mov     r5, #105\r
94         mov     r6, #106\r
95         mov r7, #107\r
96         mov     r8, #108\r
97         mov     r9, #109\r
98         mov     r10, #110\r
99         mov     r11, #111\r
100         mov r12, #112\r
101 \r
102         /* Fill the VFP registers with known values. */\r
103         vmov d0, r0, r1\r
104         vmov d1, r2, r3\r
105         vmov d2, r4, r5\r
106         vmov d3, r6, r7\r
107         vmov d4, r8, r9\r
108         vmov d5, r10, r11\r
109         vmov d6, r0, r1\r
110         vmov d7, r2, r3\r
111         vmov d8, r4, r5\r
112         vmov d9, r6, r7\r
113         vmov d10, r8, r9\r
114         vmov d11, r10, r11\r
115         vmov d12, r0, r1\r
116         vmov d13, r2, r3\r
117         vmov d14, r4, r5\r
118         vmov d15, r6, r7\r
119 \r
120 reg1_loop:\r
121         /* Check all the VFP registers still contain the values set above.\r
122         First save registers that are clobbered by the test. */\r
123         push { r0-r1 }\r
124         \r
125         vmov r0, r1, d0\r
126         cmp r0, #100\r
127         bne reg1_error_loopf\r
128         cmp r1, #101\r
129         bne reg1_error_loopf\r
130         vmov r0, r1, d1\r
131         cmp r0, #102\r
132         bne reg1_error_loopf\r
133         cmp r1, #103\r
134         bne reg1_error_loopf\r
135         vmov r0, r1, d2\r
136         cmp r0, #104\r
137         bne reg1_error_loopf\r
138         cmp r1, #105\r
139         bne reg1_error_loopf\r
140         vmov r0, r1, d3\r
141         cmp r0, #106\r
142         bne reg1_error_loopf\r
143         cmp r1, #107\r
144         bne reg1_error_loopf\r
145         vmov r0, r1, d4\r
146         cmp r0, #108\r
147         bne reg1_error_loopf\r
148         cmp r1, #109\r
149         bne reg1_error_loopf\r
150         vmov r0, r1, d5\r
151         cmp r0, #110\r
152         bne reg1_error_loopf\r
153         cmp r1, #111\r
154         bne reg1_error_loopf\r
155         vmov r0, r1, d6\r
156         cmp r0, #100\r
157         bne reg1_error_loopf\r
158         cmp r1, #101\r
159         bne reg1_error_loopf\r
160         vmov r0, r1, d7\r
161         cmp r0, #102\r
162         bne reg1_error_loopf\r
163         cmp r1, #103\r
164         bne reg1_error_loopf\r
165         vmov r0, r1, d8\r
166         cmp r0, #104\r
167         bne reg1_error_loopf\r
168         cmp r1, #105\r
169         bne reg1_error_loopf\r
170         vmov r0, r1, d9\r
171         cmp r0, #106\r
172         bne reg1_error_loopf\r
173         cmp r1, #107\r
174         bne reg1_error_loopf\r
175         vmov r0, r1, d10\r
176         cmp r0, #108\r
177         bne reg1_error_loopf\r
178         cmp r1, #109\r
179         bne reg1_error_loopf\r
180         vmov r0, r1, d11\r
181         cmp r0, #110\r
182         bne reg1_error_loopf\r
183         cmp r1, #111\r
184         bne reg1_error_loopf\r
185         vmov r0, r1, d12\r
186         cmp r0, #100\r
187         bne reg1_error_loopf\r
188         cmp r1, #101\r
189         bne reg1_error_loopf\r
190         vmov r0, r1, d13\r
191         cmp r0, #102\r
192         bne reg1_error_loopf\r
193         cmp r1, #103\r
194         bne reg1_error_loopf\r
195         vmov r0, r1, d14\r
196         cmp r0, #104\r
197         bne reg1_error_loopf\r
198         cmp r1, #105\r
199         bne reg1_error_loopf\r
200         vmov r0, r1, d15\r
201         cmp r0, #106\r
202         bne reg1_error_loopf\r
203         cmp r1, #107\r
204         bne reg1_error_loopf\r
205         \r
206         /* Restore the registers that were clobbered by the test. */\r
207         pop {r0-r1}\r
208         \r
209         /* VFP register test passed.  Jump to the core register test. */\r
210         b reg1_loopf_pass\r
211 \r
212 reg1_error_loopf\r
213         /* If this line is hit then a VFP register value was found to be\r
214         incorrect. */\r
215         b reg1_error_loopf\r
216 \r
217 reg1_loopf_pass\r
218 \r
219         cmp     r0, #100\r
220         bne     reg1_error_loop\r
221         cmp     r1, #101\r
222         bne     reg1_error_loop\r
223         cmp     r2, #102\r
224         bne     reg1_error_loop\r
225         cmp r3, #103\r
226         bne     reg1_error_loop\r
227         cmp     r4, #104\r
228         bne     reg1_error_loop\r
229         cmp     r5, #105\r
230         bne     reg1_error_loop\r
231         cmp     r6, #106\r
232         bne     reg1_error_loop\r
233         cmp     r7, #107\r
234         bne     reg1_error_loop\r
235         cmp     r8, #108\r
236         bne     reg1_error_loop\r
237         cmp     r9, #109\r
238         bne     reg1_error_loop\r
239         cmp     r10, #110\r
240         bne     reg1_error_loop\r
241         cmp     r11, #111\r
242         bne     reg1_error_loop\r
243         cmp     r12, #112\r
244         bne     reg1_error_loop\r
245         \r
246         /* Everything passed, increment the loop counter. */\r
247         push { r0-r1 }\r
248         ldr     r0, =ulRegTest1LoopCounter\r
249         ldr r1, [r0]\r
250         adds r1, r1, #1\r
251         str r1, [r0]\r
252         pop { r0-r1 }\r
253         \r
254         /* Start again. */\r
255         b reg1_loop\r
256 \r
257 reg1_error_loop:\r
258         /* If this line is hit then there was an error in a core register value.\r
259         The loop ensures the loop counter stops incrementing. */\r
260         b reg1_error_loop\r
261 \r
262 /*-----------------------------------------------------------*/\r
263 \r
264 \r
265 vRegTest2Task\r
266 \r
267         /* Set all the core registers to known values. */\r
268         mov r0, #-1\r
269         mov r1, #1\r
270         mov r2, #2\r
271         mov r3, #3\r
272         mov     r4, #4\r
273         mov     r5, #5\r
274         mov     r6, #6\r
275         mov r7, #7\r
276         mov     r8, #8\r
277         mov     r9, #9\r
278         mov     r10, #10\r
279         mov     r11, #11\r
280         mov r12, #12\r
281 \r
282         /* Set all the VFP to known values. */\r
283         vmov d0, r0, r1\r
284         vmov d1, r2, r3\r
285         vmov d2, r4, r5\r
286         vmov d3, r6, r7\r
287         vmov d4, r8, r9\r
288         vmov d5, r10, r11\r
289         vmov d6, r0, r1\r
290         vmov d7, r2, r3\r
291         vmov d8, r4, r5\r
292         vmov d9, r6, r7\r
293         vmov d10, r8, r9\r
294         vmov d11, r10, r11\r
295         vmov d12, r0, r1\r
296         vmov d13, r2, r3\r
297         vmov d14, r4, r5\r
298         vmov d15, r6, r7\r
299 \r
300 reg2_loop:\r
301         \r
302         /* Check all the VFP registers still contain the values set above.\r
303         First save registers that are clobbered by the test. */\r
304         push { r0-r1 }\r
305         \r
306         vmov r0, r1, d0\r
307         cmp r0, #-1\r
308         bne reg2_error_loopf\r
309         cmp r1, #1\r
310         bne reg2_error_loopf\r
311         vmov r0, r1, d1\r
312         cmp r0, #2\r
313         bne reg2_error_loopf\r
314         cmp r1, #3\r
315         bne reg2_error_loopf\r
316         vmov r0, r1, d2\r
317         cmp r0, #4\r
318         bne reg2_error_loopf\r
319         cmp r1, #5\r
320         bne reg2_error_loopf\r
321         vmov r0, r1, d3\r
322         cmp r0, #6\r
323         bne reg2_error_loopf\r
324         cmp r1, #7\r
325         bne reg2_error_loopf\r
326         vmov r0, r1, d4\r
327         cmp r0, #8\r
328         bne reg2_error_loopf\r
329         cmp r1, #9\r
330         bne reg2_error_loopf\r
331         vmov r0, r1, d5\r
332         cmp r0, #10\r
333         bne reg2_error_loopf\r
334         cmp r1, #11\r
335         bne reg2_error_loopf\r
336         vmov r0, r1, d6\r
337         cmp r0, #-1\r
338         bne reg2_error_loopf\r
339         cmp r1, #1\r
340         bne reg2_error_loopf\r
341         vmov r0, r1, d7\r
342         cmp r0, #2\r
343         bne reg2_error_loopf\r
344         cmp r1, #3\r
345         bne reg2_error_loopf\r
346         vmov r0, r1, d8\r
347         cmp r0, #4\r
348         bne reg2_error_loopf\r
349         cmp r1, #5\r
350         bne reg2_error_loopf\r
351         vmov r0, r1, d9\r
352         cmp r0, #6\r
353         bne reg2_error_loopf\r
354         cmp r1, #7\r
355         bne reg2_error_loopf\r
356         vmov r0, r1, d10\r
357         cmp r0, #8\r
358         bne reg2_error_loopf\r
359         cmp r1, #9\r
360         bne reg2_error_loopf\r
361         vmov r0, r1, d11\r
362         cmp r0, #10\r
363         bne reg2_error_loopf\r
364         cmp r1, #11\r
365         bne reg2_error_loopf\r
366         vmov r0, r1, d12\r
367         cmp r0, #-1\r
368         bne reg2_error_loopf\r
369         cmp r1, #1\r
370         bne reg2_error_loopf\r
371         vmov r0, r1, d13\r
372         cmp r0, #2\r
373         bne reg2_error_loopf\r
374         cmp r1, #3\r
375         bne reg2_error_loopf\r
376         vmov r0, r1, d14\r
377         cmp r0, #4\r
378         bne reg2_error_loopf\r
379         cmp r1, #5\r
380         bne reg2_error_loopf\r
381         vmov r0, r1, d15\r
382         cmp r0, #6\r
383         bne reg2_error_loopf\r
384         cmp r1, #7\r
385         bne reg2_error_loopf\r
386         \r
387         /* Restore the registers that were clobbered by the test. */\r
388         pop {r0-r1}\r
389         \r
390         /* VFP register test passed.  Jump to the core register test. */\r
391         b reg2_loopf_pass\r
392 \r
393 reg2_error_loopf\r
394         /* If this line is hit then a VFP register value was found to be\r
395         incorrect. */\r
396         b reg2_error_loopf\r
397 \r
398 reg2_loopf_pass\r
399 \r
400         cmp     r0, #-1\r
401         bne     reg2_error_loop\r
402         cmp     r1, #1\r
403         bne     reg2_error_loop\r
404         cmp     r2, #2\r
405         bne     reg2_error_loop\r
406         cmp r3, #3\r
407         bne     reg2_error_loop\r
408         cmp     r4, #4\r
409         bne     reg2_error_loop\r
410         cmp     r5, #5\r
411         bne     reg2_error_loop\r
412         cmp     r6, #6\r
413         bne     reg2_error_loop\r
414         cmp     r7, #7\r
415         bne     reg2_error_loop\r
416         cmp     r8, #8\r
417         bne     reg2_error_loop\r
418         cmp     r9, #9\r
419         bne     reg2_error_loop\r
420         cmp     r10, #10\r
421         bne     reg2_error_loop\r
422         cmp     r11, #11\r
423         bne     reg2_error_loop\r
424         cmp     r12, #12\r
425         bne     reg2_error_loop\r
426         \r
427         /* Increment the loop counter to indicate this test is still functioning\r
428         correctly. */\r
429         push { r0-r1 }\r
430         ldr     r0, =ulRegTest2LoopCounter\r
431         ldr r1, [r0]\r
432         adds r1, r1, #1\r
433         str r1, [r0]\r
434         pop { r0-r1 }\r
435         \r
436         /* Start again. */\r
437         b reg2_loop\r
438 \r
439 reg2_error_loop:\r
440         /* If this line is hit then there was an error in a core register value.\r
441         This loop ensures the loop counter variable stops incrementing. */\r
442         b reg2_error_loop\r
443 \r
444 /*-----------------------------------------------------------*/\r
445 \r
446 vRegTestClearFlopRegistersToParameterValue\r
447 \r
448         /* Clobber the auto saved registers. */\r
449         vmov d0, r0, r0\r
450         vmov d1, r0, r0\r
451         vmov d2, r0, r0\r
452         vmov d3, r0, r0\r
453         vmov d4, r0, r0\r
454         vmov d5, r0, r0\r
455         vmov d6, r0, r0\r
456         vmov d7, r0, r0\r
457         bx lr\r
458 \r
459 /*-----------------------------------------------------------*/\r
460 \r
461 ulRegTestCheckFlopRegistersContainParameterValue\r
462 \r
463         vmov r1, s0\r
464         cmp r0, r1\r
465         bne return_error\r
466         vmov r1, s1\r
467         cmp r0, r1\r
468         bne return_error\r
469         vmov r1, s2\r
470         cmp r0, r1\r
471         bne return_error\r
472         vmov r1, s3\r
473         cmp r0, r1\r
474         bne return_error\r
475         vmov r1, s4\r
476         cmp r0, r1\r
477         bne return_error\r
478         vmov r1, s5\r
479         cmp r0, r1\r
480         bne return_error\r
481         vmov r1, s6\r
482         cmp r0, r1\r
483         bne return_error\r
484         vmov r1, s7\r
485         cmp r0, r1\r
486         bne return_error\r
487         vmov r1, s8\r
488         cmp r0, r1\r
489         bne return_error\r
490         vmov r1, s9\r
491         cmp r0, r1\r
492         bne return_error\r
493         vmov r1, s10\r
494         cmp r0, r1\r
495         bne return_error\r
496         vmov r1, s11\r
497         cmp r0, r1\r
498         bne return_error\r
499         vmov r1, s12\r
500         cmp r0, r1\r
501         bne return_error\r
502         vmov r1, s13\r
503         cmp r0, r1\r
504         bne return_error\r
505         vmov r1, s14\r
506         cmp r0, r1\r
507         bne return_error\r
508         vmov r1, s15\r
509         cmp r0, r1\r
510         bne return_error\r
511         \r
512 return_pass\r
513         mov r0, #1\r
514         bx lr\r
515 \r
516 return_error\r
517         mov r0, #0\r
518         bx lr\r
519 \r
520         END\r
521         \r