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