]> git.sur5r.net Git - freertos/blob - FreeRTOS/Demo/PIC32MX_MPLAB/RegisterTestTasks.S
Update version number to 8.1.2 after moving the defaulting of configUSE_PORT_OPTIMISE...
[freertos] / FreeRTOS / Demo / PIC32MX_MPLAB / RegisterTestTasks.S
1         /*\r
2     FreeRTOS V8.1.2 - 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     ***************************************************************************\r
8      *                                                                       *\r
9      *    FreeRTOS provides completely free yet professionally developed,    *\r
10      *    robust, strictly quality controlled, supported, and cross          *\r
11      *    platform software that has become a de facto standard.             *\r
12      *                                                                       *\r
13      *    Help yourself get started quickly and support the FreeRTOS         *\r
14      *    project by purchasing a FreeRTOS tutorial book, reference          *\r
15      *    manual, or both from: http://www.FreeRTOS.org/Documentation        *\r
16      *                                                                       *\r
17      *    Thank you!                                                         *\r
18      *                                                                       *\r
19     ***************************************************************************\r
20 \r
21     This file is part of the FreeRTOS distribution.\r
22 \r
23     FreeRTOS is free software; you can redistribute it and/or modify it under\r
24     the terms of the GNU General Public License (version 2) as published by the\r
25     Free Software Foundation >>!AND MODIFIED BY!<< the FreeRTOS exception.\r
26 \r
27     >>!   NOTE: The modification to the GPL is included to allow you to     !<<\r
28     >>!   distribute a combined work that includes FreeRTOS without being   !<<\r
29     >>!   obliged to provide the source code for proprietary components     !<<\r
30     >>!   outside of the FreeRTOS kernel.                                   !<<\r
31 \r
32     FreeRTOS is distributed in the hope that it will be useful, but WITHOUT ANY\r
33     WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\r
34     FOR A PARTICULAR PURPOSE.  Full license text is available from the following\r
35     link: http://www.freertos.org/a00114.html\r
36 \r
37     1 tab == 4 spaces!\r
38 \r
39     ***************************************************************************\r
40      *                                                                       *\r
41      *    Having a problem?  Start by reading the FAQ "My application does   *\r
42      *    not run, what could be wrong?"                                     *\r
43      *                                                                       *\r
44      *    http://www.FreeRTOS.org/FAQHelp.html                               *\r
45      *                                                                       *\r
46     ***************************************************************************\r
47 \r
48     http://www.FreeRTOS.org - Documentation, books, training, latest versions,\r
49     license and Real Time Engineers Ltd. contact details.\r
50 \r
51     http://www.FreeRTOS.org/plus - A selection of FreeRTOS ecosystem products,\r
52     including FreeRTOS+Trace - an indispensable productivity tool, a DOS\r
53     compatible FAT file system, and our tiny thread aware UDP/IP stack.\r
54 \r
55     http://www.OpenRTOS.com - Real Time Engineers ltd license FreeRTOS to High\r
56     Integrity Systems to sell under the OpenRTOS brand.  Low cost OpenRTOS\r
57     licenses offer ticketed support, indemnification and middleware.\r
58 \r
59     http://www.SafeRTOS.com - High Integrity Systems also provide a safety\r
60     engineered and independently SIL3 certified version for use in safety and\r
61     mission critical applications that require provable dependability.\r
62 \r
63     1 tab == 4 spaces!\r
64 */\r
65 \r
66 \r
67 #include <xc.h>\r
68 #include <sys/asm.h>\r
69 \r
70         .set    nomips16\r
71         .set    noreorder\r
72 \r
73 \r
74         .global vRegTest1\r
75         .global vRegTest2\r
76 \r
77         .set    noreorder\r
78         .set    noat\r
79         .ent    error_loop\r
80 \r
81 /* Reg test tasks call the error loop when they find an error.  Sitting in the\r
82 tight error loop prevents them incrementing their ulRegTestnCycles counter, and\r
83 so allows the check softwate timer to know an error has been found. */\r
84 error_loop:\r
85         b               .\r
86         nop\r
87 \r
88         .end error_loop\r
89 \r
90 \r
91         .set    noreorder\r
92         .set    noat\r
93         .ent    vRegTest1\r
94 \r
95 vRegTest1:\r
96         /* Fill the registers with known values. */\r
97         addiu   $1, $0, 0x11\r
98         addiu   $2, $0, 0x12\r
99         addiu   $3, $0, 0x13\r
100         /* $4 contains the address of the loop counter - don't mess with $4. */\r
101         addiu   $5, $0, 0x15\r
102         addiu   $6, $0, 0x16\r
103         addiu   $7, $0, 0x17\r
104         addiu   $8, $0, 0x18\r
105         addiu   $9, $0, 0x19\r
106         addiu   $10, $0, 0x110\r
107         addiu   $11, $0, 0x111\r
108         addiu   $12, $0, 0x112\r
109         addiu   $13, $0, 0x113\r
110         addiu   $14, $0, 0x114\r
111         addiu   $15, $0, 0x115\r
112         addiu   $16, $0, 0x116\r
113         addiu   $17, $0, 0x117\r
114         addiu   $18, $0, 0x118\r
115         addiu   $19, $0, 0x119\r
116         addiu   $20, $0, 0x120\r
117         addiu   $21, $0, 0x121\r
118         addiu   $23, $0, 0x123\r
119         addiu   $24, $0, 0x124\r
120         addiu   $25, $0, 0x125\r
121         addiu   $30, $0, 0x130\r
122         addiu   $22, $0, 0x131\r
123         mthi    $22\r
124         addiu   $22, $0, 0x132\r
125         mtlo    $22\r
126 \r
127 vRegTest1Loop:\r
128         /* Check each register maintains the value assigned to it for the lifetime\r
129         of the task. */\r
130         addiu   $22, $0, 0x00\r
131         addiu   $22, $1, -0x11\r
132         beq             $22, $0, .+16\r
133         nop\r
134         /* The register value was not that expected.  Jump to the error loop so the\r
135         cycle counter stops incrementing. */\r
136         b               error_loop\r
137         nop\r
138 \r
139         addiu   $22, $0, 0x00\r
140         addiu   $22, $2, -0x12\r
141         beq             $22, $0, .+16\r
142         nop\r
143         b               error_loop\r
144         nop\r
145 \r
146         addiu   $22, $0, 0x00\r
147         addiu   $22, $3, -0x13\r
148         beq             $22, $0, .+16\r
149         nop\r
150         b               error_loop\r
151         nop\r
152 \r
153         addiu   $22, $0, 0x00\r
154         addiu   $22, $5, -0x15\r
155         beq             $22, $0, .+16\r
156         nop\r
157         b               error_loop\r
158         nop\r
159 \r
160         addiu   $22, $0, 0x00\r
161         addiu   $22, $6, -0x16\r
162         beq             $22, $0, .+16\r
163         nop\r
164         b               error_loop\r
165         nop\r
166 \r
167         addiu   $22, $0, 0x00\r
168         addiu   $22, $7, -0x17\r
169         beq             $22, $0, .+16\r
170         nop\r
171         b               error_loop\r
172         nop\r
173 \r
174         addiu   $22, $0, 0x00\r
175         addiu   $22, $8, -0x18\r
176         beq             $22, $0, .+16\r
177         nop\r
178         b               error_loop\r
179         nop\r
180 \r
181         addiu   $22, $0, 0x00\r
182         addiu   $22, $9, -0x19\r
183         beq             $22, $0, .+16\r
184         nop\r
185         b               error_loop\r
186         nop\r
187 \r
188         addiu   $22, $0, 0x00\r
189         addiu   $22, $10, -0x110\r
190         beq             $22, $0, .+16\r
191         nop\r
192         b               error_loop\r
193         nop\r
194 \r
195         addiu   $22, $0, 0x00\r
196         addiu   $22, $11, -0x111\r
197         beq             $22, $0, .+16\r
198         nop\r
199         b               error_loop\r
200         nop\r
201 \r
202         addiu   $22, $0, 0x00\r
203         addiu   $22, $12, -0x112\r
204         beq             $22, $0, .+16\r
205         nop\r
206         b               error_loop\r
207         nop\r
208 \r
209         addiu   $22, $0, 0x00\r
210         addiu   $22, $13, -0x113\r
211         beq             $22, $0, .+16\r
212         nop\r
213         b               error_loop\r
214         nop\r
215 \r
216         addiu   $22, $0, 0x00\r
217         addiu   $22, $14, -0x114\r
218         beq             $22, $0, .+16\r
219         nop\r
220         b               error_loop\r
221         nop\r
222 \r
223         addiu   $22, $0, 0x00\r
224         addiu   $22, $15, -0x115\r
225         beq             $22, $0, .+16\r
226         nop\r
227         b               error_loop\r
228         nop\r
229 \r
230         addiu   $22, $0, 0x00\r
231         addiu   $22, $16, -0x116\r
232         beq             $22, $0, .+16\r
233         nop\r
234         b               error_loop\r
235         nop\r
236 \r
237         addiu   $22, $0, 0x00\r
238         addiu   $22, $17, -0x117\r
239         beq             $22, $0, .+16\r
240         nop\r
241         b               error_loop\r
242         nop\r
243 \r
244         addiu   $22, $0, 0x00\r
245         addiu   $22, $18, -0x118\r
246         beq             $22, $0, .+16\r
247         nop\r
248         b               error_loop\r
249         nop\r
250 \r
251         addiu   $22, $0, 0x00\r
252         addiu   $22, $19, -0x119\r
253         beq             $22, $0, .+16\r
254         nop\r
255         b               error_loop\r
256         nop\r
257 \r
258         addiu   $22, $0, 0x00\r
259         addiu   $22, $20, -0x120\r
260         beq             $22, $0, .+16\r
261         nop\r
262         b               error_loop\r
263         nop\r
264 \r
265         addiu   $22, $0, 0x00\r
266         addiu   $22, $21, -0x121\r
267         beq             $22, $0, .+16\r
268         nop\r
269         b               error_loop\r
270         nop\r
271 \r
272         addiu   $22, $0, 0x00\r
273         addiu   $22, $23, -0x123\r
274         beq             $22, $0, .+16\r
275         nop\r
276         b               error_loop\r
277         nop\r
278 \r
279         addiu   $22, $0, 0x00\r
280         addiu   $22, $24, -0x124\r
281         beq             $22, $0, .+16\r
282         nop\r
283         b               error_loop\r
284         nop\r
285 \r
286         addiu   $22, $0, 0x00\r
287         addiu   $22, $25, -0x125\r
288         beq             $22, $0, .+16\r
289         nop\r
290         b               error_loop\r
291         nop\r
292 \r
293         addiu   $22, $0, 0x00\r
294         addiu   $22, $30, -0x130\r
295         beq             $22, $0, .+16\r
296         nop\r
297         b               error_loop\r
298         nop\r
299 \r
300         mfhi    $22\r
301         addiu   $22, $22, -0x131\r
302         beq             $22, $0, .+16\r
303         nop\r
304         b               error_loop\r
305         nop\r
306 \r
307         mflo    $22, $ac1\r
308         addiu   $22, $22, -0x132\r
309         beq             $22, $0, .+16\r
310         nop\r
311         b               error_loop\r
312         nop\r
313 \r
314         /* No errors detected.  Increment the loop count so the check timer knows\r
315         this task is still running without error, then loop back to do it all\r
316         again.  The address of the loop counter is in $4. */\r
317         lw              $22, 0( $4 )\r
318         addiu   $22, $22, 0x01\r
319         sw              $22, 0( $4 )\r
320         b               vRegTest1Loop\r
321         nop\r
322 \r
323         .end    vRegTest1\r
324 \r
325 \r
326         .set    noreorder\r
327         .set    noat\r
328         .ent    vRegTest2\r
329 \r
330 vRegTest2:\r
331         addiu   $1, $0, 0x21\r
332         addiu   $2, $0, 0x22\r
333         addiu   $3, $0, 0x23\r
334         /* $4 contains the address of the loop counter - don't mess with $4. */\r
335         addiu   $5, $0, 0x25\r
336         addiu   $6, $0, 0x26\r
337         addiu   $7, $0, 0x27\r
338         addiu   $8, $0, 0x28\r
339         addiu   $9, $0, 0x29\r
340         addiu   $10, $0, 0x210\r
341         addiu   $11, $0, 0x211\r
342         addiu   $12, $0, 0x212\r
343         addiu   $13, $0, 0x213\r
344         addiu   $14, $0, 0x214\r
345         addiu   $15, $0, 0x215\r
346         addiu   $16, $0, 0x216\r
347         addiu   $17, $0, 0x217\r
348         addiu   $18, $0, 0x218\r
349         addiu   $19, $0, 0x219\r
350         addiu   $20, $0, 0x220\r
351         addiu   $21, $0, 0x221\r
352         addiu   $23, $0, 0x223\r
353         addiu   $24, $0, 0x224\r
354         addiu   $25, $0, 0x225\r
355         addiu   $30, $0, 0x230\r
356         addiu   $22, $0, 0x231\r
357         mthi    $22\r
358         addiu   $22, $0, 0x232\r
359         mtlo    $22\r
360 \r
361 vRegTest2Loop:\r
362         addiu   $22, $0, 0x00\r
363         addiu   $22, $1, -0x21\r
364         beq             $22, $0, .+16\r
365         nop\r
366         b               error_loop\r
367         nop\r
368 \r
369         addiu   $22, $0, 0x00\r
370         addiu   $22, $2, -0x22\r
371         beq             $22, $0, .+16\r
372         nop\r
373         b               error_loop\r
374         nop\r
375 \r
376         addiu   $22, $0, 0x00\r
377         addiu   $22, $3, -0x23\r
378         beq             $22, $0, .+16\r
379         nop\r
380         b               error_loop\r
381         nop\r
382 \r
383         addiu   $22, $0, 0x00\r
384         addiu   $22, $5, -0x25\r
385         beq             $22, $0, .+16\r
386         nop\r
387         b               error_loop\r
388         nop\r
389 \r
390         addiu   $22, $0, 0x00\r
391         addiu   $22, $6, -0x26\r
392         beq             $22, $0, .+16\r
393         nop\r
394         b               error_loop\r
395         nop\r
396 \r
397         addiu   $22, $0, 0x00\r
398         addiu   $22, $7, -0x27\r
399         beq             $22, $0, .+16\r
400         nop\r
401         b               error_loop\r
402         nop\r
403 \r
404         addiu   $22, $0, 0x00\r
405         addiu   $22, $8, -0x28\r
406         beq             $22, $0, .+16\r
407         nop\r
408         b               error_loop\r
409         nop\r
410 \r
411         addiu   $22, $0, 0x00\r
412         addiu   $22, $9, -0x29\r
413         beq             $22, $0, .+16\r
414         nop\r
415         b               error_loop\r
416         nop\r
417 \r
418         addiu   $22, $0, 0x00\r
419         addiu   $22, $10, -0x210\r
420         beq             $22, $0, .+16\r
421         nop\r
422         b               error_loop\r
423         nop\r
424 \r
425         addiu   $22, $0, 0x00\r
426         addiu   $22, $11, -0x211\r
427         beq             $22, $0, .+16\r
428         nop\r
429         b               error_loop\r
430         nop\r
431 \r
432         addiu   $22, $0, 0x00\r
433         addiu   $22, $12, -0x212\r
434         beq             $22, $0, .+16\r
435         nop\r
436         b               error_loop\r
437         nop\r
438 \r
439         addiu   $22, $0, 0x00\r
440         addiu   $22, $13, -0x213\r
441         beq             $22, $0, .+16\r
442         nop\r
443         b               error_loop\r
444         nop\r
445 \r
446         addiu   $22, $0, 0x00\r
447         addiu   $22, $14, -0x214\r
448         beq             $22, $0, .+16\r
449         nop\r
450         b               error_loop\r
451         nop\r
452 \r
453         addiu   $22, $0, 0x00\r
454         addiu   $22, $15, -0x215\r
455         beq             $22, $0, .+16\r
456         nop\r
457         b               error_loop\r
458         nop\r
459 \r
460         addiu   $22, $0, 0x00\r
461         addiu   $22, $16, -0x216\r
462         beq             $22, $0, .+16\r
463         nop\r
464         b               error_loop\r
465         nop\r
466 \r
467         addiu   $22, $0, 0x00\r
468         addiu   $22, $17, -0x217\r
469         beq             $22, $0, .+16\r
470         nop\r
471         b               error_loop\r
472         nop\r
473 \r
474         addiu   $22, $0, 0x00\r
475         addiu   $22, $18, -0x218\r
476         beq             $22, $0, .+16\r
477         nop\r
478         b               error_loop\r
479         nop\r
480 \r
481         addiu   $22, $0, 0x00\r
482         addiu   $22, $19, -0x219\r
483         beq             $22, $0, .+16\r
484         nop\r
485         b               error_loop\r
486         nop\r
487 \r
488         addiu   $22, $0, 0x00\r
489         addiu   $22, $20, -0x220\r
490         beq             $22, $0, .+16\r
491         nop\r
492         b               error_loop\r
493         nop\r
494 \r
495         addiu   $22, $0, 0x00\r
496         addiu   $22, $21, -0x221\r
497         beq             $22, $0, .+16\r
498         nop\r
499         b               error_loop\r
500         nop\r
501 \r
502         addiu   $22, $0, 0x00\r
503         addiu   $22, $23, -0x223\r
504         beq             $22, $0, .+16\r
505         nop\r
506         b               error_loop\r
507         nop\r
508 \r
509         addiu   $22, $0, 0x00\r
510         addiu   $22, $24, -0x224\r
511         beq             $22, $0, .+16\r
512         nop\r
513         b               error_loop\r
514         nop\r
515 \r
516         addiu   $22, $0, 0x00\r
517         addiu   $22, $25, -0x225\r
518         beq             $22, $0, .+16\r
519         nop\r
520         b               error_loop\r
521         nop\r
522 \r
523         addiu   $22, $0, 0x00\r
524         addiu   $22, $30, -0x230\r
525         beq             $22, $0, .+16\r
526         nop\r
527         b               error_loop\r
528         nop\r
529 \r
530         mfhi    $22\r
531         addiu   $22, $22, -0x231\r
532         beq             $22, $0, .+16\r
533         nop\r
534         b               error_loop\r
535         nop\r
536 \r
537         mflo    $22, $ac1\r
538         addiu   $22, $22, -0x232\r
539         beq             $22, $0, .+16\r
540         nop\r
541         b               error_loop\r
542         nop\r
543 \r
544         /* No errors detected.  Increment the loop count so the check timer knows\r
545         this task is still running without error, then loop back to do it all\r
546         again.  The address of the loop counter is in $4. */\r
547         lw              $22, 0( $4 )\r
548         addiu   $22, $22, 0x01\r
549         sw              $22, 0( $4 )\r
550         b               vRegTest2Loop\r
551         nop\r
552 \r
553         .end    vRegTest2\r
554 \r
555 \r
556 \r