]> git.sur5r.net Git - freertos/blob - FreeRTOS/Demo/PIC32MX_MPLAB/RegisterTestTasks.S
Update version number ready for V8.2.1 release.
[freertos] / FreeRTOS / Demo / PIC32MX_MPLAB / RegisterTestTasks.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 \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\r
128         addiu   $22, $0, 0x132\r
129         mtlo    $22\r
130 \r
131 vRegTest1Loop:\r
132         /* Check each register maintains the value assigned to it for the lifetime\r
133         of the task. */\r
134         addiu   $22, $0, 0x00\r
135         addiu   $22, $1, -0x11\r
136         beq             $22, $0, .+16\r
137         nop\r
138         /* The register value was not that expected.  Jump to the error loop so the\r
139         cycle counter stops incrementing. */\r
140         b               error_loop\r
141         nop\r
142 \r
143         addiu   $22, $0, 0x00\r
144         addiu   $22, $2, -0x12\r
145         beq             $22, $0, .+16\r
146         nop\r
147         b               error_loop\r
148         nop\r
149 \r
150         addiu   $22, $0, 0x00\r
151         addiu   $22, $3, -0x13\r
152         beq             $22, $0, .+16\r
153         nop\r
154         b               error_loop\r
155         nop\r
156 \r
157         addiu   $22, $0, 0x00\r
158         addiu   $22, $5, -0x15\r
159         beq             $22, $0, .+16\r
160         nop\r
161         b               error_loop\r
162         nop\r
163 \r
164         addiu   $22, $0, 0x00\r
165         addiu   $22, $6, -0x16\r
166         beq             $22, $0, .+16\r
167         nop\r
168         b               error_loop\r
169         nop\r
170 \r
171         addiu   $22, $0, 0x00\r
172         addiu   $22, $7, -0x17\r
173         beq             $22, $0, .+16\r
174         nop\r
175         b               error_loop\r
176         nop\r
177 \r
178         addiu   $22, $0, 0x00\r
179         addiu   $22, $8, -0x18\r
180         beq             $22, $0, .+16\r
181         nop\r
182         b               error_loop\r
183         nop\r
184 \r
185         addiu   $22, $0, 0x00\r
186         addiu   $22, $9, -0x19\r
187         beq             $22, $0, .+16\r
188         nop\r
189         b               error_loop\r
190         nop\r
191 \r
192         addiu   $22, $0, 0x00\r
193         addiu   $22, $10, -0x110\r
194         beq             $22, $0, .+16\r
195         nop\r
196         b               error_loop\r
197         nop\r
198 \r
199         addiu   $22, $0, 0x00\r
200         addiu   $22, $11, -0x111\r
201         beq             $22, $0, .+16\r
202         nop\r
203         b               error_loop\r
204         nop\r
205 \r
206         addiu   $22, $0, 0x00\r
207         addiu   $22, $12, -0x112\r
208         beq             $22, $0, .+16\r
209         nop\r
210         b               error_loop\r
211         nop\r
212 \r
213         addiu   $22, $0, 0x00\r
214         addiu   $22, $13, -0x113\r
215         beq             $22, $0, .+16\r
216         nop\r
217         b               error_loop\r
218         nop\r
219 \r
220         addiu   $22, $0, 0x00\r
221         addiu   $22, $14, -0x114\r
222         beq             $22, $0, .+16\r
223         nop\r
224         b               error_loop\r
225         nop\r
226 \r
227         addiu   $22, $0, 0x00\r
228         addiu   $22, $15, -0x115\r
229         beq             $22, $0, .+16\r
230         nop\r
231         b               error_loop\r
232         nop\r
233 \r
234         addiu   $22, $0, 0x00\r
235         addiu   $22, $16, -0x116\r
236         beq             $22, $0, .+16\r
237         nop\r
238         b               error_loop\r
239         nop\r
240 \r
241         addiu   $22, $0, 0x00\r
242         addiu   $22, $17, -0x117\r
243         beq             $22, $0, .+16\r
244         nop\r
245         b               error_loop\r
246         nop\r
247 \r
248         addiu   $22, $0, 0x00\r
249         addiu   $22, $18, -0x118\r
250         beq             $22, $0, .+16\r
251         nop\r
252         b               error_loop\r
253         nop\r
254 \r
255         addiu   $22, $0, 0x00\r
256         addiu   $22, $19, -0x119\r
257         beq             $22, $0, .+16\r
258         nop\r
259         b               error_loop\r
260         nop\r
261 \r
262         addiu   $22, $0, 0x00\r
263         addiu   $22, $20, -0x120\r
264         beq             $22, $0, .+16\r
265         nop\r
266         b               error_loop\r
267         nop\r
268 \r
269         addiu   $22, $0, 0x00\r
270         addiu   $22, $21, -0x121\r
271         beq             $22, $0, .+16\r
272         nop\r
273         b               error_loop\r
274         nop\r
275 \r
276         addiu   $22, $0, 0x00\r
277         addiu   $22, $23, -0x123\r
278         beq             $22, $0, .+16\r
279         nop\r
280         b               error_loop\r
281         nop\r
282 \r
283         addiu   $22, $0, 0x00\r
284         addiu   $22, $24, -0x124\r
285         beq             $22, $0, .+16\r
286         nop\r
287         b               error_loop\r
288         nop\r
289 \r
290         addiu   $22, $0, 0x00\r
291         addiu   $22, $25, -0x125\r
292         beq             $22, $0, .+16\r
293         nop\r
294         b               error_loop\r
295         nop\r
296 \r
297         addiu   $22, $0, 0x00\r
298         addiu   $22, $30, -0x130\r
299         beq             $22, $0, .+16\r
300         nop\r
301         b               error_loop\r
302         nop\r
303 \r
304         mfhi    $22\r
305         addiu   $22, $22, -0x131\r
306         beq             $22, $0, .+16\r
307         nop\r
308         b               error_loop\r
309         nop\r
310 \r
311         mflo    $22, $ac1\r
312         addiu   $22, $22, -0x132\r
313         beq             $22, $0, .+16\r
314         nop\r
315         b               error_loop\r
316         nop\r
317 \r
318         /* No errors detected.  Increment the loop count so the check timer knows\r
319         this task is still running without error, then loop back to do it all\r
320         again.  The address of the loop counter is in $4. */\r
321         lw              $22, 0( $4 )\r
322         addiu   $22, $22, 0x01\r
323         sw              $22, 0( $4 )\r
324         b               vRegTest1Loop\r
325         nop\r
326 \r
327         .end    vRegTest1\r
328 \r
329 \r
330         .set    noreorder\r
331         .set    noat\r
332         .ent    vRegTest2\r
333 \r
334 vRegTest2:\r
335         addiu   $1, $0, 0x21\r
336         addiu   $2, $0, 0x22\r
337         addiu   $3, $0, 0x23\r
338         /* $4 contains the address of the loop counter - don't mess with $4. */\r
339         addiu   $5, $0, 0x25\r
340         addiu   $6, $0, 0x26\r
341         addiu   $7, $0, 0x27\r
342         addiu   $8, $0, 0x28\r
343         addiu   $9, $0, 0x29\r
344         addiu   $10, $0, 0x210\r
345         addiu   $11, $0, 0x211\r
346         addiu   $12, $0, 0x212\r
347         addiu   $13, $0, 0x213\r
348         addiu   $14, $0, 0x214\r
349         addiu   $15, $0, 0x215\r
350         addiu   $16, $0, 0x216\r
351         addiu   $17, $0, 0x217\r
352         addiu   $18, $0, 0x218\r
353         addiu   $19, $0, 0x219\r
354         addiu   $20, $0, 0x220\r
355         addiu   $21, $0, 0x221\r
356         addiu   $23, $0, 0x223\r
357         addiu   $24, $0, 0x224\r
358         addiu   $25, $0, 0x225\r
359         addiu   $30, $0, 0x230\r
360         addiu   $22, $0, 0x231\r
361         mthi    $22\r
362         addiu   $22, $0, 0x232\r
363         mtlo    $22\r
364 \r
365 vRegTest2Loop:\r
366         addiu   $22, $0, 0x00\r
367         addiu   $22, $1, -0x21\r
368         beq             $22, $0, .+16\r
369         nop\r
370         b               error_loop\r
371         nop\r
372 \r
373         addiu   $22, $0, 0x00\r
374         addiu   $22, $2, -0x22\r
375         beq             $22, $0, .+16\r
376         nop\r
377         b               error_loop\r
378         nop\r
379 \r
380         addiu   $22, $0, 0x00\r
381         addiu   $22, $3, -0x23\r
382         beq             $22, $0, .+16\r
383         nop\r
384         b               error_loop\r
385         nop\r
386 \r
387         addiu   $22, $0, 0x00\r
388         addiu   $22, $5, -0x25\r
389         beq             $22, $0, .+16\r
390         nop\r
391         b               error_loop\r
392         nop\r
393 \r
394         addiu   $22, $0, 0x00\r
395         addiu   $22, $6, -0x26\r
396         beq             $22, $0, .+16\r
397         nop\r
398         b               error_loop\r
399         nop\r
400 \r
401         addiu   $22, $0, 0x00\r
402         addiu   $22, $7, -0x27\r
403         beq             $22, $0, .+16\r
404         nop\r
405         b               error_loop\r
406         nop\r
407 \r
408         addiu   $22, $0, 0x00\r
409         addiu   $22, $8, -0x28\r
410         beq             $22, $0, .+16\r
411         nop\r
412         b               error_loop\r
413         nop\r
414 \r
415         addiu   $22, $0, 0x00\r
416         addiu   $22, $9, -0x29\r
417         beq             $22, $0, .+16\r
418         nop\r
419         b               error_loop\r
420         nop\r
421 \r
422         addiu   $22, $0, 0x00\r
423         addiu   $22, $10, -0x210\r
424         beq             $22, $0, .+16\r
425         nop\r
426         b               error_loop\r
427         nop\r
428 \r
429         addiu   $22, $0, 0x00\r
430         addiu   $22, $11, -0x211\r
431         beq             $22, $0, .+16\r
432         nop\r
433         b               error_loop\r
434         nop\r
435 \r
436         addiu   $22, $0, 0x00\r
437         addiu   $22, $12, -0x212\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, $13, -0x213\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, $14, -0x214\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, $15, -0x215\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, $16, -0x216\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, $17, -0x217\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, $18, -0x218\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, $19, -0x219\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, $20, -0x220\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, $21, -0x221\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, $23, -0x223\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, $24, -0x224\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, $25, -0x225\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, $30, -0x230\r
529         beq             $22, $0, .+16\r
530         nop\r
531         b               error_loop\r
532         nop\r
533 \r
534         mfhi    $22\r
535         addiu   $22, $22, -0x231\r
536         beq             $22, $0, .+16\r
537         nop\r
538         b               error_loop\r
539         nop\r
540 \r
541         mflo    $22, $ac1\r
542         addiu   $22, $22, -0x232\r
543         beq             $22, $0, .+16\r
544         nop\r
545         b               error_loop\r
546         nop\r
547 \r
548         /* No errors detected.  Increment the loop count so the check timer knows\r
549         this task is still running without error, then loop back to do it all\r
550         again.  The address of the loop counter is in $4. */\r
551         lw              $22, 0( $4 )\r
552         addiu   $22, $22, 0x01\r
553         sw              $22, 0( $4 )\r
554         b               vRegTest2Loop\r
555         nop\r
556 \r
557         .end    vRegTest2\r
558 \r
559 \r
560 \r