]> git.sur5r.net Git - freertos/blob - FreeRTOS/Demo/PIC32MX_MPLAB/RegisterTestTasks.S
Update version numbers in preparation for V8.2.0 release candidate 1.
[freertos] / FreeRTOS / Demo / PIC32MX_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\r
154         addiu   $22, $0, 0x132\r
155         mtlo    $22\r
156 \r
157 vRegTest1Loop:\r
158         /* Check each register maintains the value assigned to it for the lifetime\r
159         of the task. */\r
160         addiu   $22, $0, 0x00\r
161         addiu   $22, $1, -0x11\r
162         beq             $22, $0, .+16\r
163         nop\r
164         /* The register value was not that expected.  Jump to the error loop so the\r
165         cycle counter stops incrementing. */\r
166         b               error_loop\r
167         nop\r
168 \r
169         addiu   $22, $0, 0x00\r
170         addiu   $22, $2, -0x12\r
171         beq             $22, $0, .+16\r
172         nop\r
173         b               error_loop\r
174         nop\r
175 \r
176         addiu   $22, $0, 0x00\r
177         addiu   $22, $3, -0x13\r
178         beq             $22, $0, .+16\r
179         nop\r
180         b               error_loop\r
181         nop\r
182 \r
183         addiu   $22, $0, 0x00\r
184         addiu   $22, $5, -0x15\r
185         beq             $22, $0, .+16\r
186         nop\r
187         b               error_loop\r
188         nop\r
189 \r
190         addiu   $22, $0, 0x00\r
191         addiu   $22, $6, -0x16\r
192         beq             $22, $0, .+16\r
193         nop\r
194         b               error_loop\r
195         nop\r
196 \r
197         addiu   $22, $0, 0x00\r
198         addiu   $22, $7, -0x17\r
199         beq             $22, $0, .+16\r
200         nop\r
201         b               error_loop\r
202         nop\r
203 \r
204         addiu   $22, $0, 0x00\r
205         addiu   $22, $8, -0x18\r
206         beq             $22, $0, .+16\r
207         nop\r
208         b               error_loop\r
209         nop\r
210 \r
211         addiu   $22, $0, 0x00\r
212         addiu   $22, $9, -0x19\r
213         beq             $22, $0, .+16\r
214         nop\r
215         b               error_loop\r
216         nop\r
217 \r
218         addiu   $22, $0, 0x00\r
219         addiu   $22, $10, -0x110\r
220         beq             $22, $0, .+16\r
221         nop\r
222         b               error_loop\r
223         nop\r
224 \r
225         addiu   $22, $0, 0x00\r
226         addiu   $22, $11, -0x111\r
227         beq             $22, $0, .+16\r
228         nop\r
229         b               error_loop\r
230         nop\r
231 \r
232         addiu   $22, $0, 0x00\r
233         addiu   $22, $12, -0x112\r
234         beq             $22, $0, .+16\r
235         nop\r
236         b               error_loop\r
237         nop\r
238 \r
239         addiu   $22, $0, 0x00\r
240         addiu   $22, $13, -0x113\r
241         beq             $22, $0, .+16\r
242         nop\r
243         b               error_loop\r
244         nop\r
245 \r
246         addiu   $22, $0, 0x00\r
247         addiu   $22, $14, -0x114\r
248         beq             $22, $0, .+16\r
249         nop\r
250         b               error_loop\r
251         nop\r
252 \r
253         addiu   $22, $0, 0x00\r
254         addiu   $22, $15, -0x115\r
255         beq             $22, $0, .+16\r
256         nop\r
257         b               error_loop\r
258         nop\r
259 \r
260         addiu   $22, $0, 0x00\r
261         addiu   $22, $16, -0x116\r
262         beq             $22, $0, .+16\r
263         nop\r
264         b               error_loop\r
265         nop\r
266 \r
267         addiu   $22, $0, 0x00\r
268         addiu   $22, $17, -0x117\r
269         beq             $22, $0, .+16\r
270         nop\r
271         b               error_loop\r
272         nop\r
273 \r
274         addiu   $22, $0, 0x00\r
275         addiu   $22, $18, -0x118\r
276         beq             $22, $0, .+16\r
277         nop\r
278         b               error_loop\r
279         nop\r
280 \r
281         addiu   $22, $0, 0x00\r
282         addiu   $22, $19, -0x119\r
283         beq             $22, $0, .+16\r
284         nop\r
285         b               error_loop\r
286         nop\r
287 \r
288         addiu   $22, $0, 0x00\r
289         addiu   $22, $20, -0x120\r
290         beq             $22, $0, .+16\r
291         nop\r
292         b               error_loop\r
293         nop\r
294 \r
295         addiu   $22, $0, 0x00\r
296         addiu   $22, $21, -0x121\r
297         beq             $22, $0, .+16\r
298         nop\r
299         b               error_loop\r
300         nop\r
301 \r
302         addiu   $22, $0, 0x00\r
303         addiu   $22, $23, -0x123\r
304         beq             $22, $0, .+16\r
305         nop\r
306         b               error_loop\r
307         nop\r
308 \r
309         addiu   $22, $0, 0x00\r
310         addiu   $22, $24, -0x124\r
311         beq             $22, $0, .+16\r
312         nop\r
313         b               error_loop\r
314         nop\r
315 \r
316         addiu   $22, $0, 0x00\r
317         addiu   $22, $25, -0x125\r
318         beq             $22, $0, .+16\r
319         nop\r
320         b               error_loop\r
321         nop\r
322 \r
323         addiu   $22, $0, 0x00\r
324         addiu   $22, $30, -0x130\r
325         beq             $22, $0, .+16\r
326         nop\r
327         b               error_loop\r
328         nop\r
329 \r
330         mfhi    $22\r
331         addiu   $22, $22, -0x131\r
332         beq             $22, $0, .+16\r
333         nop\r
334         b               error_loop\r
335         nop\r
336 \r
337         mflo    $22, $ac1\r
338         addiu   $22, $22, -0x132\r
339         beq             $22, $0, .+16\r
340         nop\r
341         b               error_loop\r
342         nop\r
343 \r
344         /* No errors detected.  Increment the loop count so the check timer knows\r
345         this task is still running without error, then loop back to do it all\r
346         again.  The address of the loop counter is in $4. */\r
347         lw              $22, 0( $4 )\r
348         addiu   $22, $22, 0x01\r
349         sw              $22, 0( $4 )\r
350         b               vRegTest1Loop\r
351         nop\r
352 \r
353         .end    vRegTest1\r
354 \r
355 \r
356         .set    noreorder\r
357         .set    noat\r
358         .ent    vRegTest2\r
359 \r
360 vRegTest2:\r
361         addiu   $1, $0, 0x21\r
362         addiu   $2, $0, 0x22\r
363         addiu   $3, $0, 0x23\r
364         /* $4 contains the address of the loop counter - don't mess with $4. */\r
365         addiu   $5, $0, 0x25\r
366         addiu   $6, $0, 0x26\r
367         addiu   $7, $0, 0x27\r
368         addiu   $8, $0, 0x28\r
369         addiu   $9, $0, 0x29\r
370         addiu   $10, $0, 0x210\r
371         addiu   $11, $0, 0x211\r
372         addiu   $12, $0, 0x212\r
373         addiu   $13, $0, 0x213\r
374         addiu   $14, $0, 0x214\r
375         addiu   $15, $0, 0x215\r
376         addiu   $16, $0, 0x216\r
377         addiu   $17, $0, 0x217\r
378         addiu   $18, $0, 0x218\r
379         addiu   $19, $0, 0x219\r
380         addiu   $20, $0, 0x220\r
381         addiu   $21, $0, 0x221\r
382         addiu   $23, $0, 0x223\r
383         addiu   $24, $0, 0x224\r
384         addiu   $25, $0, 0x225\r
385         addiu   $30, $0, 0x230\r
386         addiu   $22, $0, 0x231\r
387         mthi    $22\r
388         addiu   $22, $0, 0x232\r
389         mtlo    $22\r
390 \r
391 vRegTest2Loop:\r
392         addiu   $22, $0, 0x00\r
393         addiu   $22, $1, -0x21\r
394         beq             $22, $0, .+16\r
395         nop\r
396         b               error_loop\r
397         nop\r
398 \r
399         addiu   $22, $0, 0x00\r
400         addiu   $22, $2, -0x22\r
401         beq             $22, $0, .+16\r
402         nop\r
403         b               error_loop\r
404         nop\r
405 \r
406         addiu   $22, $0, 0x00\r
407         addiu   $22, $3, -0x23\r
408         beq             $22, $0, .+16\r
409         nop\r
410         b               error_loop\r
411         nop\r
412 \r
413         addiu   $22, $0, 0x00\r
414         addiu   $22, $5, -0x25\r
415         beq             $22, $0, .+16\r
416         nop\r
417         b               error_loop\r
418         nop\r
419 \r
420         addiu   $22, $0, 0x00\r
421         addiu   $22, $6, -0x26\r
422         beq             $22, $0, .+16\r
423         nop\r
424         b               error_loop\r
425         nop\r
426 \r
427         addiu   $22, $0, 0x00\r
428         addiu   $22, $7, -0x27\r
429         beq             $22, $0, .+16\r
430         nop\r
431         b               error_loop\r
432         nop\r
433 \r
434         addiu   $22, $0, 0x00\r
435         addiu   $22, $8, -0x28\r
436         beq             $22, $0, .+16\r
437         nop\r
438         b               error_loop\r
439         nop\r
440 \r
441         addiu   $22, $0, 0x00\r
442         addiu   $22, $9, -0x29\r
443         beq             $22, $0, .+16\r
444         nop\r
445         b               error_loop\r
446         nop\r
447 \r
448         addiu   $22, $0, 0x00\r
449         addiu   $22, $10, -0x210\r
450         beq             $22, $0, .+16\r
451         nop\r
452         b               error_loop\r
453         nop\r
454 \r
455         addiu   $22, $0, 0x00\r
456         addiu   $22, $11, -0x211\r
457         beq             $22, $0, .+16\r
458         nop\r
459         b               error_loop\r
460         nop\r
461 \r
462         addiu   $22, $0, 0x00\r
463         addiu   $22, $12, -0x212\r
464         beq             $22, $0, .+16\r
465         nop\r
466         b               error_loop\r
467         nop\r
468 \r
469         addiu   $22, $0, 0x00\r
470         addiu   $22, $13, -0x213\r
471         beq             $22, $0, .+16\r
472         nop\r
473         b               error_loop\r
474         nop\r
475 \r
476         addiu   $22, $0, 0x00\r
477         addiu   $22, $14, -0x214\r
478         beq             $22, $0, .+16\r
479         nop\r
480         b               error_loop\r
481         nop\r
482 \r
483         addiu   $22, $0, 0x00\r
484         addiu   $22, $15, -0x215\r
485         beq             $22, $0, .+16\r
486         nop\r
487         b               error_loop\r
488         nop\r
489 \r
490         addiu   $22, $0, 0x00\r
491         addiu   $22, $16, -0x216\r
492         beq             $22, $0, .+16\r
493         nop\r
494         b               error_loop\r
495         nop\r
496 \r
497         addiu   $22, $0, 0x00\r
498         addiu   $22, $17, -0x217\r
499         beq             $22, $0, .+16\r
500         nop\r
501         b               error_loop\r
502         nop\r
503 \r
504         addiu   $22, $0, 0x00\r
505         addiu   $22, $18, -0x218\r
506         beq             $22, $0, .+16\r
507         nop\r
508         b               error_loop\r
509         nop\r
510 \r
511         addiu   $22, $0, 0x00\r
512         addiu   $22, $19, -0x219\r
513         beq             $22, $0, .+16\r
514         nop\r
515         b               error_loop\r
516         nop\r
517 \r
518         addiu   $22, $0, 0x00\r
519         addiu   $22, $20, -0x220\r
520         beq             $22, $0, .+16\r
521         nop\r
522         b               error_loop\r
523         nop\r
524 \r
525         addiu   $22, $0, 0x00\r
526         addiu   $22, $21, -0x221\r
527         beq             $22, $0, .+16\r
528         nop\r
529         b               error_loop\r
530         nop\r
531 \r
532         addiu   $22, $0, 0x00\r
533         addiu   $22, $23, -0x223\r
534         beq             $22, $0, .+16\r
535         nop\r
536         b               error_loop\r
537         nop\r
538 \r
539         addiu   $22, $0, 0x00\r
540         addiu   $22, $24, -0x224\r
541         beq             $22, $0, .+16\r
542         nop\r
543         b               error_loop\r
544         nop\r
545 \r
546         addiu   $22, $0, 0x00\r
547         addiu   $22, $25, -0x225\r
548         beq             $22, $0, .+16\r
549         nop\r
550         b               error_loop\r
551         nop\r
552 \r
553         addiu   $22, $0, 0x00\r
554         addiu   $22, $30, -0x230\r
555         beq             $22, $0, .+16\r
556         nop\r
557         b               error_loop\r
558         nop\r
559 \r
560         mfhi    $22\r
561         addiu   $22, $22, -0x231\r
562         beq             $22, $0, .+16\r
563         nop\r
564         b               error_loop\r
565         nop\r
566 \r
567         mflo    $22, $ac1\r
568         addiu   $22, $22, -0x232\r
569         beq             $22, $0, .+16\r
570         nop\r
571         b               error_loop\r
572         nop\r
573 \r
574         /* No errors detected.  Increment the loop count so the check timer knows\r
575         this task is still running without error, then loop back to do it all\r
576         again.  The address of the loop counter is in $4. */\r
577         lw              $22, 0( $4 )\r
578         addiu   $22, $22, 0x01\r
579         sw              $22, 0( $4 )\r
580         b               vRegTest2Loop\r
581         nop\r
582 \r
583         .end    vRegTest2\r
584 \r
585 \r
586 \r