]> git.sur5r.net Git - freertos/blob - FreeRTOS/Demo/CORTEX_M0_Infineon_XMC1000_IAR_Keil_GCC/Keil_Specific/RegTest_Keil.s
Rename CORTEX_M)_Infineion_Boot_Kits_IAR_Keil to CORTEX_M0_Infineon_XMC1000_IAR_Keil_...
[freertos] / FreeRTOS / Demo / CORTEX_M0_Infineon_XMC1000_IAR_Keil_GCC / Keil_Specific / RegTest_Keil.s
1 ;/*\r
2 ;    FreeRTOS V7.5.2 - Copyright (C) 2013 Real Time Engineers Ltd.\r
3 ;\r
4 ;    VISIT http://www.FreeRTOS.org TO ENSURE YOU ARE USING THE LATEST VERSION.\r
5 ;\r
6 ;    ***************************************************************************\r
7 ;     *                                                                       *\r
8 ;     *    FreeRTOS provides completely free yet professionally developed,    *\r
9 ;     *    robust, strictly quality controlled, supported, and cross          *\r
10 ;     *    platform software that has become a de facto standard.             *\r
11 ;     *                                                                       *\r
12 ;     *    Help yourself get started quickly and support the FreeRTOS         *\r
13 ;     *    project by purchasing a FreeRTOS tutorial book, reference          *\r
14 ;     *    manual, or both from: http://www.FreeRTOS.org/Documentation        *\r
15 ;     *                                                                       *\r
16 ;     *    Thank you!                                                         *\r
17 ;     *                                                                       *\r
18 ;    ***************************************************************************\r
19 ;\r
20 ;    This file is part of the FreeRTOS distribution.\r
21 ;\r
22 ;    FreeRTOS is free software; you can redistribute it and/or modify it under\r
23 ;    the terms of the GNU General Public License (version 2) as published by the\r
24 ;    Free Software Foundation >>!AND MODIFIED BY!<< the FreeRTOS exception.\r
25 ;\r
26 ;    >>! NOTE: The modification to the GPL is included to allow you to distribute\r
27 ;    >>! a combined work that includes FreeRTOS without being obliged to provide\r
28 ;    >>! the source code for proprietary components outside of the FreeRTOS\r
29 ;    >>! kernel.\r
30 ;\r
31 ;    FreeRTOS is distributed in the hope that it will be useful, but WITHOUT ANY\r
32 ;    WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\r
33 ;    FOR A PARTICULAR PURPOSE.  Full license text is available from the following\r
34 ;    link: http://www.freertos.org/a00114.html\r
35 ;\r
36 ;    1 tab == 4 spaces!\r
37 ;\r
38 ;    ***************************************************************************\r
39 ;     *                                                                       *\r
40 ;     *    Having a problem?  Start by reading the FAQ "My application does   *\r
41 ;     *    not run, what could be wrong?"                                     *\r
42 ;     *                                                                       *\r
43 ;     *    http://www.FreeRTOS.org/FAQHelp.html                               *\r
44 ;     *                                                                       *\r
45 ;    ***************************************************************************\r
46 ;\r
47 ;    http://www.FreeRTOS.org - Documentation, books, training, latest versions,\r
48 ;    license and Real Time Engineers Ltd. contact details.\r
49 ;\r
50 ;    http://www.FreeRTOS.org/plus - A selection of FreeRTOS ecosystem products,\r
51 ;    including FreeRTOS+Trace - an indispensable productivity tool, a DOS\r
52 ;    compatible FAT file system, and our tiny thread aware UDP/IP stack.\r
53 ;\r
54 ;    http://www.OpenRTOS.com - Real Time Engineers ltd license FreeRTOS to High\r
55 ;    Integrity Systems to sell under the OpenRTOS brand.  Low cost OpenRTOS\r
56 ;    licenses offer ticketed support, indemnification and middleware.\r
57 ;\r
58 ;    http://www.SafeRTOS.com - High Integrity Systems also provide a safety\r
59 ;    engineered and independently SIL3 certified version for use in safety and\r
60 ;    mission critical applications that require provable dependability.\r
61 ;\r
62 ;    1 tab == 4 spaces!\r
63 ;*/\r
64 \r
65         PRESERVE8\r
66         THUMB\r
67         \r
68 \r
69         IMPORT ulRegTest1LoopCounter\r
70         IMPORT ulRegTest2LoopCounter\r
71 \r
72         EXTERN vPortYield ;////////////////////////////////////////////////////////////////////////////////////////\r
73 \r
74         EXPORT vRegTest1Task\r
75         EXPORT vRegTest2Task\r
76         \r
77         AREA    |.text|, CODE, READONLY\r
78 \r
79 ;/*-----------------------------------------------------------*/\r
80 vRegTest1Task PROC\r
81 \r
82         ;/* Fill the core registers with known values.  This is only done once. */\r
83         movs r1, #101\r
84         movs r2, #102\r
85         movs r3, #103\r
86         movs r4, #104\r
87         movs r5, #105\r
88         movs r6, #106\r
89         movs r7, #107\r
90         movs r0, #108\r
91         mov      r8, r0\r
92         movs r0, #109\r
93         mov  r9, r0\r
94         movs r0, #110\r
95         mov      r10, r0\r
96         movs r0, #111\r
97         mov      r11, r0\r
98         movs r0, #112\r
99         mov  r12, r0\r
100         movs r0, #100\r
101 \r
102 reg1_loop\r
103         ;/* Repeatedly check that each register still contains the value written to\r
104         ;it when the task started. */\r
105         cmp     r0, #100\r
106         bne     reg1_error_loop\r
107         cmp     r1, #101\r
108         bne     reg1_error_loop\r
109         cmp     r2, #102\r
110         bne     reg1_error_loop\r
111         cmp r3, #103\r
112         bne     reg1_error_loop\r
113         cmp     r4, #104\r
114         bne     reg1_error_loop\r
115         cmp     r5, #105\r
116         bne     reg1_error_loop\r
117         cmp     r6, #106\r
118         bne     reg1_error_loop\r
119         cmp     r7, #107\r
120         bne     reg1_error_loop\r
121         movs r0, #108\r
122         cmp     r8, r0\r
123         bne     reg1_error_loop\r
124         movs r0, #109\r
125         cmp     r9, r0\r
126         bne     reg1_error_loop\r
127         movs r0, #110\r
128         cmp     r10, r0\r
129         bne     reg1_error_loop\r
130         movs r0, #111\r
131         cmp     r11, r0\r
132         bne     reg1_error_loop\r
133         movs r0, #112\r
134         cmp     r12, r0\r
135         bne     reg1_error_loop\r
136 \r
137         ;/* Everything passed, increment the loop counter. */\r
138         push { r1 }\r
139         ldr     r0, =ulRegTest1LoopCounter\r
140         ldr r1, [r0]\r
141         adds r1, r1, #1\r
142         str r1, [r0]\r
143         pop { r1 }\r
144 \r
145         ;/* Start again. */\r
146         movs r0, #100\r
147         \r
148         push {r0-r1}\r
149         bl vPortYield   ;;///////////////////////////////////////////////////////////////////////////////////////////////////\r
150         pop {r0-r1}\r
151         \r
152         b reg1_loop\r
153 \r
154 reg1_error_loop\r
155         ;/* If this line is hit then there was an error in a core register value.\r
156         ;The loop ensures the loop counter stops incrementing. */\r
157         b reg1_error_loop\r
158         nop\r
159         ENDP\r
160 \r
161 \r
162 \r
163 vRegTest2Task PROC\r
164 \r
165         ;/* Fill the core registers with known values.  This is only done once. */\r
166         movs r1, #1\r
167         movs r2, #2\r
168         movs r3, #3\r
169         movs r4, #4\r
170         movs r5, #5\r
171         movs r6, #6\r
172         movs r7, #7\r
173         movs r0, #8\r
174         mov     r8, r0\r
175         movs r0, #9\r
176         mov r9, r0\r
177         movs r0, #10\r
178         mov     r10, r0\r
179         movs r0, #11\r
180         mov     r11, r0\r
181         movs r0, #12\r
182         mov r12, r0\r
183         movs r0, #10\r
184 \r
185 reg2_loop\r
186         ;/* Repeatedly check that each register still contains the value written to\r
187         ;it when the task started. */\r
188         cmp     r0, #10\r
189         bne     reg2_error_loop\r
190         cmp     r1, #1\r
191         bne     reg2_error_loop\r
192         cmp     r2, #2\r
193         bne     reg2_error_loop\r
194         cmp r3, #3\r
195         bne     reg2_error_loop\r
196         cmp     r4, #4\r
197         bne     reg2_error_loop\r
198         cmp     r5, #5\r
199         bne     reg2_error_loop\r
200         cmp     r6, #6\r
201         bne     reg2_error_loop\r
202         cmp     r7, #7\r
203         bne     reg2_error_loop\r
204         movs r0, #8\r
205         cmp     r8, r0\r
206         bne     reg2_error_loop\r
207         movs r0, #9\r
208         cmp     r9, r0\r
209         bne     reg2_error_loop\r
210         movs r0, #10\r
211         cmp     r10, r0\r
212         bne     reg2_error_loop\r
213         movs r0, #11\r
214         cmp     r11, r0\r
215         bne     reg2_error_loop\r
216         movs r0, #12\r
217         cmp     r12, r0\r
218         bne     reg2_error_loop\r
219 \r
220         ;/* Everything passed, increment the loop counter. */\r
221         push { r1 }\r
222         ldr     r0, =ulRegTest2LoopCounter\r
223         ldr r1, [r0]\r
224         adds r1, r1, #1\r
225         str r1, [r0]\r
226         pop { r1 }\r
227 \r
228         ;/* Start again. */\r
229         movs r0, #10\r
230         b reg2_loop\r
231 \r
232 reg2_error_loop\r
233         ;/* If this line is hit then there was an error in a core register value.\r
234         ;The loop ensures the loop counter stops incrementing. */\r
235         b reg2_error_loop\r
236         nop\r
237         ENDP\r
238 \r
239         END\r