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