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