]> git.sur5r.net Git - freertos/blob - FreeRTOS/Demo/CORTEX_M4_SimpleLink_CC3220SF_CCS/Full_Demo/RegTest.asm
2d0b47c03ca0f2cfe057ac7cb25b5b6e7c62cf6e
[freertos] / FreeRTOS / Demo / CORTEX_M4_SimpleLink_CC3220SF_CCS / Full_Demo / RegTest.asm
1 ;/*\r
2 ; * FreeRTOS Kernel V10.3.0\r
3 ; * Copyright (C) 2020 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.\r
14 ; *\r
15 ; * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r
16 ; * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS\r
17 ; * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\r
18 ; * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\r
19 ; * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\r
20 ; * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r
21 ; *\r
22 ; * http://www.FreeRTOS.org\r
23 ; * http://aws.amazon.com/freertos\r
24 ; *\r
25 ; * 1 tab == 4 spaces!\r
26 ; */\r
27 \r
28 \r
29         .thumb\r
30 \r
31         .ref ulRegTest1LoopCounter\r
32         .ref ulRegTest2LoopCounter\r
33 \r
34         .def vRegTest1Implementation\r
35         .def vRegTest2Implementation\r
36 \r
37 ulRegTest1LoopCounterConst:     .word   ulRegTest1LoopCounter\r
38 ulRegTest2LoopCounterConst:     .word   ulRegTest2LoopCounter\r
39 ulNVIC_INT_CTRL:                        .word   0xe000ed04\r
40 ;/*-----------------------------------------------------------*/\r
41         .align 4\r
42 vRegTest1Implementation: .asmfunc\r
43 \r
44         ;/* Fill the core registers with known values. */\r
45         mov r0, #100\r
46         mov r1, #101\r
47         mov r2, #102\r
48         mov r3, #103\r
49         mov     r4, #104\r
50         mov     r5, #105\r
51         mov     r6, #106\r
52         mov r7, #107\r
53         mov     r8, #108\r
54         mov     r9, #109\r
55         mov     r10, #110\r
56         mov     r11, #111\r
57         mov r12, #112\r
58 \r
59 reg1_loop:\r
60 \r
61         cmp     r0, #100\r
62         bne     reg1_error_loop\r
63         cmp     r1, #101\r
64         bne     reg1_error_loop\r
65         cmp     r2, #102\r
66         bne     reg1_error_loop\r
67         cmp r3, #103\r
68         bne     reg1_error_loop\r
69         cmp     r4, #104\r
70         bne     reg1_error_loop\r
71         cmp     r5, #105\r
72         bne     reg1_error_loop\r
73         cmp     r6, #106\r
74         bne     reg1_error_loop\r
75         cmp     r7, #107\r
76         bne     reg1_error_loop\r
77         cmp     r8, #108\r
78         bne     reg1_error_loop\r
79         cmp     r9, #109\r
80         bne     reg1_error_loop\r
81         cmp     r10, #110\r
82         bne     reg1_error_loop\r
83         cmp     r11, #111\r
84         bne     reg1_error_loop\r
85         cmp     r12, #112\r
86         bne     reg1_error_loop\r
87 \r
88         ;/* Everything passed, increment the loop counter. */\r
89         push { r0-r1 }\r
90         ldr     r0, ulRegTest1LoopCounterConst\r
91         ldr r1, [r0]\r
92         adds r1, r1, #1\r
93         str r1, [r0]\r
94         pop { r0-r1 }\r
95 \r
96         ;/* Start again. */\r
97         b reg1_loop\r
98 \r
99 reg1_error_loop:\r
100         ;/* If this line is hit then there was an error in a core register value.\r
101         ;The loop ensures the loop counter stops incrementing. */\r
102         b reg1_error_loop\r
103         .endasmfunc\r
104 \r
105 ;/*-----------------------------------------------------------*/\r
106 \r
107         .align 4\r
108 vRegTest2Implementation: .asmfunc\r
109 \r
110         ;/* Set all the core registers to known values. */\r
111         mov r0, #-1\r
112         mov r1, #1\r
113         mov r2, #2\r
114         mov r3, #3\r
115         mov     r4, #4\r
116         mov     r5, #5\r
117         mov     r6, #6\r
118         mov r7, #7\r
119         mov     r8, #8\r
120         mov     r9, #9\r
121         mov     r10, #10\r
122         mov     r11, #11\r
123         mov r12, #12\r
124 \r
125 \r
126 reg2_loop:\r
127 \r
128         cmp     r0, #-1\r
129         bne     reg2_error_loop\r
130         cmp     r1, #1\r
131         bne     reg2_error_loop\r
132         cmp     r2, #2\r
133         bne     reg2_error_loop\r
134         cmp r3, #3\r
135         bne     reg2_error_loop\r
136         cmp     r4, #4\r
137         bne     reg2_error_loop\r
138         cmp     r5, #5\r
139         bne     reg2_error_loop\r
140         cmp     r6, #6\r
141         bne     reg2_error_loop\r
142         cmp     r7, #7\r
143         bne     reg2_error_loop\r
144         cmp     r8, #8\r
145         bne     reg2_error_loop\r
146         cmp     r9, #9\r
147         bne     reg2_error_loop\r
148         cmp     r10, #10\r
149         bne     reg2_error_loop\r
150         cmp     r11, #11\r
151         bne     reg2_error_loop\r
152         cmp     r12, #12\r
153         bne     reg2_error_loop\r
154 \r
155         ;/* Increment the loop counter to indicate this test is still functioning\r
156         ;correctly. */\r
157         push { r0-r1 }\r
158         ldr     r0, ulRegTest2LoopCounterConst\r
159         ldr r1, [r0]\r
160         adds r1, r1, #1\r
161         str r1, [r0]\r
162 \r
163         ;/* Yield to increase test coverage. */\r
164         movs r0, #0x01\r
165         ldr r1, ulNVIC_INT_CTRL\r
166         lsl r0, r0, #28 ;/* Shift to PendSV bit */\r
167         str r0, [r1]\r
168         dsb\r
169 \r
170         pop { r0-r1 }\r
171 \r
172         ;/* Start again. */\r
173         b reg2_loop\r
174 \r
175 reg2_error_loop:\r
176         ;/* If this line is hit then there was an error in a core register value.\r
177         ;This loop ensures the loop counter variable stops incrementing. */\r
178         b reg2_error_loop\r
179 \r
180 ;/*-----------------------------------------------------------*/\r
181 \r
182         .end\r