]> git.sur5r.net Git - freertos/blob - FreeRTOS/Demo/PIC32MZ_MPLAB/RegisterTestTasks.S
Update version numbers in preparation for new release.
[freertos] / FreeRTOS / Demo / PIC32MZ_MPLAB / RegisterTestTasks.S
1 /*\r
2     FreeRTOS V8.2.2 - 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 \r
71 #include <xc.h>\r
72 #include <sys/asm.h>\r
73 \r
74         .set    nomips16\r
75         .set    noreorder\r
76 \r
77 \r
78         .global vRegTest1\r
79         .global vRegTest2\r
80 \r
81         .set    noreorder\r
82         .set    noat\r
83         .ent    error_loop\r
84 \r
85 /* Reg test tasks call the error loop when they find an error.  Sitting in the\r
86 tight error loop prevents them incrementing their ulRegTestnCycles counter, and\r
87 so allows the check softwate timer to know an error has been found. */\r
88 error_loop:\r
89         b               .\r
90         nop\r
91 \r
92         .end error_loop\r
93 \r
94 \r
95         .set    noreorder\r
96         .set    noat\r
97         .ent    vRegTest1\r
98 \r
99 vRegTest1:\r
100         /* Fill the registers with known values. */\r
101         addiu   $1, $0, 0x11\r
102         addiu   $2, $0, 0x12\r
103         addiu   $3, $0, 0x13\r
104         /* $4 contains the address of the loop counter - don't mess with $4. */\r
105         addiu   $5, $0, 0x15\r
106         addiu   $6, $0, 0x16\r
107         addiu   $7, $0, 0x17\r
108         addiu   $8, $0, 0x18\r
109         addiu   $9, $0, 0x19\r
110         addiu   $10, $0, 0x110\r
111         addiu   $11, $0, 0x111\r
112         addiu   $12, $0, 0x112\r
113         addiu   $13, $0, 0x113\r
114         addiu   $14, $0, 0x114\r
115         addiu   $15, $0, 0x115\r
116         addiu   $16, $0, 0x116\r
117         addiu   $17, $0, 0x117\r
118         addiu   $18, $0, 0x118\r
119         addiu   $19, $0, 0x119\r
120         addiu   $20, $0, 0x120\r
121         addiu   $21, $0, 0x121\r
122         addiu   $23, $0, 0x123\r
123         addiu   $24, $0, 0x124\r
124         addiu   $25, $0, 0x125\r
125         addiu   $30, $0, 0x130\r
126         addiu   $22, $0, 0x131\r
127         mthi    $22, $ac1\r
128         addiu   $22, $0, 0x132\r
129         mtlo    $22, $ac1\r
130         addiu   $22, $0, 0x133\r
131         mthi    $22, $ac2\r
132         addiu   $22, $0, 0x134\r
133         mtlo    $22, $ac2\r
134         addiu   $22, $0, 0x135\r
135         mthi    $22, $ac3\r
136         addiu   $22, $0, 0x136\r
137         mtlo    $22, $ac3\r
138 \r
139 vRegTest1Loop:\r
140         /* Check each register maintains the value assigned to it for the lifetime\r
141         of the task. */\r
142         addiu   $22, $0, 0x00\r
143         addiu   $22, $1, -0x11\r
144         beq             $22, $0, .+16\r
145         nop\r
146         /* The register value was not that expected.  Jump to the error loop so the\r
147         cycle counter stops incrementing. */\r
148         b               error_loop\r
149         nop\r
150 \r
151         addiu   $22, $0, 0x00\r
152         addiu   $22, $2, -0x12\r
153         beq             $22, $0, .+16\r
154         nop\r
155         b               error_loop\r
156         nop\r
157 \r
158         addiu   $22, $0, 0x00\r
159         addiu   $22, $3, -0x13\r
160         beq             $22, $0, .+16\r
161         nop\r
162         b               error_loop\r
163         nop\r
164 \r
165         addiu   $22, $0, 0x00\r
166         addiu   $22, $5, -0x15\r
167         beq             $22, $0, .+16\r
168         nop\r
169         b               error_loop\r
170         nop\r
171 \r
172         addiu   $22, $0, 0x00\r
173         addiu   $22, $6, -0x16\r
174         beq             $22, $0, .+16\r
175         nop\r
176         b               error_loop\r
177         nop\r
178 \r
179         addiu   $22, $0, 0x00\r
180         addiu   $22, $7, -0x17\r
181         beq             $22, $0, .+16\r
182         nop\r
183         b               error_loop\r
184         nop\r
185 \r
186         addiu   $22, $0, 0x00\r
187         addiu   $22, $8, -0x18\r
188         beq             $22, $0, .+16\r
189         nop\r
190         b               error_loop\r
191         nop\r
192 \r
193         addiu   $22, $0, 0x00\r
194         addiu   $22, $9, -0x19\r
195         beq             $22, $0, .+16\r
196         nop\r
197         b               error_loop\r
198         nop\r
199 \r
200         addiu   $22, $0, 0x00\r
201         addiu   $22, $10, -0x110\r
202         beq             $22, $0, .+16\r
203         nop\r
204         b               error_loop\r
205         nop\r
206 \r
207         addiu   $22, $0, 0x00\r
208         addiu   $22, $11, -0x111\r
209         beq             $22, $0, .+16\r
210         nop\r
211         b               error_loop\r
212         nop\r
213 \r
214         addiu   $22, $0, 0x00\r
215         addiu   $22, $12, -0x112\r
216         beq             $22, $0, .+16\r
217         nop\r
218         b               error_loop\r
219         nop\r
220 \r
221         addiu   $22, $0, 0x00\r
222         addiu   $22, $13, -0x113\r
223         beq             $22, $0, .+16\r
224         nop\r
225         b               error_loop\r
226         nop\r
227 \r
228         addiu   $22, $0, 0x00\r
229         addiu   $22, $14, -0x114\r
230         beq             $22, $0, .+16\r
231         nop\r
232         b               error_loop\r
233         nop\r
234 \r
235         addiu   $22, $0, 0x00\r
236         addiu   $22, $15, -0x115\r
237         beq             $22, $0, .+16\r
238         nop\r
239         b               error_loop\r
240         nop\r
241 \r
242         addiu   $22, $0, 0x00\r
243         addiu   $22, $16, -0x116\r
244         beq             $22, $0, .+16\r
245         nop\r
246         b               error_loop\r
247         nop\r
248 \r
249         addiu   $22, $0, 0x00\r
250         addiu   $22, $17, -0x117\r
251         beq             $22, $0, .+16\r
252         nop\r
253         b               error_loop\r
254         nop\r
255 \r
256         addiu   $22, $0, 0x00\r
257         addiu   $22, $18, -0x118\r
258         beq             $22, $0, .+16\r
259         nop\r
260         b               error_loop\r
261         nop\r
262 \r
263         addiu   $22, $0, 0x00\r
264         addiu   $22, $19, -0x119\r
265         beq             $22, $0, .+16\r
266         nop\r
267         b               error_loop\r
268         nop\r
269 \r
270         addiu   $22, $0, 0x00\r
271         addiu   $22, $20, -0x120\r
272         beq             $22, $0, .+16\r
273         nop\r
274         b               error_loop\r
275         nop\r
276 \r
277         addiu   $22, $0, 0x00\r
278         addiu   $22, $21, -0x121\r
279         beq             $22, $0, .+16\r
280         nop\r
281         b               error_loop\r
282         nop\r
283 \r
284         addiu   $22, $0, 0x00\r
285         addiu   $22, $23, -0x123\r
286         beq             $22, $0, .+16\r
287         nop\r
288         b               error_loop\r
289         nop\r
290 \r
291         addiu   $22, $0, 0x00\r
292         addiu   $22, $24, -0x124\r
293         beq             $22, $0, .+16\r
294         nop\r
295         b               error_loop\r
296         nop\r
297 \r
298         addiu   $22, $0, 0x00\r
299         addiu   $22, $25, -0x125\r
300         beq             $22, $0, .+16\r
301         nop\r
302         b               error_loop\r
303         nop\r
304 \r
305         addiu   $22, $0, 0x00\r
306         addiu   $22, $30, -0x130\r
307         beq             $22, $0, .+16\r
308         nop\r
309         b               error_loop\r
310         nop\r
311 \r
312         mfhi    $22, $ac1\r
313         addiu   $22, $22, -0x131\r
314         beq             $22, $0, .+16\r
315         nop\r
316         b               error_loop\r
317         nop\r
318 \r
319         mflo    $22, $ac1\r
320         addiu   $22, $22, -0x132\r
321         beq             $22, $0, .+16\r
322         nop\r
323         b               error_loop\r
324         nop\r
325 \r
326         mfhi    $22, $ac2\r
327         addiu   $22, $22, -0x133\r
328         beq             $22, $0, .+16\r
329         nop\r
330         b               error_loop\r
331         nop\r
332 \r
333         mflo    $22, $ac2\r
334         addiu   $22, $22, -0x134\r
335         beq             $22, $0, .+16\r
336         nop\r
337         b               error_loop\r
338         nop\r
339 \r
340         mfhi    $22, $ac3\r
341         addiu   $22, $22, -0x135\r
342         beq             $22, $0, .+16\r
343         nop\r
344         b               error_loop\r
345         nop\r
346 \r
347         mflo    $22, $ac3\r
348         addiu   $22, $22, -0x136\r
349         beq             $22, $0, .+16\r
350         nop\r
351         b               error_loop\r
352         nop\r
353 \r
354         /* No errors detected.  Increment the loop count so the check timer knows\r
355         this task is still running without error, then loop back to do it all\r
356         again.  The address of the loop counter is in $4. */\r
357         lw              $22, 0( $4 )\r
358         addiu   $22, $22, 0x01\r
359         sw              $22, 0( $4 )\r
360         b               vRegTest1Loop\r
361         nop\r
362 \r
363         .end    vRegTest1\r
364 \r
365 \r
366         .set    noreorder\r
367         .set    noat\r
368         .ent    vRegTest2\r
369 \r
370 vRegTest2:\r
371         addiu   $1, $0, 0x21\r
372         addiu   $2, $0, 0x22\r
373         addiu   $3, $0, 0x23\r
374         /* $4 contains the address of the loop counter - don't mess with $4. */\r
375         addiu   $5, $0, 0x25\r
376         addiu   $6, $0, 0x26\r
377         addiu   $7, $0, 0x27\r
378         addiu   $8, $0, 0x28\r
379         addiu   $9, $0, 0x29\r
380         addiu   $10, $0, 0x210\r
381         addiu   $11, $0, 0x211\r
382         addiu   $12, $0, 0x212\r
383         addiu   $13, $0, 0x213\r
384         addiu   $14, $0, 0x214\r
385         addiu   $15, $0, 0x215\r
386         addiu   $16, $0, 0x216\r
387         addiu   $17, $0, 0x217\r
388         addiu   $18, $0, 0x218\r
389         addiu   $19, $0, 0x219\r
390         addiu   $20, $0, 0x220\r
391         addiu   $21, $0, 0x221\r
392         addiu   $23, $0, 0x223\r
393         addiu   $24, $0, 0x224\r
394         addiu   $25, $0, 0x225\r
395         addiu   $30, $0, 0x230\r
396         addiu   $22, $0, 0x231\r
397         mthi    $22, $ac1\r
398         addiu   $22, $0, 0x232\r
399         mtlo    $22, $ac1\r
400         addiu   $22, $0, 0x233\r
401         mthi    $22, $ac2\r
402         addiu   $22, $0, 0x234\r
403         mtlo    $22, $ac2\r
404         addiu   $22, $0, 0x235\r
405         mthi    $22, $ac3\r
406         addiu   $22, $0, 0x236\r
407         mtlo    $22, $ac3\r
408 \r
409 vRegTest2Loop:\r
410         addiu   $22, $0, 0x00\r
411         addiu   $22, $1, -0x21\r
412         beq             $22, $0, .+16\r
413         nop\r
414         b               error_loop\r
415         nop\r
416 \r
417         addiu   $22, $0, 0x00\r
418         addiu   $22, $2, -0x22\r
419         beq             $22, $0, .+16\r
420         nop\r
421         b               error_loop\r
422         nop\r
423 \r
424         addiu   $22, $0, 0x00\r
425         addiu   $22, $3, -0x23\r
426         beq             $22, $0, .+16\r
427         nop\r
428         b               error_loop\r
429         nop\r
430 \r
431         addiu   $22, $0, 0x00\r
432         addiu   $22, $5, -0x25\r
433         beq             $22, $0, .+16\r
434         nop\r
435         b               error_loop\r
436         nop\r
437 \r
438         addiu   $22, $0, 0x00\r
439         addiu   $22, $6, -0x26\r
440         beq             $22, $0, .+16\r
441         nop\r
442         b               error_loop\r
443         nop\r
444 \r
445         addiu   $22, $0, 0x00\r
446         addiu   $22, $7, -0x27\r
447         beq             $22, $0, .+16\r
448         nop\r
449         b               error_loop\r
450         nop\r
451 \r
452         addiu   $22, $0, 0x00\r
453         addiu   $22, $8, -0x28\r
454         beq             $22, $0, .+16\r
455         nop\r
456         b               error_loop\r
457         nop\r
458 \r
459         addiu   $22, $0, 0x00\r
460         addiu   $22, $9, -0x29\r
461         beq             $22, $0, .+16\r
462         nop\r
463         b               error_loop\r
464         nop\r
465 \r
466         addiu   $22, $0, 0x00\r
467         addiu   $22, $10, -0x210\r
468         beq             $22, $0, .+16\r
469         nop\r
470         b               error_loop\r
471         nop\r
472 \r
473         addiu   $22, $0, 0x00\r
474         addiu   $22, $11, -0x211\r
475         beq             $22, $0, .+16\r
476         nop\r
477         b               error_loop\r
478         nop\r
479 \r
480         addiu   $22, $0, 0x00\r
481         addiu   $22, $12, -0x212\r
482         beq             $22, $0, .+16\r
483         nop\r
484         b               error_loop\r
485         nop\r
486 \r
487         addiu   $22, $0, 0x00\r
488         addiu   $22, $13, -0x213\r
489         beq             $22, $0, .+16\r
490         nop\r
491         b               error_loop\r
492         nop\r
493 \r
494         addiu   $22, $0, 0x00\r
495         addiu   $22, $14, -0x214\r
496         beq             $22, $0, .+16\r
497         nop\r
498         b               error_loop\r
499         nop\r
500 \r
501         addiu   $22, $0, 0x00\r
502         addiu   $22, $15, -0x215\r
503         beq             $22, $0, .+16\r
504         nop\r
505         b               error_loop\r
506         nop\r
507 \r
508         addiu   $22, $0, 0x00\r
509         addiu   $22, $16, -0x216\r
510         beq             $22, $0, .+16\r
511         nop\r
512         b               error_loop\r
513         nop\r
514 \r
515         addiu   $22, $0, 0x00\r
516         addiu   $22, $17, -0x217\r
517         beq             $22, $0, .+16\r
518         nop\r
519         b               error_loop\r
520         nop\r
521 \r
522         addiu   $22, $0, 0x00\r
523         addiu   $22, $18, -0x218\r
524         beq             $22, $0, .+16\r
525         nop\r
526         b               error_loop\r
527         nop\r
528 \r
529         addiu   $22, $0, 0x00\r
530         addiu   $22, $19, -0x219\r
531         beq             $22, $0, .+16\r
532         nop\r
533         b               error_loop\r
534         nop\r
535 \r
536         addiu   $22, $0, 0x00\r
537         addiu   $22, $20, -0x220\r
538         beq             $22, $0, .+16\r
539         nop\r
540         b               error_loop\r
541         nop\r
542 \r
543         addiu   $22, $0, 0x00\r
544         addiu   $22, $21, -0x221\r
545         beq             $22, $0, .+16\r
546         nop\r
547         b               error_loop\r
548         nop\r
549 \r
550         addiu   $22, $0, 0x00\r
551         addiu   $22, $23, -0x223\r
552         beq             $22, $0, .+16\r
553         nop\r
554         b               error_loop\r
555         nop\r
556 \r
557         addiu   $22, $0, 0x00\r
558         addiu   $22, $24, -0x224\r
559         beq             $22, $0, .+16\r
560         nop\r
561         b               error_loop\r
562         nop\r
563 \r
564         addiu   $22, $0, 0x00\r
565         addiu   $22, $25, -0x225\r
566         beq             $22, $0, .+16\r
567         nop\r
568         b               error_loop\r
569         nop\r
570 \r
571         addiu   $22, $0, 0x00\r
572         addiu   $22, $30, -0x230\r
573         beq             $22, $0, .+16\r
574         nop\r
575         b               error_loop\r
576         nop\r
577 \r
578         mfhi    $22, $ac1\r
579         addiu   $22, $22, -0x231\r
580         beq             $22, $0, .+16\r
581         nop\r
582         b               error_loop\r
583         nop\r
584 \r
585         mflo    $22, $ac1\r
586         addiu   $22, $22, -0x232\r
587         beq             $22, $0, .+16\r
588         nop\r
589         b               error_loop\r
590         nop\r
591 \r
592         mfhi    $22, $ac2\r
593         addiu   $22, $22, -0x233\r
594         beq             $22, $0, .+16\r
595         nop\r
596         b               error_loop\r
597         nop\r
598 \r
599         mflo    $22, $ac2\r
600         addiu   $22, $22, -0x234\r
601         beq             $22, $0, .+16\r
602         nop\r
603         b               error_loop\r
604         nop\r
605 \r
606         mfhi    $22, $ac3\r
607         addiu   $22, $22, -0x235\r
608         beq             $22, $0, .+16\r
609         nop\r
610         b               error_loop\r
611         nop\r
612 \r
613         mflo    $22, $ac3\r
614         addiu   $22, $22, -0x236\r
615         beq             $22, $0, .+16\r
616         nop\r
617         b               error_loop\r
618         nop\r
619 \r
620         /* No errors detected.  Increment the loop count so the check timer knows\r
621         this task is still running without error, then loop back to do it all\r
622         again.  The address of the loop counter is in $4. */\r
623         lw              $22, 0( $4 )\r
624         addiu   $22, $22, 0x01\r
625         sw              $22, 0( $4 )\r
626         b               vRegTest2Loop\r
627         nop\r
628 \r
629         .end    vRegTest2\r
630 \r
631 \r
632 \r