]> git.sur5r.net Git - freertos/blob - FreeRTOS/Demo/CORTEX_M0_Infineon_XMC1000_IAR_Keil_GCC/IAR_Specific/RegTest_IAR.s
Update version number ready for release.
[freertos] / FreeRTOS / Demo / CORTEX_M0_Infineon_XMC1000_IAR_Keil_GCC / IAR_Specific / RegTest_IAR.s
1 /*\r
2     FreeRTOS V8.0.1 - 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  * "Reg test" tasks - These fill the registers with known values, then check\r
68  * that each register maintains its expected value for the lifetime of the\r
69  * task.  Each task uses a different set of values.  The reg test tasks execute\r
70  * with a very low priority, so get preempted very frequently.  A register\r
71  * containing an unexpected value is indicative of an error in the context\r
72  * switching mechanism.\r
73  */\r
74  \r
75         RSEG    CODE:CODE(2)\r
76         thumb\r
77 \r
78 \r
79         EXTERN ulRegTest1LoopCounter\r
80         EXTERN ulRegTest2LoopCounter\r
81 \r
82         PUBLIC vRegTest1Task\r
83         PUBLIC vRegTest2Task\r
84 \r
85 /*-----------------------------------------------------------*/\r
86 vRegTest1Task\r
87 \r
88         /* Fill the core registers with known values.  This is only done once. */\r
89         movs r1, #101\r
90         movs r2, #102\r
91         movs r3, #103\r
92         movs r4, #104\r
93         movs r5, #105\r
94         movs r6, #106\r
95         movs r7, #107\r
96         movs r0, #108\r
97         mov      r8, r0\r
98         movs r0, #109\r
99         mov  r9, r0\r
100         movs r0, #110\r
101         mov      r10, r0\r
102         movs r0, #111\r
103         mov      r11, r0\r
104         movs r0, #112\r
105         mov  r12, r0\r
106         movs r0, #100\r
107 \r
108 reg1_loop\r
109         /* Repeatedly check that each register still contains the value written to\r
110         it when the task started. */\r
111         cmp     r0, #100\r
112         bne     reg1_error_loop\r
113         cmp     r1, #101\r
114         bne     reg1_error_loop\r
115         cmp     r2, #102\r
116         bne     reg1_error_loop\r
117         cmp r3, #103\r
118         bne     reg1_error_loop\r
119         cmp     r4, #104\r
120         bne     reg1_error_loop\r
121         cmp     r5, #105\r
122         bne     reg1_error_loop\r
123         cmp     r6, #106\r
124         bne     reg1_error_loop\r
125         cmp     r7, #107\r
126         bne     reg1_error_loop\r
127         movs r0, #108\r
128         cmp     r8, r0\r
129         bne     reg1_error_loop\r
130         movs r0, #109\r
131         cmp     r9, r0\r
132         bne     reg1_error_loop\r
133         movs r0, #110\r
134         cmp     r10, r0\r
135         bne     reg1_error_loop\r
136         movs r0, #111\r
137         cmp     r11, r0\r
138         bne     reg1_error_loop\r
139         movs r0, #112\r
140         cmp     r12, r0\r
141         bne     reg1_error_loop\r
142 \r
143         /* Everything passed, increment the loop counter. */\r
144         push { r1 }\r
145         ldr     r0, =ulRegTest1LoopCounter\r
146         ldr r1, [r0]\r
147         adds r1, r1, #1\r
148         str r1, [r0]\r
149 \r
150         /* Yield to increase test coverage. */\r
151         movs r0, #0x01\r
152         ldr r1, =0xe000ed04 /* NVIC_INT_CTRL */\r
153         lsls r0 ,r0, #28 /* Shift to PendSV bit */\r
154         str r0, [r1]\r
155         dsb\r
156         pop { r1 }\r
157 \r
158         /* Start again. */\r
159         movs r0, #100\r
160         b reg1_loop\r
161 \r
162 reg1_error_loop\r
163         /* If this line is hit then there was an error in a core register value.\r
164         The loop ensures the loop counter stops incrementing. */\r
165         b reg1_error_loop\r
166         nop\r
167 \r
168 \r
169 \r
170 vRegTest2Task\r
171 \r
172         /* Fill the core registers with known values.  This is only done once. */\r
173         movs r1, #1\r
174         movs r2, #2\r
175         movs r3, #3\r
176         movs r4, #4\r
177         movs r5, #5\r
178         movs r6, #6\r
179         movs r7, #7\r
180         movs r0, #8\r
181         mov     r8, r0\r
182         movs r0, #9\r
183         mov r9, r0\r
184         movs r0, #10\r
185         mov     r10, r0\r
186         movs r0, #11\r
187         mov     r11, r0\r
188         movs r0, #12\r
189         mov r12, r0\r
190         movs r0, #10\r
191 \r
192 reg2_loop\r
193         /* Repeatedly check that each register still contains the value written to\r
194         it when the task started. */\r
195         cmp     r0, #10\r
196         bne     reg2_error_loop\r
197         cmp     r1, #1\r
198         bne     reg2_error_loop\r
199         cmp     r2, #2\r
200         bne     reg2_error_loop\r
201         cmp r3, #3\r
202         bne     reg2_error_loop\r
203         cmp     r4, #4\r
204         bne     reg2_error_loop\r
205         cmp     r5, #5\r
206         bne     reg2_error_loop\r
207         cmp     r6, #6\r
208         bne     reg2_error_loop\r
209         cmp     r7, #7\r
210         bne     reg2_error_loop\r
211         movs r0, #8\r
212         cmp     r8, r0\r
213         bne     reg2_error_loop\r
214         movs r0, #9\r
215         cmp     r9, r0\r
216         bne     reg2_error_loop\r
217         movs r0, #10\r
218         cmp     r10, r0\r
219         bne     reg2_error_loop\r
220         movs r0, #11\r
221         cmp     r11, r0\r
222         bne     reg2_error_loop\r
223         movs r0, #12\r
224         cmp     r12, r0\r
225         bne     reg2_error_loop\r
226 \r
227         /* Everything passed, increment the loop counter. */\r
228         push { r1 }\r
229         ldr     r0, =ulRegTest2LoopCounter\r
230         ldr r1, [r0]\r
231         adds r1, r1, #1\r
232         str r1, [r0]\r
233         pop { r1 }\r
234 \r
235         /* Start again. */\r
236         movs r0, #10\r
237         b reg2_loop\r
238 \r
239 reg2_error_loop\r
240         ;/* If this line is hit then there was an error in a core register value.\r
241         ;The loop ensures the loop counter stops incrementing. */\r
242         b reg2_error_loop\r
243         nop\r
244 \r
245         END\r