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