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