]> git.sur5r.net Git - freertos/blob - FreeRTOS/Demo/PIC32MZ_MPLAB/RegisterTestTasks.S
2485864aec042dd7fc84133346a8f5a4c14d40cf
[freertos] / FreeRTOS / Demo / PIC32MZ_MPLAB / RegisterTestTasks.S
1 /*\r
2     FreeRTOS V8.2.0rc1 - Copyright (C) 2014 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     >>!   NOTE: The modification to the GPL is included to allow you to     !<<\r
14     >>!   distribute a combined work that includes FreeRTOS without being   !<<\r
15     >>!   obliged to provide the source code for proprietary components     !<<\r
16     >>!   outside of the FreeRTOS kernel.                                   !<<\r
17 \r
18     FreeRTOS is distributed in the hope that it will be useful, but WITHOUT ANY\r
19     WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\r
20     FOR A PARTICULAR PURPOSE.  Full license text is available on the following\r
21     link: http://www.freertos.org/a00114.html\r
22 \r
23     1 tab == 4 spaces!\r
24 \r
25     ***************************************************************************\r
26      *                                                                       *\r
27      *    Having a problem?  Start by reading the FAQ "My application does   *\r
28      *    not run, what could be wrong?".  Have you defined configASSERT()?  *\r
29      *                                                                       *\r
30      *    http://www.FreeRTOS.org/FAQHelp.html                               *\r
31      *                                                                       *\r
32     ***************************************************************************\r
33 \r
34     ***************************************************************************\r
35      *                                                                       *\r
36      *    FreeRTOS provides completely free yet professionally developed,    *\r
37      *    robust, strictly quality controlled, supported, and cross          *\r
38      *    platform software that is more than just the market leader, it     *\r
39      *    is the industry's de facto standard.                               *\r
40      *                                                                       *\r
41      *    Help yourself get started quickly while simultaneously helping     *\r
42      *    to support the FreeRTOS project by purchasing a FreeRTOS           *\r
43      *    tutorial book, reference manual, or both:                          *\r
44      *    http://www.FreeRTOS.org/Documentation                              *\r
45      *                                                                       *\r
46     ***************************************************************************\r
47 \r
48     ***************************************************************************\r
49      *                                                                       *\r
50      *   Investing in training allows your team to be as productive as       *\r
51      *   possible as early as possible, lowering your overall development    *\r
52      *   cost, and enabling you to bring a more robust product to market     *\r
53      *   earlier than would otherwise be possible.  Richard Barry is both    *\r
54      *   the architect and key author of FreeRTOS, and so also the world's   *\r
55      *   leading authority on what is the world's most popular real time     *\r
56      *   kernel for deeply embedded MCU designs.  Obtaining your training    *\r
57      *   from Richard ensures your team will gain directly from his in-depth *\r
58      *   product knowledge and years of usage experience.  Contact Real Time *\r
59      *   Engineers Ltd to enquire about the FreeRTOS Masterclass, presented  *\r
60      *   by Richard Barry:  http://www.FreeRTOS.org/contact\r
61      *                                                                       *\r
62     ***************************************************************************\r
63 \r
64     ***************************************************************************\r
65      *                                                                       *\r
66      *    You are receiving this top quality software for free.  Please play *\r
67      *    fair and reciprocate by reporting any suspected issues and         *\r
68      *    participating in the community forum:                              *\r
69      *    http://www.FreeRTOS.org/support                                    *\r
70      *                                                                       *\r
71      *    Thank you!                                                         *\r
72      *                                                                       *\r
73     ***************************************************************************\r
74 \r
75     http://www.FreeRTOS.org - Documentation, books, training, latest versions,\r
76     license and Real Time Engineers Ltd. contact details.\r
77 \r
78     http://www.FreeRTOS.org/plus - A selection of FreeRTOS ecosystem products,\r
79     including FreeRTOS+Trace - an indispensable productivity tool, a DOS\r
80     compatible FAT file system, and our tiny thread aware UDP/IP stack.\r
81 \r
82     http://www.FreeRTOS.org/labs - Where new FreeRTOS products go to incubate.\r
83     Come and try FreeRTOS+TCP, our new open source TCP/IP stack for FreeRTOS.\r
84 \r
85     http://www.OpenRTOS.com - Real Time Engineers ltd license FreeRTOS to High\r
86     Integrity Systems ltd. to sell under the OpenRTOS brand.  Low cost OpenRTOS\r
87     licenses offer ticketed support, indemnification and commercial middleware.\r
88 \r
89     http://www.SafeRTOS.com - High Integrity Systems also provide a safety\r
90     engineered and independently SIL3 certified version for use in safety and\r
91     mission critical applications that require provable dependability.\r
92 \r
93     1 tab == 4 spaces!\r
94 */\r
95 \r
96 \r
97 #include <xc.h>\r
98 #include <sys/asm.h>\r
99 \r
100         .set    nomips16\r
101         .set    noreorder\r
102 \r
103 \r
104         .global vRegTest1\r
105         .global vRegTest2\r
106 \r
107         .set    noreorder\r
108         .set    noat\r
109         .ent    error_loop\r
110 \r
111 /* Reg test tasks call the error loop when they find an error.  Sitting in the\r
112 tight error loop prevents them incrementing their ulRegTestnCycles counter, and\r
113 so allows the check softwate timer to know an error has been found. */\r
114 error_loop:\r
115         b               .\r
116         nop\r
117 \r
118         .end error_loop\r
119 \r
120 \r
121         .set    noreorder\r
122         .set    noat\r
123         .ent    vRegTest1\r
124 \r
125 vRegTest1:\r
126         /* Fill the registers with known values. */\r
127         addiu   $1, $0, 0x11\r
128         addiu   $2, $0, 0x12\r
129         addiu   $3, $0, 0x13\r
130         /* $4 contains the address of the loop counter - don't mess with $4. */\r
131         addiu   $5, $0, 0x15\r
132         addiu   $6, $0, 0x16\r
133         addiu   $7, $0, 0x17\r
134         addiu   $8, $0, 0x18\r
135         addiu   $9, $0, 0x19\r
136         addiu   $10, $0, 0x110\r
137         addiu   $11, $0, 0x111\r
138         addiu   $12, $0, 0x112\r
139         addiu   $13, $0, 0x113\r
140         addiu   $14, $0, 0x114\r
141         addiu   $15, $0, 0x115\r
142         addiu   $16, $0, 0x116\r
143         addiu   $17, $0, 0x117\r
144         addiu   $18, $0, 0x118\r
145         addiu   $19, $0, 0x119\r
146         addiu   $20, $0, 0x120\r
147         addiu   $21, $0, 0x121\r
148         addiu   $23, $0, 0x123\r
149         addiu   $24, $0, 0x124\r
150         addiu   $25, $0, 0x125\r
151         addiu   $30, $0, 0x130\r
152         addiu   $22, $0, 0x131\r
153         mthi    $22, $ac1\r
154         addiu   $22, $0, 0x132\r
155         mtlo    $22, $ac1\r
156         addiu   $22, $0, 0x133\r
157         mthi    $22, $ac2\r
158         addiu   $22, $0, 0x134\r
159         mtlo    $22, $ac2\r
160         addiu   $22, $0, 0x135\r
161         mthi    $22, $ac3\r
162         addiu   $22, $0, 0x136\r
163         mtlo    $22, $ac3\r
164 \r
165 vRegTest1Loop:\r
166         /* Check each register maintains the value assigned to it for the lifetime\r
167         of the task. */\r
168         addiu   $22, $0, 0x00\r
169         addiu   $22, $1, -0x11\r
170         beq             $22, $0, .+16\r
171         nop\r
172         /* The register value was not that expected.  Jump to the error loop so the\r
173         cycle counter stops incrementing. */\r
174         b               error_loop\r
175         nop\r
176 \r
177         addiu   $22, $0, 0x00\r
178         addiu   $22, $2, -0x12\r
179         beq             $22, $0, .+16\r
180         nop\r
181         b               error_loop\r
182         nop\r
183 \r
184         addiu   $22, $0, 0x00\r
185         addiu   $22, $3, -0x13\r
186         beq             $22, $0, .+16\r
187         nop\r
188         b               error_loop\r
189         nop\r
190 \r
191         addiu   $22, $0, 0x00\r
192         addiu   $22, $5, -0x15\r
193         beq             $22, $0, .+16\r
194         nop\r
195         b               error_loop\r
196         nop\r
197 \r
198         addiu   $22, $0, 0x00\r
199         addiu   $22, $6, -0x16\r
200         beq             $22, $0, .+16\r
201         nop\r
202         b               error_loop\r
203         nop\r
204 \r
205         addiu   $22, $0, 0x00\r
206         addiu   $22, $7, -0x17\r
207         beq             $22, $0, .+16\r
208         nop\r
209         b               error_loop\r
210         nop\r
211 \r
212         addiu   $22, $0, 0x00\r
213         addiu   $22, $8, -0x18\r
214         beq             $22, $0, .+16\r
215         nop\r
216         b               error_loop\r
217         nop\r
218 \r
219         addiu   $22, $0, 0x00\r
220         addiu   $22, $9, -0x19\r
221         beq             $22, $0, .+16\r
222         nop\r
223         b               error_loop\r
224         nop\r
225 \r
226         addiu   $22, $0, 0x00\r
227         addiu   $22, $10, -0x110\r
228         beq             $22, $0, .+16\r
229         nop\r
230         b               error_loop\r
231         nop\r
232 \r
233         addiu   $22, $0, 0x00\r
234         addiu   $22, $11, -0x111\r
235         beq             $22, $0, .+16\r
236         nop\r
237         b               error_loop\r
238         nop\r
239 \r
240         addiu   $22, $0, 0x00\r
241         addiu   $22, $12, -0x112\r
242         beq             $22, $0, .+16\r
243         nop\r
244         b               error_loop\r
245         nop\r
246 \r
247         addiu   $22, $0, 0x00\r
248         addiu   $22, $13, -0x113\r
249         beq             $22, $0, .+16\r
250         nop\r
251         b               error_loop\r
252         nop\r
253 \r
254         addiu   $22, $0, 0x00\r
255         addiu   $22, $14, -0x114\r
256         beq             $22, $0, .+16\r
257         nop\r
258         b               error_loop\r
259         nop\r
260 \r
261         addiu   $22, $0, 0x00\r
262         addiu   $22, $15, -0x115\r
263         beq             $22, $0, .+16\r
264         nop\r
265         b               error_loop\r
266         nop\r
267 \r
268         addiu   $22, $0, 0x00\r
269         addiu   $22, $16, -0x116\r
270         beq             $22, $0, .+16\r
271         nop\r
272         b               error_loop\r
273         nop\r
274 \r
275         addiu   $22, $0, 0x00\r
276         addiu   $22, $17, -0x117\r
277         beq             $22, $0, .+16\r
278         nop\r
279         b               error_loop\r
280         nop\r
281 \r
282         addiu   $22, $0, 0x00\r
283         addiu   $22, $18, -0x118\r
284         beq             $22, $0, .+16\r
285         nop\r
286         b               error_loop\r
287         nop\r
288 \r
289         addiu   $22, $0, 0x00\r
290         addiu   $22, $19, -0x119\r
291         beq             $22, $0, .+16\r
292         nop\r
293         b               error_loop\r
294         nop\r
295 \r
296         addiu   $22, $0, 0x00\r
297         addiu   $22, $20, -0x120\r
298         beq             $22, $0, .+16\r
299         nop\r
300         b               error_loop\r
301         nop\r
302 \r
303         addiu   $22, $0, 0x00\r
304         addiu   $22, $21, -0x121\r
305         beq             $22, $0, .+16\r
306         nop\r
307         b               error_loop\r
308         nop\r
309 \r
310         addiu   $22, $0, 0x00\r
311         addiu   $22, $23, -0x123\r
312         beq             $22, $0, .+16\r
313         nop\r
314         b               error_loop\r
315         nop\r
316 \r
317         addiu   $22, $0, 0x00\r
318         addiu   $22, $24, -0x124\r
319         beq             $22, $0, .+16\r
320         nop\r
321         b               error_loop\r
322         nop\r
323 \r
324         addiu   $22, $0, 0x00\r
325         addiu   $22, $25, -0x125\r
326         beq             $22, $0, .+16\r
327         nop\r
328         b               error_loop\r
329         nop\r
330 \r
331         addiu   $22, $0, 0x00\r
332         addiu   $22, $30, -0x130\r
333         beq             $22, $0, .+16\r
334         nop\r
335         b               error_loop\r
336         nop\r
337 \r
338         mfhi    $22, $ac1\r
339         addiu   $22, $22, -0x131\r
340         beq             $22, $0, .+16\r
341         nop\r
342         b               error_loop\r
343         nop\r
344 \r
345         mflo    $22, $ac1\r
346         addiu   $22, $22, -0x132\r
347         beq             $22, $0, .+16\r
348         nop\r
349         b               error_loop\r
350         nop\r
351 \r
352         mfhi    $22, $ac2\r
353         addiu   $22, $22, -0x133\r
354         beq             $22, $0, .+16\r
355         nop\r
356         b               error_loop\r
357         nop\r
358 \r
359         mflo    $22, $ac2\r
360         addiu   $22, $22, -0x134\r
361         beq             $22, $0, .+16\r
362         nop\r
363         b               error_loop\r
364         nop\r
365 \r
366         mfhi    $22, $ac3\r
367         addiu   $22, $22, -0x135\r
368         beq             $22, $0, .+16\r
369         nop\r
370         b               error_loop\r
371         nop\r
372 \r
373         mflo    $22, $ac3\r
374         addiu   $22, $22, -0x136\r
375         beq             $22, $0, .+16\r
376         nop\r
377         b               error_loop\r
378         nop\r
379 \r
380         /* No errors detected.  Increment the loop count so the check timer knows\r
381         this task is still running without error, then loop back to do it all\r
382         again.  The address of the loop counter is in $4. */\r
383         lw              $22, 0( $4 )\r
384         addiu   $22, $22, 0x01\r
385         sw              $22, 0( $4 )\r
386         b               vRegTest1Loop\r
387         nop\r
388 \r
389         .end    vRegTest1\r
390 \r
391 \r
392         .set    noreorder\r
393         .set    noat\r
394         .ent    vRegTest2\r
395 \r
396 vRegTest2:\r
397         addiu   $1, $0, 0x21\r
398         addiu   $2, $0, 0x22\r
399         addiu   $3, $0, 0x23\r
400         /* $4 contains the address of the loop counter - don't mess with $4. */\r
401         addiu   $5, $0, 0x25\r
402         addiu   $6, $0, 0x26\r
403         addiu   $7, $0, 0x27\r
404         addiu   $8, $0, 0x28\r
405         addiu   $9, $0, 0x29\r
406         addiu   $10, $0, 0x210\r
407         addiu   $11, $0, 0x211\r
408         addiu   $12, $0, 0x212\r
409         addiu   $13, $0, 0x213\r
410         addiu   $14, $0, 0x214\r
411         addiu   $15, $0, 0x215\r
412         addiu   $16, $0, 0x216\r
413         addiu   $17, $0, 0x217\r
414         addiu   $18, $0, 0x218\r
415         addiu   $19, $0, 0x219\r
416         addiu   $20, $0, 0x220\r
417         addiu   $21, $0, 0x221\r
418         addiu   $23, $0, 0x223\r
419         addiu   $24, $0, 0x224\r
420         addiu   $25, $0, 0x225\r
421         addiu   $30, $0, 0x230\r
422         addiu   $22, $0, 0x231\r
423         mthi    $22, $ac1\r
424         addiu   $22, $0, 0x232\r
425         mtlo    $22, $ac1\r
426         addiu   $22, $0, 0x233\r
427         mthi    $22, $ac2\r
428         addiu   $22, $0, 0x234\r
429         mtlo    $22, $ac2\r
430         addiu   $22, $0, 0x235\r
431         mthi    $22, $ac3\r
432         addiu   $22, $0, 0x236\r
433         mtlo    $22, $ac3\r
434 \r
435 vRegTest2Loop:\r
436         addiu   $22, $0, 0x00\r
437         addiu   $22, $1, -0x21\r
438         beq             $22, $0, .+16\r
439         nop\r
440         b               error_loop\r
441         nop\r
442 \r
443         addiu   $22, $0, 0x00\r
444         addiu   $22, $2, -0x22\r
445         beq             $22, $0, .+16\r
446         nop\r
447         b               error_loop\r
448         nop\r
449 \r
450         addiu   $22, $0, 0x00\r
451         addiu   $22, $3, -0x23\r
452         beq             $22, $0, .+16\r
453         nop\r
454         b               error_loop\r
455         nop\r
456 \r
457         addiu   $22, $0, 0x00\r
458         addiu   $22, $5, -0x25\r
459         beq             $22, $0, .+16\r
460         nop\r
461         b               error_loop\r
462         nop\r
463 \r
464         addiu   $22, $0, 0x00\r
465         addiu   $22, $6, -0x26\r
466         beq             $22, $0, .+16\r
467         nop\r
468         b               error_loop\r
469         nop\r
470 \r
471         addiu   $22, $0, 0x00\r
472         addiu   $22, $7, -0x27\r
473         beq             $22, $0, .+16\r
474         nop\r
475         b               error_loop\r
476         nop\r
477 \r
478         addiu   $22, $0, 0x00\r
479         addiu   $22, $8, -0x28\r
480         beq             $22, $0, .+16\r
481         nop\r
482         b               error_loop\r
483         nop\r
484 \r
485         addiu   $22, $0, 0x00\r
486         addiu   $22, $9, -0x29\r
487         beq             $22, $0, .+16\r
488         nop\r
489         b               error_loop\r
490         nop\r
491 \r
492         addiu   $22, $0, 0x00\r
493         addiu   $22, $10, -0x210\r
494         beq             $22, $0, .+16\r
495         nop\r
496         b               error_loop\r
497         nop\r
498 \r
499         addiu   $22, $0, 0x00\r
500         addiu   $22, $11, -0x211\r
501         beq             $22, $0, .+16\r
502         nop\r
503         b               error_loop\r
504         nop\r
505 \r
506         addiu   $22, $0, 0x00\r
507         addiu   $22, $12, -0x212\r
508         beq             $22, $0, .+16\r
509         nop\r
510         b               error_loop\r
511         nop\r
512 \r
513         addiu   $22, $0, 0x00\r
514         addiu   $22, $13, -0x213\r
515         beq             $22, $0, .+16\r
516         nop\r
517         b               error_loop\r
518         nop\r
519 \r
520         addiu   $22, $0, 0x00\r
521         addiu   $22, $14, -0x214\r
522         beq             $22, $0, .+16\r
523         nop\r
524         b               error_loop\r
525         nop\r
526 \r
527         addiu   $22, $0, 0x00\r
528         addiu   $22, $15, -0x215\r
529         beq             $22, $0, .+16\r
530         nop\r
531         b               error_loop\r
532         nop\r
533 \r
534         addiu   $22, $0, 0x00\r
535         addiu   $22, $16, -0x216\r
536         beq             $22, $0, .+16\r
537         nop\r
538         b               error_loop\r
539         nop\r
540 \r
541         addiu   $22, $0, 0x00\r
542         addiu   $22, $17, -0x217\r
543         beq             $22, $0, .+16\r
544         nop\r
545         b               error_loop\r
546         nop\r
547 \r
548         addiu   $22, $0, 0x00\r
549         addiu   $22, $18, -0x218\r
550         beq             $22, $0, .+16\r
551         nop\r
552         b               error_loop\r
553         nop\r
554 \r
555         addiu   $22, $0, 0x00\r
556         addiu   $22, $19, -0x219\r
557         beq             $22, $0, .+16\r
558         nop\r
559         b               error_loop\r
560         nop\r
561 \r
562         addiu   $22, $0, 0x00\r
563         addiu   $22, $20, -0x220\r
564         beq             $22, $0, .+16\r
565         nop\r
566         b               error_loop\r
567         nop\r
568 \r
569         addiu   $22, $0, 0x00\r
570         addiu   $22, $21, -0x221\r
571         beq             $22, $0, .+16\r
572         nop\r
573         b               error_loop\r
574         nop\r
575 \r
576         addiu   $22, $0, 0x00\r
577         addiu   $22, $23, -0x223\r
578         beq             $22, $0, .+16\r
579         nop\r
580         b               error_loop\r
581         nop\r
582 \r
583         addiu   $22, $0, 0x00\r
584         addiu   $22, $24, -0x224\r
585         beq             $22, $0, .+16\r
586         nop\r
587         b               error_loop\r
588         nop\r
589 \r
590         addiu   $22, $0, 0x00\r
591         addiu   $22, $25, -0x225\r
592         beq             $22, $0, .+16\r
593         nop\r
594         b               error_loop\r
595         nop\r
596 \r
597         addiu   $22, $0, 0x00\r
598         addiu   $22, $30, -0x230\r
599         beq             $22, $0, .+16\r
600         nop\r
601         b               error_loop\r
602         nop\r
603 \r
604         mfhi    $22, $ac1\r
605         addiu   $22, $22, -0x231\r
606         beq             $22, $0, .+16\r
607         nop\r
608         b               error_loop\r
609         nop\r
610 \r
611         mflo    $22, $ac1\r
612         addiu   $22, $22, -0x232\r
613         beq             $22, $0, .+16\r
614         nop\r
615         b               error_loop\r
616         nop\r
617 \r
618         mfhi    $22, $ac2\r
619         addiu   $22, $22, -0x233\r
620         beq             $22, $0, .+16\r
621         nop\r
622         b               error_loop\r
623         nop\r
624 \r
625         mflo    $22, $ac2\r
626         addiu   $22, $22, -0x234\r
627         beq             $22, $0, .+16\r
628         nop\r
629         b               error_loop\r
630         nop\r
631 \r
632         mfhi    $22, $ac3\r
633         addiu   $22, $22, -0x235\r
634         beq             $22, $0, .+16\r
635         nop\r
636         b               error_loop\r
637         nop\r
638 \r
639         mflo    $22, $ac3\r
640         addiu   $22, $22, -0x236\r
641         beq             $22, $0, .+16\r
642         nop\r
643         b               error_loop\r
644         nop\r
645 \r
646         /* No errors detected.  Increment the loop count so the check timer knows\r
647         this task is still running without error, then loop back to do it all\r
648         again.  The address of the loop counter is in $4. */\r
649         lw              $22, 0( $4 )\r
650         addiu   $22, $22, 0x01\r
651         sw              $22, 0( $4 )\r
652         b               vRegTest2Loop\r
653         nop\r
654 \r
655         .end    vRegTest2\r
656 \r
657 \r
658 \r