]> git.sur5r.net Git - freertos/blob - FreeRTOS/Demo/CORTEX_M4_SimpleLink_CC3220SF_CCS/Full_Demo/RegTest.asm
Update to MIT licensed FreeRTOS V10.0.0 - see https://www.freertos.org/History.txt
[freertos] / FreeRTOS / Demo / CORTEX_M4_SimpleLink_CC3220SF_CCS / Full_Demo / RegTest.asm
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         .thumb\r
31 \r
32         .ref ulRegTest1LoopCounter\r
33         .ref ulRegTest2LoopCounter\r
34 \r
35         .def vRegTest1Implementation\r
36         .def vRegTest2Implementation\r
37 \r
38 ulRegTest1LoopCounterConst:     .word   ulRegTest1LoopCounter\r
39 ulRegTest2LoopCounterConst:     .word   ulRegTest2LoopCounter\r
40 ulNVIC_INT_CTRL:                        .word   0xe000ed04\r
41 ;/*-----------------------------------------------------------*/\r
42         .align 4\r
43 vRegTest1Implementation: .asmfunc\r
44 \r
45         ;/* Fill the core registers with known values. */\r
46         mov r0, #100\r
47         mov r1, #101\r
48         mov r2, #102\r
49         mov r3, #103\r
50         mov     r4, #104\r
51         mov     r5, #105\r
52         mov     r6, #106\r
53         mov r7, #107\r
54         mov     r8, #108\r
55         mov     r9, #109\r
56         mov     r10, #110\r
57         mov     r11, #111\r
58         mov r12, #112\r
59 \r
60 reg1_loop:\r
61 \r
62         cmp     r0, #100\r
63         bne     reg1_error_loop\r
64         cmp     r1, #101\r
65         bne     reg1_error_loop\r
66         cmp     r2, #102\r
67         bne     reg1_error_loop\r
68         cmp r3, #103\r
69         bne     reg1_error_loop\r
70         cmp     r4, #104\r
71         bne     reg1_error_loop\r
72         cmp     r5, #105\r
73         bne     reg1_error_loop\r
74         cmp     r6, #106\r
75         bne     reg1_error_loop\r
76         cmp     r7, #107\r
77         bne     reg1_error_loop\r
78         cmp     r8, #108\r
79         bne     reg1_error_loop\r
80         cmp     r9, #109\r
81         bne     reg1_error_loop\r
82         cmp     r10, #110\r
83         bne     reg1_error_loop\r
84         cmp     r11, #111\r
85         bne     reg1_error_loop\r
86         cmp     r12, #112\r
87         bne     reg1_error_loop\r
88 \r
89         ;/* Everything passed, increment the loop counter. */\r
90         push { r0-r1 }\r
91         ldr     r0, ulRegTest1LoopCounterConst\r
92         ldr r1, [r0]\r
93         adds r1, r1, #1\r
94         str r1, [r0]\r
95         pop { r0-r1 }\r
96 \r
97         ;/* Start again. */\r
98         b reg1_loop\r
99 \r
100 reg1_error_loop:\r
101         ;/* If this line is hit then there was an error in a core register value.\r
102         ;The loop ensures the loop counter stops incrementing. */\r
103         b reg1_error_loop\r
104         .endasmfunc\r
105 \r
106 ;/*-----------------------------------------------------------*/\r
107 \r
108         .align 4\r
109 vRegTest2Implementation: .asmfunc\r
110 \r
111         ;/* Set all the core registers to known values. */\r
112         mov r0, #-1\r
113         mov r1, #1\r
114         mov r2, #2\r
115         mov r3, #3\r
116         mov     r4, #4\r
117         mov     r5, #5\r
118         mov     r6, #6\r
119         mov r7, #7\r
120         mov     r8, #8\r
121         mov     r9, #9\r
122         mov     r10, #10\r
123         mov     r11, #11\r
124         mov r12, #12\r
125 \r
126 \r
127 reg2_loop:\r
128 \r
129         cmp     r0, #-1\r
130         bne     reg2_error_loop\r
131         cmp     r1, #1\r
132         bne     reg2_error_loop\r
133         cmp     r2, #2\r
134         bne     reg2_error_loop\r
135         cmp r3, #3\r
136         bne     reg2_error_loop\r
137         cmp     r4, #4\r
138         bne     reg2_error_loop\r
139         cmp     r5, #5\r
140         bne     reg2_error_loop\r
141         cmp     r6, #6\r
142         bne     reg2_error_loop\r
143         cmp     r7, #7\r
144         bne     reg2_error_loop\r
145         cmp     r8, #8\r
146         bne     reg2_error_loop\r
147         cmp     r9, #9\r
148         bne     reg2_error_loop\r
149         cmp     r10, #10\r
150         bne     reg2_error_loop\r
151         cmp     r11, #11\r
152         bne     reg2_error_loop\r
153         cmp     r12, #12\r
154         bne     reg2_error_loop\r
155 \r
156         ;/* Increment the loop counter to indicate this test is still functioning\r
157         ;correctly. */\r
158         push { r0-r1 }\r
159         ldr     r0, ulRegTest2LoopCounterConst\r
160         ldr r1, [r0]\r
161         adds r1, r1, #1\r
162         str r1, [r0]\r
163 \r
164         ;/* Yield to increase test coverage. */\r
165         movs r0, #0x01\r
166         ldr r1, ulNVIC_INT_CTRL\r
167         lsl r0, r0, #28 ;/* Shift to PendSV bit */\r
168         str r0, [r1]\r
169         dsb\r
170 \r
171         pop { r0-r1 }\r
172 \r
173         ;/* Start again. */\r
174         b reg2_loop\r
175 \r
176 reg2_error_loop:\r
177         ;/* If this line is hit then there was an error in a core register value.\r
178         ;This loop ensures the loop counter variable stops incrementing. */\r
179         b reg2_error_loop\r
180 \r
181 ;/*-----------------------------------------------------------*/\r
182 \r
183         .end\r