]> git.sur5r.net Git - freertos/blob - FreeRTOS/Demo/PIC32MX_MPLAB/RegisterTestTasks.S
Update version number in readiness for V10.3.0 release. Sync SVN with reviewed releas...
[freertos] / FreeRTOS / Demo / PIC32MX_MPLAB / RegisterTestTasks.S
1 /*\r
2  * FreeRTOS Kernel V10.3.0\r
3  * Copyright (C) 2020 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
4  *\r
5  * Permission is hereby granted, free of charge, to any person obtaining a copy of\r
6  * this software and associated documentation files (the "Software"), to deal in\r
7  * the Software without restriction, including without limitation the rights to\r
8  * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\r
9  * the Software, and to permit persons to whom the Software is furnished to do so,\r
10  * subject to the following conditions:\r
11  *\r
12  * The above copyright notice and this permission notice shall be included in all\r
13  * copies or substantial portions of the Software.\r
14  *\r
15  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r
16  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS\r
17  * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\r
18  * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\r
19  * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\r
20  * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r
21  *\r
22  * http://www.FreeRTOS.org\r
23  * http://aws.amazon.com/freertos\r
24  *\r
25  * 1 tab == 4 spaces!\r
26  */\r
27 \r
28 \r
29 #include <xc.h>\r
30 #include <sys/asm.h>\r
31 \r
32         .set    nomips16\r
33         .set    noreorder\r
34 \r
35 \r
36         .global vRegTest1\r
37         .global vRegTest2\r
38 \r
39         .set    noreorder\r
40         .set    noat\r
41         .ent    error_loop\r
42 \r
43 /* Reg test tasks call the error loop when they find an error.  Sitting in the\r
44 tight error loop prevents them incrementing their ulRegTestnCycles counter, and\r
45 so allows the check softwate timer to know an error has been found. */\r
46 error_loop:\r
47         b               .\r
48         nop\r
49 \r
50         .end error_loop\r
51 \r
52 \r
53         .set    noreorder\r
54         .set    noat\r
55         .ent    vRegTest1\r
56 \r
57 vRegTest1:\r
58         /* Fill the registers with known values. */\r
59         addiu   $1, $0, 0x11\r
60         addiu   $2, $0, 0x12\r
61         addiu   $3, $0, 0x13\r
62         /* $4 contains the address of the loop counter - don't mess with $4. */\r
63         addiu   $5, $0, 0x15\r
64         addiu   $6, $0, 0x16\r
65         addiu   $7, $0, 0x17\r
66         addiu   $8, $0, 0x18\r
67         addiu   $9, $0, 0x19\r
68         addiu   $10, $0, 0x110\r
69         addiu   $11, $0, 0x111\r
70         addiu   $12, $0, 0x112\r
71         addiu   $13, $0, 0x113\r
72         addiu   $14, $0, 0x114\r
73         addiu   $15, $0, 0x115\r
74         addiu   $16, $0, 0x116\r
75         addiu   $17, $0, 0x117\r
76         addiu   $18, $0, 0x118\r
77         addiu   $19, $0, 0x119\r
78         addiu   $20, $0, 0x120\r
79         addiu   $21, $0, 0x121\r
80         addiu   $23, $0, 0x123\r
81         addiu   $24, $0, 0x124\r
82         addiu   $25, $0, 0x125\r
83         addiu   $30, $0, 0x130\r
84         addiu   $22, $0, 0x131\r
85         mthi    $22\r
86         addiu   $22, $0, 0x132\r
87         mtlo    $22\r
88 \r
89 vRegTest1Loop:\r
90         /* Check each register maintains the value assigned to it for the lifetime\r
91         of the task. */\r
92         addiu   $22, $0, 0x00\r
93         addiu   $22, $1, -0x11\r
94         beq             $22, $0, .+16\r
95         nop\r
96         /* The register value was not that expected.  Jump to the error loop so the\r
97         cycle counter stops incrementing. */\r
98         b               error_loop\r
99         nop\r
100 \r
101         addiu   $22, $0, 0x00\r
102         addiu   $22, $2, -0x12\r
103         beq             $22, $0, .+16\r
104         nop\r
105         b               error_loop\r
106         nop\r
107 \r
108         addiu   $22, $0, 0x00\r
109         addiu   $22, $3, -0x13\r
110         beq             $22, $0, .+16\r
111         nop\r
112         b               error_loop\r
113         nop\r
114 \r
115         addiu   $22, $0, 0x00\r
116         addiu   $22, $5, -0x15\r
117         beq             $22, $0, .+16\r
118         nop\r
119         b               error_loop\r
120         nop\r
121 \r
122         addiu   $22, $0, 0x00\r
123         addiu   $22, $6, -0x16\r
124         beq             $22, $0, .+16\r
125         nop\r
126         b               error_loop\r
127         nop\r
128 \r
129         addiu   $22, $0, 0x00\r
130         addiu   $22, $7, -0x17\r
131         beq             $22, $0, .+16\r
132         nop\r
133         b               error_loop\r
134         nop\r
135 \r
136         addiu   $22, $0, 0x00\r
137         addiu   $22, $8, -0x18\r
138         beq             $22, $0, .+16\r
139         nop\r
140         b               error_loop\r
141         nop\r
142 \r
143         addiu   $22, $0, 0x00\r
144         addiu   $22, $9, -0x19\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, $10, -0x110\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, $11, -0x111\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, $12, -0x112\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, $13, -0x113\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, $14, -0x114\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, $15, -0x115\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, $16, -0x116\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, $17, -0x117\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, $18, -0x118\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, $19, -0x119\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, $20, -0x120\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, $21, -0x121\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, $23, -0x123\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, $24, -0x124\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, $25, -0x125\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, $30, -0x130\r
257         beq             $22, $0, .+16\r
258         nop\r
259         b               error_loop\r
260         nop\r
261 \r
262         mfhi    $22\r
263         addiu   $22, $22, -0x131\r
264         beq             $22, $0, .+16\r
265         nop\r
266         b               error_loop\r
267         nop\r
268 \r
269         mflo    $22, $ac1\r
270         addiu   $22, $22, -0x132\r
271         beq             $22, $0, .+16\r
272         nop\r
273         b               error_loop\r
274         nop\r
275 \r
276         /* No errors detected.  Increment the loop count so the check timer knows\r
277         this task is still running without error, then loop back to do it all\r
278         again.  The address of the loop counter is in $4. */\r
279         lw              $22, 0( $4 )\r
280         addiu   $22, $22, 0x01\r
281         sw              $22, 0( $4 )\r
282         b               vRegTest1Loop\r
283         nop\r
284 \r
285         .end    vRegTest1\r
286 \r
287 \r
288         .set    noreorder\r
289         .set    noat\r
290         .ent    vRegTest2\r
291 \r
292 vRegTest2:\r
293         addiu   $1, $0, 0x21\r
294         addiu   $2, $0, 0x22\r
295         addiu   $3, $0, 0x23\r
296         /* $4 contains the address of the loop counter - don't mess with $4. */\r
297         addiu   $5, $0, 0x25\r
298         addiu   $6, $0, 0x26\r
299         addiu   $7, $0, 0x27\r
300         addiu   $8, $0, 0x28\r
301         addiu   $9, $0, 0x29\r
302         addiu   $10, $0, 0x210\r
303         addiu   $11, $0, 0x211\r
304         addiu   $12, $0, 0x212\r
305         addiu   $13, $0, 0x213\r
306         addiu   $14, $0, 0x214\r
307         addiu   $15, $0, 0x215\r
308         addiu   $16, $0, 0x216\r
309         addiu   $17, $0, 0x217\r
310         addiu   $18, $0, 0x218\r
311         addiu   $19, $0, 0x219\r
312         addiu   $20, $0, 0x220\r
313         addiu   $21, $0, 0x221\r
314         addiu   $23, $0, 0x223\r
315         addiu   $24, $0, 0x224\r
316         addiu   $25, $0, 0x225\r
317         addiu   $30, $0, 0x230\r
318         addiu   $22, $0, 0x231\r
319         mthi    $22\r
320         addiu   $22, $0, 0x232\r
321         mtlo    $22\r
322 \r
323 vRegTest2Loop:\r
324         addiu   $22, $0, 0x00\r
325         addiu   $22, $1, -0x21\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, $2, -0x22\r
333         beq             $22, $0, .+16\r
334         nop\r
335         b               error_loop\r
336         nop\r
337 \r
338         addiu   $22, $0, 0x00\r
339         addiu   $22, $3, -0x23\r
340         beq             $22, $0, .+16\r
341         nop\r
342         b               error_loop\r
343         nop\r
344 \r
345         addiu   $22, $0, 0x00\r
346         addiu   $22, $5, -0x25\r
347         beq             $22, $0, .+16\r
348         nop\r
349         b               error_loop\r
350         nop\r
351 \r
352         addiu   $22, $0, 0x00\r
353         addiu   $22, $6, -0x26\r
354         beq             $22, $0, .+16\r
355         nop\r
356         b               error_loop\r
357         nop\r
358 \r
359         addiu   $22, $0, 0x00\r
360         addiu   $22, $7, -0x27\r
361         beq             $22, $0, .+16\r
362         nop\r
363         b               error_loop\r
364         nop\r
365 \r
366         addiu   $22, $0, 0x00\r
367         addiu   $22, $8, -0x28\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, $9, -0x29\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, $10, -0x210\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, $11, -0x211\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, $12, -0x212\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, $13, -0x213\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, $14, -0x214\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, $15, -0x215\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, $16, -0x216\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, $17, -0x217\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, $18, -0x218\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, $19, -0x219\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, $20, -0x220\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, $21, -0x221\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, $23, -0x223\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, $24, -0x224\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, $25, -0x225\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, $30, -0x230\r
487         beq             $22, $0, .+16\r
488         nop\r
489         b               error_loop\r
490         nop\r
491 \r
492         mfhi    $22\r
493         addiu   $22, $22, -0x231\r
494         beq             $22, $0, .+16\r
495         nop\r
496         b               error_loop\r
497         nop\r
498 \r
499         mflo    $22, $ac1\r
500         addiu   $22, $22, -0x232\r
501         beq             $22, $0, .+16\r
502         nop\r
503         b               error_loop\r
504         nop\r
505 \r
506         /* No errors detected.  Increment the loop count so the check timer knows\r
507         this task is still running without error, then loop back to do it all\r
508         again.  The address of the loop counter is in $4. */\r
509         lw              $22, 0( $4 )\r
510         addiu   $22, $22, 0x01\r
511         sw              $22, 0( $4 )\r
512         b               vRegTest2Loop\r
513         nop\r
514 \r
515         .end    vRegTest2\r
516 \r
517 \r
518 \r