]> git.sur5r.net Git - freertos/blob - FreeRTOS/Demo/PIC32MX_MPLAB/RegisterTestTasks.S
Update to MIT licensed FreeRTOS V10.0.0 - see https://www.freertos.org/History.txt
[freertos] / FreeRTOS / Demo / PIC32MX_MPLAB / RegisterTestTasks.S
1 /*\r
2  * FreeRTOS Kernel V10.0.0\r
3  * Copyright (C) 2017 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. If you wish to use our Amazon\r
14  * FreeRTOS name, please do so in a fair use way that does not cause confusion.\r
15  *\r
16  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r
17  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS\r
18  * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\r
19  * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\r
20  * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\r
21  * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r
22  *\r
23  * http://www.FreeRTOS.org\r
24  * http://aws.amazon.com/freertos\r
25  *\r
26  * 1 tab == 4 spaces!\r
27  */\r
28 \r
29 \r
30 #include <xc.h>\r
31 #include <sys/asm.h>\r
32 \r
33         .set    nomips16\r
34         .set    noreorder\r
35 \r
36 \r
37         .global vRegTest1\r
38         .global vRegTest2\r
39 \r
40         .set    noreorder\r
41         .set    noat\r
42         .ent    error_loop\r
43 \r
44 /* Reg test tasks call the error loop when they find an error.  Sitting in the\r
45 tight error loop prevents them incrementing their ulRegTestnCycles counter, and\r
46 so allows the check softwate timer to know an error has been found. */\r
47 error_loop:\r
48         b               .\r
49         nop\r
50 \r
51         .end error_loop\r
52 \r
53 \r
54         .set    noreorder\r
55         .set    noat\r
56         .ent    vRegTest1\r
57 \r
58 vRegTest1:\r
59         /* Fill the registers with known values. */\r
60         addiu   $1, $0, 0x11\r
61         addiu   $2, $0, 0x12\r
62         addiu   $3, $0, 0x13\r
63         /* $4 contains the address of the loop counter - don't mess with $4. */\r
64         addiu   $5, $0, 0x15\r
65         addiu   $6, $0, 0x16\r
66         addiu   $7, $0, 0x17\r
67         addiu   $8, $0, 0x18\r
68         addiu   $9, $0, 0x19\r
69         addiu   $10, $0, 0x110\r
70         addiu   $11, $0, 0x111\r
71         addiu   $12, $0, 0x112\r
72         addiu   $13, $0, 0x113\r
73         addiu   $14, $0, 0x114\r
74         addiu   $15, $0, 0x115\r
75         addiu   $16, $0, 0x116\r
76         addiu   $17, $0, 0x117\r
77         addiu   $18, $0, 0x118\r
78         addiu   $19, $0, 0x119\r
79         addiu   $20, $0, 0x120\r
80         addiu   $21, $0, 0x121\r
81         addiu   $23, $0, 0x123\r
82         addiu   $24, $0, 0x124\r
83         addiu   $25, $0, 0x125\r
84         addiu   $30, $0, 0x130\r
85         addiu   $22, $0, 0x131\r
86         mthi    $22\r
87         addiu   $22, $0, 0x132\r
88         mtlo    $22\r
89 \r
90 vRegTest1Loop:\r
91         /* Check each register maintains the value assigned to it for the lifetime\r
92         of the task. */\r
93         addiu   $22, $0, 0x00\r
94         addiu   $22, $1, -0x11\r
95         beq             $22, $0, .+16\r
96         nop\r
97         /* The register value was not that expected.  Jump to the error loop so the\r
98         cycle counter stops incrementing. */\r
99         b               error_loop\r
100         nop\r
101 \r
102         addiu   $22, $0, 0x00\r
103         addiu   $22, $2, -0x12\r
104         beq             $22, $0, .+16\r
105         nop\r
106         b               error_loop\r
107         nop\r
108 \r
109         addiu   $22, $0, 0x00\r
110         addiu   $22, $3, -0x13\r
111         beq             $22, $0, .+16\r
112         nop\r
113         b               error_loop\r
114         nop\r
115 \r
116         addiu   $22, $0, 0x00\r
117         addiu   $22, $5, -0x15\r
118         beq             $22, $0, .+16\r
119         nop\r
120         b               error_loop\r
121         nop\r
122 \r
123         addiu   $22, $0, 0x00\r
124         addiu   $22, $6, -0x16\r
125         beq             $22, $0, .+16\r
126         nop\r
127         b               error_loop\r
128         nop\r
129 \r
130         addiu   $22, $0, 0x00\r
131         addiu   $22, $7, -0x17\r
132         beq             $22, $0, .+16\r
133         nop\r
134         b               error_loop\r
135         nop\r
136 \r
137         addiu   $22, $0, 0x00\r
138         addiu   $22, $8, -0x18\r
139         beq             $22, $0, .+16\r
140         nop\r
141         b               error_loop\r
142         nop\r
143 \r
144         addiu   $22, $0, 0x00\r
145         addiu   $22, $9, -0x19\r
146         beq             $22, $0, .+16\r
147         nop\r
148         b               error_loop\r
149         nop\r
150 \r
151         addiu   $22, $0, 0x00\r
152         addiu   $22, $10, -0x110\r
153         beq             $22, $0, .+16\r
154         nop\r
155         b               error_loop\r
156         nop\r
157 \r
158         addiu   $22, $0, 0x00\r
159         addiu   $22, $11, -0x111\r
160         beq             $22, $0, .+16\r
161         nop\r
162         b               error_loop\r
163         nop\r
164 \r
165         addiu   $22, $0, 0x00\r
166         addiu   $22, $12, -0x112\r
167         beq             $22, $0, .+16\r
168         nop\r
169         b               error_loop\r
170         nop\r
171 \r
172         addiu   $22, $0, 0x00\r
173         addiu   $22, $13, -0x113\r
174         beq             $22, $0, .+16\r
175         nop\r
176         b               error_loop\r
177         nop\r
178 \r
179         addiu   $22, $0, 0x00\r
180         addiu   $22, $14, -0x114\r
181         beq             $22, $0, .+16\r
182         nop\r
183         b               error_loop\r
184         nop\r
185 \r
186         addiu   $22, $0, 0x00\r
187         addiu   $22, $15, -0x115\r
188         beq             $22, $0, .+16\r
189         nop\r
190         b               error_loop\r
191         nop\r
192 \r
193         addiu   $22, $0, 0x00\r
194         addiu   $22, $16, -0x116\r
195         beq             $22, $0, .+16\r
196         nop\r
197         b               error_loop\r
198         nop\r
199 \r
200         addiu   $22, $0, 0x00\r
201         addiu   $22, $17, -0x117\r
202         beq             $22, $0, .+16\r
203         nop\r
204         b               error_loop\r
205         nop\r
206 \r
207         addiu   $22, $0, 0x00\r
208         addiu   $22, $18, -0x118\r
209         beq             $22, $0, .+16\r
210         nop\r
211         b               error_loop\r
212         nop\r
213 \r
214         addiu   $22, $0, 0x00\r
215         addiu   $22, $19, -0x119\r
216         beq             $22, $0, .+16\r
217         nop\r
218         b               error_loop\r
219         nop\r
220 \r
221         addiu   $22, $0, 0x00\r
222         addiu   $22, $20, -0x120\r
223         beq             $22, $0, .+16\r
224         nop\r
225         b               error_loop\r
226         nop\r
227 \r
228         addiu   $22, $0, 0x00\r
229         addiu   $22, $21, -0x121\r
230         beq             $22, $0, .+16\r
231         nop\r
232         b               error_loop\r
233         nop\r
234 \r
235         addiu   $22, $0, 0x00\r
236         addiu   $22, $23, -0x123\r
237         beq             $22, $0, .+16\r
238         nop\r
239         b               error_loop\r
240         nop\r
241 \r
242         addiu   $22, $0, 0x00\r
243         addiu   $22, $24, -0x124\r
244         beq             $22, $0, .+16\r
245         nop\r
246         b               error_loop\r
247         nop\r
248 \r
249         addiu   $22, $0, 0x00\r
250         addiu   $22, $25, -0x125\r
251         beq             $22, $0, .+16\r
252         nop\r
253         b               error_loop\r
254         nop\r
255 \r
256         addiu   $22, $0, 0x00\r
257         addiu   $22, $30, -0x130\r
258         beq             $22, $0, .+16\r
259         nop\r
260         b               error_loop\r
261         nop\r
262 \r
263         mfhi    $22\r
264         addiu   $22, $22, -0x131\r
265         beq             $22, $0, .+16\r
266         nop\r
267         b               error_loop\r
268         nop\r
269 \r
270         mflo    $22, $ac1\r
271         addiu   $22, $22, -0x132\r
272         beq             $22, $0, .+16\r
273         nop\r
274         b               error_loop\r
275         nop\r
276 \r
277         /* No errors detected.  Increment the loop count so the check timer knows\r
278         this task is still running without error, then loop back to do it all\r
279         again.  The address of the loop counter is in $4. */\r
280         lw              $22, 0( $4 )\r
281         addiu   $22, $22, 0x01\r
282         sw              $22, 0( $4 )\r
283         b               vRegTest1Loop\r
284         nop\r
285 \r
286         .end    vRegTest1\r
287 \r
288 \r
289         .set    noreorder\r
290         .set    noat\r
291         .ent    vRegTest2\r
292 \r
293 vRegTest2:\r
294         addiu   $1, $0, 0x21\r
295         addiu   $2, $0, 0x22\r
296         addiu   $3, $0, 0x23\r
297         /* $4 contains the address of the loop counter - don't mess with $4. */\r
298         addiu   $5, $0, 0x25\r
299         addiu   $6, $0, 0x26\r
300         addiu   $7, $0, 0x27\r
301         addiu   $8, $0, 0x28\r
302         addiu   $9, $0, 0x29\r
303         addiu   $10, $0, 0x210\r
304         addiu   $11, $0, 0x211\r
305         addiu   $12, $0, 0x212\r
306         addiu   $13, $0, 0x213\r
307         addiu   $14, $0, 0x214\r
308         addiu   $15, $0, 0x215\r
309         addiu   $16, $0, 0x216\r
310         addiu   $17, $0, 0x217\r
311         addiu   $18, $0, 0x218\r
312         addiu   $19, $0, 0x219\r
313         addiu   $20, $0, 0x220\r
314         addiu   $21, $0, 0x221\r
315         addiu   $23, $0, 0x223\r
316         addiu   $24, $0, 0x224\r
317         addiu   $25, $0, 0x225\r
318         addiu   $30, $0, 0x230\r
319         addiu   $22, $0, 0x231\r
320         mthi    $22\r
321         addiu   $22, $0, 0x232\r
322         mtlo    $22\r
323 \r
324 vRegTest2Loop:\r
325         addiu   $22, $0, 0x00\r
326         addiu   $22, $1, -0x21\r
327         beq             $22, $0, .+16\r
328         nop\r
329         b               error_loop\r
330         nop\r
331 \r
332         addiu   $22, $0, 0x00\r
333         addiu   $22, $2, -0x22\r
334         beq             $22, $0, .+16\r
335         nop\r
336         b               error_loop\r
337         nop\r
338 \r
339         addiu   $22, $0, 0x00\r
340         addiu   $22, $3, -0x23\r
341         beq             $22, $0, .+16\r
342         nop\r
343         b               error_loop\r
344         nop\r
345 \r
346         addiu   $22, $0, 0x00\r
347         addiu   $22, $5, -0x25\r
348         beq             $22, $0, .+16\r
349         nop\r
350         b               error_loop\r
351         nop\r
352 \r
353         addiu   $22, $0, 0x00\r
354         addiu   $22, $6, -0x26\r
355         beq             $22, $0, .+16\r
356         nop\r
357         b               error_loop\r
358         nop\r
359 \r
360         addiu   $22, $0, 0x00\r
361         addiu   $22, $7, -0x27\r
362         beq             $22, $0, .+16\r
363         nop\r
364         b               error_loop\r
365         nop\r
366 \r
367         addiu   $22, $0, 0x00\r
368         addiu   $22, $8, -0x28\r
369         beq             $22, $0, .+16\r
370         nop\r
371         b               error_loop\r
372         nop\r
373 \r
374         addiu   $22, $0, 0x00\r
375         addiu   $22, $9, -0x29\r
376         beq             $22, $0, .+16\r
377         nop\r
378         b               error_loop\r
379         nop\r
380 \r
381         addiu   $22, $0, 0x00\r
382         addiu   $22, $10, -0x210\r
383         beq             $22, $0, .+16\r
384         nop\r
385         b               error_loop\r
386         nop\r
387 \r
388         addiu   $22, $0, 0x00\r
389         addiu   $22, $11, -0x211\r
390         beq             $22, $0, .+16\r
391         nop\r
392         b               error_loop\r
393         nop\r
394 \r
395         addiu   $22, $0, 0x00\r
396         addiu   $22, $12, -0x212\r
397         beq             $22, $0, .+16\r
398         nop\r
399         b               error_loop\r
400         nop\r
401 \r
402         addiu   $22, $0, 0x00\r
403         addiu   $22, $13, -0x213\r
404         beq             $22, $0, .+16\r
405         nop\r
406         b               error_loop\r
407         nop\r
408 \r
409         addiu   $22, $0, 0x00\r
410         addiu   $22, $14, -0x214\r
411         beq             $22, $0, .+16\r
412         nop\r
413         b               error_loop\r
414         nop\r
415 \r
416         addiu   $22, $0, 0x00\r
417         addiu   $22, $15, -0x215\r
418         beq             $22, $0, .+16\r
419         nop\r
420         b               error_loop\r
421         nop\r
422 \r
423         addiu   $22, $0, 0x00\r
424         addiu   $22, $16, -0x216\r
425         beq             $22, $0, .+16\r
426         nop\r
427         b               error_loop\r
428         nop\r
429 \r
430         addiu   $22, $0, 0x00\r
431         addiu   $22, $17, -0x217\r
432         beq             $22, $0, .+16\r
433         nop\r
434         b               error_loop\r
435         nop\r
436 \r
437         addiu   $22, $0, 0x00\r
438         addiu   $22, $18, -0x218\r
439         beq             $22, $0, .+16\r
440         nop\r
441         b               error_loop\r
442         nop\r
443 \r
444         addiu   $22, $0, 0x00\r
445         addiu   $22, $19, -0x219\r
446         beq             $22, $0, .+16\r
447         nop\r
448         b               error_loop\r
449         nop\r
450 \r
451         addiu   $22, $0, 0x00\r
452         addiu   $22, $20, -0x220\r
453         beq             $22, $0, .+16\r
454         nop\r
455         b               error_loop\r
456         nop\r
457 \r
458         addiu   $22, $0, 0x00\r
459         addiu   $22, $21, -0x221\r
460         beq             $22, $0, .+16\r
461         nop\r
462         b               error_loop\r
463         nop\r
464 \r
465         addiu   $22, $0, 0x00\r
466         addiu   $22, $23, -0x223\r
467         beq             $22, $0, .+16\r
468         nop\r
469         b               error_loop\r
470         nop\r
471 \r
472         addiu   $22, $0, 0x00\r
473         addiu   $22, $24, -0x224\r
474         beq             $22, $0, .+16\r
475         nop\r
476         b               error_loop\r
477         nop\r
478 \r
479         addiu   $22, $0, 0x00\r
480         addiu   $22, $25, -0x225\r
481         beq             $22, $0, .+16\r
482         nop\r
483         b               error_loop\r
484         nop\r
485 \r
486         addiu   $22, $0, 0x00\r
487         addiu   $22, $30, -0x230\r
488         beq             $22, $0, .+16\r
489         nop\r
490         b               error_loop\r
491         nop\r
492 \r
493         mfhi    $22\r
494         addiu   $22, $22, -0x231\r
495         beq             $22, $0, .+16\r
496         nop\r
497         b               error_loop\r
498         nop\r
499 \r
500         mflo    $22, $ac1\r
501         addiu   $22, $22, -0x232\r
502         beq             $22, $0, .+16\r
503         nop\r
504         b               error_loop\r
505         nop\r
506 \r
507         /* No errors detected.  Increment the loop count so the check timer knows\r
508         this task is still running without error, then loop back to do it all\r
509         again.  The address of the loop counter is in $4. */\r
510         lw              $22, 0( $4 )\r
511         addiu   $22, $22, 0x01\r
512         sw              $22, 0( $4 )\r
513         b               vRegTest2Loop\r
514         nop\r
515 \r
516         .end    vRegTest2\r
517 \r
518 \r
519 \r