]> git.sur5r.net Git - freertos/blob - FreeRTOS/Demo/CORTEX_M4F_Infineon_XMC4500_IAR/RegTest.c
dd8eb1f91cdcd284b8acde35ea6c6d29722318a1
[freertos] / FreeRTOS / Demo / CORTEX_M4F_Infineon_XMC4500_IAR / RegTest.c
1 /*\r
2     FreeRTOS V7.2.0 - 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 \r
68 __asm vRegTest1Task( void )\r
69 {\r
70         PRESERVE8\r
71         IMPORT ulRegTest1LoopCounter\r
72 \r
73         /* Fill the core registers with known values. */\r
74         mov r0, #100\r
75         mov r1, #101\r
76         mov r2, #102\r
77         mov r3, #103\r
78         mov     r4, #104\r
79         mov     r5, #105\r
80         mov     r6, #106\r
81         mov r7, #107\r
82         mov     r8, #108\r
83         mov     r9, #109\r
84         mov     r10, #110\r
85         mov     r11, #111\r
86         mov r12, #112\r
87 \r
88         /* Fill the VFP registers with known values. */\r
89         vmov d0, r0, r1\r
90         vmov d1, r2, r3\r
91         vmov d2, r4, r5\r
92         vmov d3, r6, r7\r
93         vmov d4, r8, r9\r
94         vmov d5, r10, r11\r
95         vmov d6, r0, r1\r
96         vmov d7, r2, r3\r
97         vmov d8, r4, r5\r
98         vmov d9, r6, r7\r
99         vmov d10, r8, r9\r
100         vmov d11, r10, r11\r
101         vmov d12, r0, r1\r
102         vmov d13, r2, r3\r
103         vmov d14, r4, r5\r
104         vmov d15, r6, r7\r
105 \r
106 reg1_loop\r
107         /* Check all the VFP registers still contain the values set above.\r
108         First save registers that are clobbered by the test. */\r
109         push { r0-r1 }\r
110         \r
111         vmov r0, r1, d0\r
112         cmp r0, #100\r
113         bne reg1_error_loopf\r
114         cmp r1, #101\r
115         bne reg1_error_loopf\r
116         vmov r0, r1, d1\r
117         cmp r0, #102\r
118         bne reg1_error_loopf\r
119         cmp r1, #103\r
120         bne reg1_error_loopf\r
121         vmov r0, r1, d2\r
122         cmp r0, #104\r
123         bne reg1_error_loopf\r
124         cmp r1, #105\r
125         bne reg1_error_loopf\r
126         vmov r0, r1, d3\r
127         cmp r0, #106\r
128         bne reg1_error_loopf\r
129         cmp r1, #107\r
130         bne reg1_error_loopf\r
131         vmov r0, r1, d4\r
132         cmp r0, #108\r
133         bne reg1_error_loopf\r
134         cmp r1, #109\r
135         bne reg1_error_loopf\r
136         vmov r0, r1, d5\r
137         cmp r0, #110\r
138         bne reg1_error_loopf\r
139         cmp r1, #111\r
140         bne reg1_error_loopf\r
141         vmov r0, r1, d6\r
142         cmp r0, #100\r
143         bne reg1_error_loopf\r
144         cmp r1, #101\r
145         bne reg1_error_loopf\r
146         vmov r0, r1, d7\r
147         cmp r0, #102\r
148         bne reg1_error_loopf\r
149         cmp r1, #103\r
150         bne reg1_error_loopf\r
151         vmov r0, r1, d8\r
152         cmp r0, #104\r
153         bne reg1_error_loopf\r
154         cmp r1, #105\r
155         bne reg1_error_loopf\r
156         vmov r0, r1, d9\r
157         cmp r0, #106\r
158         bne reg1_error_loopf\r
159         cmp r1, #107\r
160         bne reg1_error_loopf\r
161         vmov r0, r1, d10\r
162         cmp r0, #108\r
163         bne reg1_error_loopf\r
164         cmp r1, #109\r
165         bne reg1_error_loopf\r
166         vmov r0, r1, d11\r
167         cmp r0, #110\r
168         bne reg1_error_loopf\r
169         cmp r1, #111\r
170         bne reg1_error_loopf\r
171         vmov r0, r1, d12\r
172         cmp r0, #100\r
173         bne reg1_error_loopf\r
174         cmp r1, #101\r
175         bne reg1_error_loopf\r
176         vmov r0, r1, d13\r
177         cmp r0, #102\r
178         bne reg1_error_loopf\r
179         cmp r1, #103\r
180         bne reg1_error_loopf\r
181         vmov r0, r1, d14\r
182         cmp r0, #104\r
183         bne reg1_error_loopf\r
184         cmp r1, #105\r
185         bne reg1_error_loopf\r
186         vmov r0, r1, d15\r
187         cmp r0, #106\r
188         bne reg1_error_loopf\r
189         cmp r1, #107\r
190         bne reg1_error_loopf\r
191         \r
192         /* Restore the registers that were clobbered by the test. */\r
193         pop {r0-r1}\r
194         \r
195         /* VFP register test passed.  Jump to the core register test. */\r
196         b reg1_loopf_pass\r
197 \r
198 reg1_error_loopf\r
199         /* If this line is hit then a VFP register value was found to be\r
200         incorrect. */\r
201         b reg1_error_loopf\r
202 \r
203 reg1_loopf_pass\r
204 \r
205         cmp     r0, #100\r
206         bne     reg1_error_loop\r
207         cmp     r1, #101\r
208         bne     reg1_error_loop\r
209         cmp     r2, #102\r
210         bne     reg1_error_loop\r
211         cmp r3, #103\r
212         bne     reg1_error_loop\r
213         cmp     r4, #104\r
214         bne     reg1_error_loop\r
215         cmp     r5, #105\r
216         bne     reg1_error_loop\r
217         cmp     r6, #106\r
218         bne     reg1_error_loop\r
219         cmp     r7, #107\r
220         bne     reg1_error_loop\r
221         cmp     r8, #108\r
222         bne     reg1_error_loop\r
223         cmp     r9, #109\r
224         bne     reg1_error_loop\r
225         cmp     r10, #110\r
226         bne     reg1_error_loop\r
227         cmp     r11, #111\r
228         bne     reg1_error_loop\r
229         cmp     r12, #112\r
230         bne     reg1_error_loop\r
231         \r
232         /* Everything passed, increment the loop counter. */\r
233         push { r0-r1 }\r
234         ldr     r0, =ulRegTest1LoopCounter\r
235         ldr r1, [r0]\r
236         adds r1, r1, #1\r
237         str r1, [r0]\r
238         pop { r0-r1 }\r
239         \r
240         /* Start again. */\r
241         b reg1_loop\r
242 \r
243 reg1_error_loop\r
244         /* If this line is hit then there was an error in a core register value.\r
245         The loop ensures the loop counter stops incrementing. */\r
246         b reg1_error_loop\r
247         nop\r
248 }\r
249 /*-----------------------------------------------------------*/\r
250 \r
251 __asm vRegTest2Task( void )\r
252 {\r
253         PRESERVE8\r
254         IMPORT ulRegTest2LoopCounter\r
255 \r
256         /* Set all the core registers to known values. */\r
257         mov r0, #-1\r
258         mov r1, #1\r
259         mov r2, #2\r
260         mov r3, #3\r
261         mov     r4, #4\r
262         mov     r5, #5\r
263         mov     r6, #6\r
264         mov r7, #7\r
265         mov     r8, #8\r
266         mov     r9, #9\r
267         mov     r10, #10\r
268         mov     r11, #11\r
269         mov r12, #12\r
270 \r
271         /* Set all the VFP to known values. */\r
272         vmov d0, r0, r1\r
273         vmov d1, r2, r3\r
274         vmov d2, r4, r5\r
275         vmov d3, r6, r7\r
276         vmov d4, r8, r9\r
277         vmov d5, r10, r11\r
278         vmov d6, r0, r1\r
279         vmov d7, r2, r3\r
280         vmov d8, r4, r5\r
281         vmov d9, r6, r7\r
282         vmov d10, r8, r9\r
283         vmov d11, r10, r11\r
284         vmov d12, r0, r1\r
285         vmov d13, r2, r3\r
286         vmov d14, r4, r5\r
287         vmov d15, r6, r7\r
288 \r
289 reg2_loop\r
290         \r
291         /* Check all the VFP registers still contain the values set above.\r
292         First save registers that are clobbered by the test. */\r
293         push { r0-r1 }\r
294         \r
295         vmov r0, r1, d0\r
296         cmp r0, #-1\r
297         bne reg2_error_loopf\r
298         cmp r1, #1\r
299         bne reg2_error_loopf\r
300         vmov r0, r1, d1\r
301         cmp r0, #2\r
302         bne reg2_error_loopf\r
303         cmp r1, #3\r
304         bne reg2_error_loopf\r
305         vmov r0, r1, d2\r
306         cmp r0, #4\r
307         bne reg2_error_loopf\r
308         cmp r1, #5\r
309         bne reg2_error_loopf\r
310         vmov r0, r1, d3\r
311         cmp r0, #6\r
312         bne reg2_error_loopf\r
313         cmp r1, #7\r
314         bne reg2_error_loopf\r
315         vmov r0, r1, d4\r
316         cmp r0, #8\r
317         bne reg2_error_loopf\r
318         cmp r1, #9\r
319         bne reg2_error_loopf\r
320         vmov r0, r1, d5\r
321         cmp r0, #10\r
322         bne reg2_error_loopf\r
323         cmp r1, #11\r
324         bne reg2_error_loopf\r
325         vmov r0, r1, d6\r
326         cmp r0, #-1\r
327         bne reg2_error_loopf\r
328         cmp r1, #1\r
329         bne reg2_error_loopf\r
330         vmov r0, r1, d7\r
331         cmp r0, #2\r
332         bne reg2_error_loopf\r
333         cmp r1, #3\r
334         bne reg2_error_loopf\r
335         vmov r0, r1, d8\r
336         cmp r0, #4\r
337         bne reg2_error_loopf\r
338         cmp r1, #5\r
339         bne reg2_error_loopf\r
340         vmov r0, r1, d9\r
341         cmp r0, #6\r
342         bne reg2_error_loopf\r
343         cmp r1, #7\r
344         bne reg2_error_loopf\r
345         vmov r0, r1, d10\r
346         cmp r0, #8\r
347         bne reg2_error_loopf\r
348         cmp r1, #9\r
349         bne reg2_error_loopf\r
350         vmov r0, r1, d11\r
351         cmp r0, #10\r
352         bne reg2_error_loopf\r
353         cmp r1, #11\r
354         bne reg2_error_loopf\r
355         vmov r0, r1, d12\r
356         cmp r0, #-1\r
357         bne reg2_error_loopf\r
358         cmp r1, #1\r
359         bne reg2_error_loopf\r
360         vmov r0, r1, d13\r
361         cmp r0, #2\r
362         bne reg2_error_loopf\r
363         cmp r1, #3\r
364         bne reg2_error_loopf\r
365         vmov r0, r1, d14\r
366         cmp r0, #4\r
367         bne reg2_error_loopf\r
368         cmp r1, #5\r
369         bne reg2_error_loopf\r
370         vmov r0, r1, d15\r
371         cmp r0, #6\r
372         bne reg2_error_loopf\r
373         cmp r1, #7\r
374         bne reg2_error_loopf\r
375         \r
376         /* Restore the registers that were clobbered by the test. */\r
377         pop {r0-r1}\r
378         \r
379         /* VFP register test passed.  Jump to the core register test. */\r
380         b reg2_loopf_pass\r
381 \r
382 reg2_error_loopf\r
383         /* If this line is hit then a VFP register value was found to be\r
384         incorrect. */\r
385         b reg2_error_loopf\r
386 \r
387 reg2_loopf_pass\r
388 \r
389         cmp     r0, #-1\r
390         bne     reg2_error_loop\r
391         cmp     r1, #1\r
392         bne     reg2_error_loop\r
393         cmp     r2, #2\r
394         bne     reg2_error_loop\r
395         cmp r3, #3\r
396         bne     reg2_error_loop\r
397         cmp     r4, #4\r
398         bne     reg2_error_loop\r
399         cmp     r5, #5\r
400         bne     reg2_error_loop\r
401         cmp     r6, #6\r
402         bne     reg2_error_loop\r
403         cmp     r7, #7\r
404         bne     reg2_error_loop\r
405         cmp     r8, #8\r
406         bne     reg2_error_loop\r
407         cmp     r9, #9\r
408         bne     reg2_error_loop\r
409         cmp     r10, #10\r
410         bne     reg2_error_loop\r
411         cmp     r11, #11\r
412         bne     reg2_error_loop\r
413         cmp     r12, #12\r
414         bne     reg2_error_loop\r
415         \r
416         /* Increment the loop counter to indicate this test is still functioning\r
417         correctly. */\r
418         push { r0-r1 }\r
419         ldr     r0, =ulRegTest2LoopCounter\r
420         ldr r1, [r0]\r
421         adds r1, r1, #1\r
422         str r1, [r0]\r
423         pop { r0-r1 }\r
424         \r
425         /* Start again. */\r
426         b reg2_loop\r
427 \r
428 reg2_error_loop\r
429         /* If this line is hit then there was an error in a core register value.\r
430         This loop ensures the loop counter variable stops incrementing. */\r
431         b reg2_error_loop\r
432         nop\r
433 }\r
434 /*-----------------------------------------------------------*/\r
435 \r
436 __asm vRegTestClearFlopRegistersToParameterValue( unsigned long ulValue )\r
437 {\r
438         PRESERVE8\r
439 \r
440         /* Clobber the auto saved registers. */\r
441         vmov d0, r0, r0\r
442         vmov d1, r0, r0\r
443         vmov d2, r0, r0\r
444         vmov d3, r0, r0\r
445         vmov d4, r0, r0\r
446         vmov d5, r0, r0\r
447         vmov d6, r0, r0\r
448         vmov d7, r0, r0\r
449         bx lr\r
450 }\r
451 /*-----------------------------------------------------------*/\r
452 \r
453 __asm ulRegTestCheckFlopRegistersContainParameterValue( unsigned long ulValue )\r
454 {\r
455         PRESERVE8\r
456 \r
457         vmov r1, s0\r
458         cmp r0, r1\r
459         bne return_error\r
460         vmov r1, s1\r
461         cmp r0, r1\r
462         bne return_error\r
463         vmov r1, s2\r
464         cmp r0, r1\r
465         bne return_error\r
466         vmov r1, s3\r
467         cmp r0, r1\r
468         bne return_error\r
469         vmov r1, s4\r
470         cmp r0, r1\r
471         bne return_error\r
472         vmov r1, s5\r
473         cmp r0, r1\r
474         bne return_error\r
475         vmov r1, s6\r
476         cmp r0, r1\r
477         bne return_error\r
478         vmov r1, s7\r
479         cmp r0, r1\r
480         bne return_error\r
481         vmov r1, s8\r
482         cmp r0, r1\r
483         bne return_error\r
484         vmov r1, s9\r
485         cmp r0, r1\r
486         bne return_error\r
487         vmov r1, s10\r
488         cmp r0, r1\r
489         bne return_error\r
490         vmov r1, s11\r
491         cmp r0, r1\r
492         bne return_error\r
493         vmov r1, s12\r
494         cmp r0, r1\r
495         bne return_error\r
496         vmov r1, s13\r
497         cmp r0, r1\r
498         bne return_error\r
499         vmov r1, s14\r
500         cmp r0, r1\r
501         bne return_error\r
502         vmov r1, s15\r
503         cmp r0, r1\r
504         bne return_error\r
505         \r
506 return_pass\r
507         mov r0, #1\r
508         bx lr\r
509 \r
510 return_error\r
511         mov r0, #0\r
512         bx lr\r
513 }\r
514 \r
515         \r