]> git.sur5r.net Git - freertos/blob - Demo/AVR_ATMega323_WinAVR/regtest.c
Update to V4.6.1 - including PIC32MX port.
[freertos] / Demo / AVR_ATMega323_WinAVR / regtest.c
1 /*\r
2         FreeRTOS.org V4.6.1 - Copyright (C) 2003-2007 Richard Barry.\r
3 \r
4         This file is part of the FreeRTOS.org distribution.\r
5 \r
6         FreeRTOS.org is free software; you can redistribute it and/or modify\r
7         it under the terms of the GNU General Public License as published by\r
8         the Free Software Foundation; either version 2 of the License, or\r
9         (at your option) any later version.\r
10 \r
11         FreeRTOS.org is distributed in the hope that it will be useful,\r
12         but WITHOUT ANY WARRANTY; without even the implied warranty of\r
13         MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
14         GNU General Public License for more details.\r
15 \r
16         You should have received a copy of the GNU General Public License\r
17         along with FreeRTOS.org; if not, write to the Free Software\r
18         Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA\r
19 \r
20         A special exception to the GPL can be applied should you wish to distribute\r
21         a combined work that includes FreeRTOS.org, without being obliged to provide\r
22         the source code for any proprietary components.  See the licensing section\r
23         of http://www.FreeRTOS.org for full details of how and when the exception\r
24         can be applied.\r
25 \r
26         ***************************************************************************\r
27         See http://www.FreeRTOS.org for documentation, latest information, license\r
28         and contact details.  Please ensure to read the configuration and relevant\r
29         port sections of the online documentation.\r
30 \r
31         Also see http://www.SafeRTOS.com a version that has been certified for use\r
32         in safety critical systems, plus commercial licensing, development and\r
33         support options.\r
34         ***************************************************************************\r
35 */\r
36 \r
37 /* Scheduler include files. */\r
38 #include "FreeRTOS.h"\r
39 #include "task.h"\r
40 \r
41 /* Demo file headers. */\r
42 #include "regtest.h"\r
43 \r
44 /*\r
45  * Test tasks that sets registers to known values, then checks to ensure the\r
46  * values remain as expected.  Test 1 and test 2 use different values.\r
47  */\r
48 static void prvRegisterCheck1( void *pvParameters );\r
49 static void prvRegisterCheck2( void *pvParameters );\r
50 \r
51 /* Set to a non zero value should an error be found. */\r
52 portBASE_TYPE xRegTestError = pdFALSE;\r
53 \r
54 /*-----------------------------------------------------------*/\r
55 \r
56 void vStartRegTestTasks( void )\r
57 {\r
58         xTaskCreate( prvRegisterCheck1, "Reg1", configMINIMAL_STACK_SIZE, NULL, tskIDLE_PRIORITY, NULL );\r
59         xTaskCreate( prvRegisterCheck2, "Reg2", configMINIMAL_STACK_SIZE, NULL, tskIDLE_PRIORITY, NULL );               \r
60 }\r
61 /*-----------------------------------------------------------*/\r
62 \r
63 portBASE_TYPE xAreRegTestTasksStillRunning( void )\r
64 {\r
65 portBASE_TYPE xReturn;\r
66 \r
67         /* If a register was found to contain an unexpected value then the\r
68         xRegTestError variable would have been set to a non zero value. */\r
69         if( xRegTestError == pdFALSE )\r
70         {\r
71                 xReturn = pdTRUE;\r
72         }\r
73         else\r
74         {\r
75                 xReturn = pdFALSE;\r
76         }\r
77         \r
78         return xReturn;\r
79 }\r
80 /*-----------------------------------------------------------*/\r
81 \r
82 static void prvRegisterCheck1( void *pvParameters )\r
83 {\r
84         ( void ) pvParameters;\r
85 \r
86         for( ;; )\r
87         {\r
88                 asm(    "LDI    r31,    5"              );              \r
89                 asm(    "MOV    r0,             r31"    );\r
90                 asm(    "LDI    r31,    6"              );\r
91                 asm(    "MOV    r1,             r31"    );\r
92                 asm(    "LDI    r31,    7"              );\r
93                 asm(    "MOV    r2,             r31"    );\r
94                 asm(    "LDI    r31,    8"              );\r
95                 asm(    "MOV    r3,             r31"    );\r
96                 asm(    "LDI    r31,    9"              );\r
97                 asm(    "MOV    r4,             r31"    );\r
98                 asm(    "LDI    r31,    10"             );\r
99                 asm(    "MOV    r5,             r31"    );\r
100                 asm(    "LDI    r31,    11"             );\r
101                 asm(    "MOV    r6,             r31"    );\r
102                 asm(    "LDI    r31,    12"             );\r
103                 asm(    "MOV    r7,             r31"    );\r
104                 asm(    "LDI    r31,    13"             );\r
105                 asm(    "MOV    r8,             r31"    );\r
106                 asm(    "LDI    r31,    14"             );\r
107                 asm(    "MOV    r9,             r31"    );\r
108                 asm(    "LDI    r31,    15"             );\r
109                 asm(    "MOV    r10,    r31"    );\r
110                 asm(    "LDI    r31,    16"             );\r
111                 asm(    "MOV    r11,    r31"    );\r
112                 asm(    "LDI    r31,    17"             );\r
113                 asm(    "MOV    r12,    r31"    );\r
114                 asm(    "LDI    r31,    18"             );\r
115                 asm(    "MOV    r13,    r31"    );\r
116                 asm(    "LDI    r31,    19"             );\r
117                 asm(    "MOV    r14,    r31"    );\r
118                 asm(    "LDI    r31,    20"             );\r
119                 asm(    "MOV    r15,    r31"    );\r
120                 asm(    "LDI    r16,    21"             );\r
121                 asm(    "LDI    r17,    22"             );\r
122                 asm(    "LDI    r18,    23"             );\r
123                 asm(    "LDI    r19,    24"             );\r
124                 asm(    "LDI    r20,    25"             );\r
125                 asm(    "LDI    r21,    26"             );\r
126                 asm(    "LDI    r22,    27"             );\r
127                 asm(    "LDI    r23,    28"             );\r
128                 asm(    "LDI    r24,    29"             );\r
129                 asm(    "LDI    r25,    30"             );\r
130                 asm(    "LDI    r26,    31"             );\r
131                 asm(    "LDI    r27,    32"             );\r
132                 asm(    "LDI    r30,    33"             );\r
133 \r
134                 asm(    "LDI    r31,    5"                      );\r
135                 asm(    "CPSE   r31,    r0"                     );\r
136                 asm(    "STS    xRegTestError, r0"      );\r
137                 asm(    "LDI    r31,    6"                      );\r
138                 asm(    "CPSE   r31,    r1"                     );\r
139                 asm(    "STS    xRegTestError, r0"      );\r
140                 asm(    "LDI    r31,    7"                      );\r
141                 asm(    "CPSE   r31,    r2"                     );\r
142                 asm(    "STS    xRegTestError, r0"      );\r
143                 asm(    "LDI    r31,    8"                      );\r
144                 asm(    "CPSE   r31,    r3"                     );\r
145                 asm(    "STS    xRegTestError, r0"      );\r
146                 asm(    "LDI    r31,    9"                      );\r
147                 asm(    "CPSE   r31,    r4"                     );\r
148                 asm(    "STS    xRegTestError, r0"      );\r
149                 asm(    "LDI    r31,    10"                     );\r
150                 asm(    "CPSE   r31,    r5"                     );\r
151                 asm(    "STS    xRegTestError, r0"      );\r
152                 asm(    "LDI    r31,    11"                     );\r
153                 asm(    "CPSE   r31,    r6"                     );\r
154                 asm(    "STS    xRegTestError, r0"      );\r
155                 asm(    "LDI    r31,    12"                     );\r
156                 asm(    "CPSE   r31,    r7"                     );\r
157                 asm(    "STS    xRegTestError, r0"      );\r
158                 asm(    "LDI    r31,    13"                     );\r
159                 asm(    "CPSE   r31,    r8"                     );\r
160                 asm(    "STS    xRegTestError, r0"      );\r
161                 asm(    "LDI    r31,    14"                     );\r
162                 asm(    "CPSE   r31,    r9"                     );\r
163                 asm(    "STS    xRegTestError, r0"      );\r
164                 asm(    "LDI    r31,    15"                     );\r
165                 asm(    "CPSE   r31,    r10"            );\r
166                 asm(    "STS    xRegTestError, r0"      );\r
167                 asm(    "LDI    r31,    16"                     );\r
168                 asm(    "CPSE   r31,    r11"            );\r
169                 asm(    "STS    xRegTestError, r0"      );\r
170                 asm(    "LDI    r31,    17"                     );\r
171                 asm(    "CPSE   r31,    r12"            );\r
172                 asm(    "STS    xRegTestError, r0"      );\r
173                 asm(    "LDI    r31,    18"                     );\r
174                 asm(    "CPSE   r31,    r13"            );\r
175                 asm(    "STS    xRegTestError, r0"      );\r
176                 asm(    "LDI    r31,    19"                     );\r
177                 asm(    "CPSE   r31,    r14"            );\r
178                 asm(    "STS    xRegTestError, r0"      );\r
179                 asm(    "LDI    r31,    20"                     );\r
180                 asm(    "CPSE   r31,    r15"            );\r
181                 asm(    "STS    xRegTestError, r0"      );\r
182                 asm(    "LDI    r31,    21"                     );\r
183                 asm(    "CPSE   r31,    r16"            );\r
184                 asm(    "STS    xRegTestError, r0"      );\r
185                 asm(    "LDI    r31,    22"                     );\r
186                 asm(    "CPSE   r31,    r17"            );\r
187                 asm(    "STS    xRegTestError, r0"      );\r
188                 asm(    "LDI    r31,    23"                     );\r
189                 asm(    "CPSE   r31,    r18"            );\r
190                 asm(    "STS    xRegTestError, r0"      );\r
191                 asm(    "LDI    r31,    24"                     );\r
192                 asm(    "CPSE   r31,    r19"            );\r
193                 asm(    "STS    xRegTestError, r0"      );\r
194                 asm(    "LDI    r31,    25"                     );\r
195                 asm(    "CPSE   r31,    r20"            );\r
196                 asm(    "STS    xRegTestError, r0"      );\r
197                 asm(    "LDI    r31,    26"                     );\r
198                 asm(    "CPSE   r31,    r21"            );\r
199                 asm(    "STS    xRegTestError, r0"      );\r
200                 asm(    "LDI    r31,    27"                     );\r
201                 asm(    "CPSE   r31,    r22"            );\r
202                 asm(    "STS    xRegTestError, r0"      );\r
203                 asm(    "LDI    r31,    28"                     );\r
204                 asm(    "CPSE   r31,    r23"            );\r
205                 asm(    "STS    xRegTestError, r0"      );\r
206                 asm(    "LDI    r31,    29"                     );\r
207                 asm(    "CPSE   r31,    r24"            );\r
208                 asm(    "STS    xRegTestError, r0"      );\r
209                 asm(    "LDI    r31,    30"                     );\r
210                 asm(    "CPSE   r31,    r25"            );\r
211                 asm(    "STS    xRegTestError, r0"      );\r
212                 asm(    "LDI    r31,    31"                     );\r
213                 asm(    "CPSE   r31,    r26"            );\r
214                 asm(    "STS    xRegTestError, r0"      );\r
215                 asm(    "LDI    r31,    32"                     );\r
216                 asm(    "CPSE   r31,    r27"            );\r
217                 asm(    "STS    xRegTestError, r0"      );\r
218                 asm(    "LDI    r31,    33"                     );\r
219                 asm(    "CPSE   r31,    r30"            );\r
220                 asm(    "STS    xRegTestError, r0"      );\r
221         }\r
222 }\r
223 /*-----------------------------------------------------------*/\r
224 \r
225 static void prvRegisterCheck2( void *pvParameters )\r
226 {\r
227         ( void ) pvParameters;\r
228 \r
229         for( ;; )\r
230         {\r
231                 asm(    "LDI    r31,    1"              );              \r
232                 asm(    "MOV    r0,             r31"    );\r
233                 asm(    "LDI    r31,    2"              );\r
234                 asm(    "MOV    r1,             r31"    );\r
235                 asm(    "LDI    r31,    3"              );\r
236                 asm(    "MOV    r2,             r31"    );\r
237                 asm(    "LDI    r31,    4"              );\r
238                 asm(    "MOV    r3,             r31"    );\r
239                 asm(    "LDI    r31,    5"              );\r
240                 asm(    "MOV    r4,             r31"    );\r
241                 asm(    "LDI    r31,    6"              );\r
242                 asm(    "MOV    r5,             r31"    );\r
243                 asm(    "LDI    r31,    7"              );\r
244                 asm(    "MOV    r6,             r31"    );\r
245                 asm(    "LDI    r31,    8"              );\r
246                 asm(    "MOV    r7,             r31"    );\r
247                 asm(    "LDI    r31,    9"              );\r
248                 asm(    "MOV    r8,             r31"    );\r
249                 asm(    "LDI    r31,    10"             );\r
250                 asm(    "MOV    r9,             r31"    );\r
251                 asm(    "LDI    r31,    11"             );\r
252                 asm(    "MOV    r10,    r31"    );\r
253                 asm(    "LDI    r31,    12"             );\r
254                 asm(    "MOV    r11,    r31"    );\r
255                 asm(    "LDI    r31,    13"             );\r
256                 asm(    "MOV    r12,    r31"    );\r
257                 asm(    "LDI    r31,    14"             );\r
258                 asm(    "MOV    r13,    r31"    );\r
259                 asm(    "LDI    r31,    15"             );\r
260                 asm(    "MOV    r14,    r31"    );\r
261                 asm(    "LDI    r31,    16"             );\r
262                 asm(    "MOV    r15,    r31"    );\r
263                 asm(    "LDI    r16,    17"             );\r
264                 asm(    "LDI    r17,    18"             );\r
265                 asm(    "LDI    r18,    19"             );\r
266                 asm(    "LDI    r19,    20"             );\r
267                 asm(    "LDI    r20,    21"             );\r
268                 asm(    "LDI    r21,    22"             );\r
269                 asm(    "LDI    r22,    23"             );\r
270                 asm(    "LDI    r23,    24"             );\r
271                 asm(    "LDI    r24,    25"             );\r
272                 asm(    "LDI    r25,    26"             );\r
273                 asm(    "LDI    r26,    27"             );\r
274                 asm(    "LDI    r27,    28"             );\r
275                 asm(    "LDI    r30,    29"             );\r
276 \r
277                 asm(    "LDI    r31,    1"                      );\r
278                 asm(    "CPSE   r31,    r0"                     );\r
279                 asm(    "STS    xRegTestError, r0"      );\r
280                 asm(    "LDI    r31,    2"                      );\r
281                 asm(    "CPSE   r31,    r1"                     );\r
282                 asm(    "STS    xRegTestError, r0"      );\r
283                 asm(    "LDI    r31,    3"                      );\r
284                 asm(    "CPSE   r31,    r2"                     );\r
285                 asm(    "STS    xRegTestError, r0"      );\r
286                 asm(    "LDI    r31,    4"                      );\r
287                 asm(    "CPSE   r31,    r3"                     );\r
288                 asm(    "STS    xRegTestError, r0"      );\r
289                 asm(    "LDI    r31,    5"                      );\r
290                 asm(    "CPSE   r31,    r4"                     );\r
291                 asm(    "STS    xRegTestError, r0"      );\r
292                 asm(    "LDI    r31,    6"                      );\r
293                 asm(    "CPSE   r31,    r5"                     );\r
294                 asm(    "STS    xRegTestError, r0"      );\r
295                 asm(    "LDI    r31,    7"                      );\r
296                 asm(    "CPSE   r31,    r6"                     );\r
297                 asm(    "STS    xRegTestError, r0"      );\r
298                 asm(    "LDI    r31,    8"                      );\r
299                 asm(    "CPSE   r31,    r7"                     );\r
300                 asm(    "STS    xRegTestError, r0"      );\r
301                 asm(    "LDI    r31,    9"                      );\r
302                 asm(    "CPSE   r31,    r8"                     );\r
303                 asm(    "STS    xRegTestError, r0"      );\r
304                 asm(    "LDI    r31,    10"                     );\r
305                 asm(    "CPSE   r31,    r9"                     );\r
306                 asm(    "STS    xRegTestError, r0"      );\r
307                 asm(    "LDI    r31,    11"                     );\r
308                 asm(    "CPSE   r31,    r10"            );\r
309                 asm(    "STS    xRegTestError, r0"      );\r
310                 asm(    "LDI    r31,    12"                     );\r
311                 asm(    "CPSE   r31,    r11"            );\r
312                 asm(    "STS    xRegTestError, r0"      );\r
313                 asm(    "LDI    r31,    13"                     );\r
314                 asm(    "CPSE   r31,    r12"            );\r
315                 asm(    "STS    xRegTestError, r0"      );\r
316                 asm(    "LDI    r31,    14"                     );\r
317                 asm(    "CPSE   r31,    r13"            );\r
318                 asm(    "STS    xRegTestError, r0"      );\r
319                 asm(    "LDI    r31,    15"                     );\r
320                 asm(    "CPSE   r31,    r14"            );\r
321                 asm(    "STS    xRegTestError, r0"      );\r
322                 asm(    "LDI    r31,    16"                     );\r
323                 asm(    "CPSE   r31,    r15"            );\r
324                 asm(    "STS    xRegTestError, r0"      );\r
325                 asm(    "LDI    r31,    17"                     );\r
326                 asm(    "CPSE   r31,    r16"            );\r
327                 asm(    "STS    xRegTestError, r0"      );\r
328                 asm(    "LDI    r31,    18"                     );\r
329                 asm(    "CPSE   r31,    r17"            );\r
330                 asm(    "STS    xRegTestError, r0"      );\r
331                 asm(    "LDI    r31,    19"                     );\r
332                 asm(    "CPSE   r31,    r18"            );\r
333                 asm(    "STS    xRegTestError, r0"      );\r
334                 asm(    "LDI    r31,    20"                     );\r
335                 asm(    "CPSE   r31,    r19"            );\r
336                 asm(    "STS    xRegTestError, r0"      );\r
337                 asm(    "LDI    r31,    21"                     );\r
338                 asm(    "CPSE   r31,    r20"            );\r
339                 asm(    "STS    xRegTestError, r0"      );\r
340                 asm(    "LDI    r31,    22"                     );\r
341                 asm(    "CPSE   r31,    r21"            );\r
342                 asm(    "STS    xRegTestError, r0"      );\r
343                 asm(    "LDI    r31,    23"                     );\r
344                 asm(    "CPSE   r31,    r22"            );\r
345                 asm(    "STS    xRegTestError, r0"      );\r
346                 asm(    "LDI    r31,    24"                     );\r
347                 asm(    "CPSE   r31,    r23"            );\r
348                 asm(    "STS    xRegTestError, r0"      );\r
349                 asm(    "LDI    r31,    25"                     );\r
350                 asm(    "CPSE   r31,    r24"            );\r
351                 asm(    "STS    xRegTestError, r0"      );\r
352                 asm(    "LDI    r31,    26"                     );\r
353                 asm(    "CPSE   r31,    r25"            );\r
354                 asm(    "STS    xRegTestError, r0"      );\r
355                 asm(    "LDI    r31,    27"                     );\r
356                 asm(    "CPSE   r31,    r26"            );\r
357                 asm(    "STS    xRegTestError, r0"      );\r
358                 asm(    "LDI    r31,    28"                     );\r
359                 asm(    "CPSE   r31,    r27"            );\r
360                 asm(    "STS    xRegTestError, r0"      );\r
361                 asm(    "LDI    r31,    29"                     );\r
362                 asm(    "CPSE   r31,    r30"            );\r
363                 asm(    "STS    xRegTestError, r0"      );\r
364         }\r
365 }\r
366 \r