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