]> git.sur5r.net Git - freertos/blob - Demo/MSP430X_MSP430F5438_CCS4/Demo_Source/RegTest.asm
e0e4197deecf1139b5c1c0854d4841fd048165c5
[freertos] / Demo / MSP430X_MSP430F5438_CCS4 / Demo_Source / RegTest.asm
1 ;\r
2 ;    FreeRTOS V6.1.0 - Copyright (C) 2010 Real Time Engineers Ltd.\r
3 ;\r
4 ;    ***************************************************************************\r
5 ;    *                                                                         *\r
6 ;    * If you are:                                                             *\r
7 ;    *                                                                         *\r
8 ;    *    + New to FreeRTOS,                                                   *\r
9 ;    *    + Wanting to learn FreeRTOS or multitasking in general quickly       *\r
10 ;    *    + Looking for basic training,                                        *\r
11 ;    *    + Wanting to improve your FreeRTOS skills and productivity           *\r
12 ;    *                                                                         *\r
13 ;    * then take a look at the FreeRTOS books - available as PDF or paperback  *\r
14 ;    *                                                                         *\r
15 ;    *        "Using the FreeRTOS Real Time Kernel - a Practical Guide"        *\r
16 ;    *                  http://www.FreeRTOS.org/Documentation                  *\r
17 ;    *                                                                         *\r
18 ;    * A pdf reference manual is also available.  Both are usually delivered   *\r
19 ;    * to your inbox within 20 minutes to two hours when purchased between 8am *\r
20 ;    * and 8pm GMT (although please allow up to 24 hours in case of            *\r
21 ;    * exceptional circumstances).  Thank you for your support!                *\r
22 ;    *                                                                         *\r
23 ;    ***************************************************************************\r
24 ;\r
25 ;    This file is part of the FreeRTOS distribution.\r
26 ;\r
27 ;    FreeRTOS is free software; you can redistribute it and/or modify it under\r
28 ;    the terms of the GNU General Public License (version 2) as published by the\r
29 ;    Free Software Foundation AND MODIFIED BY the FreeRTOS exception.\r
30 ;    ***NOTE*** The exception to the GPL is included to allow you to distribute\r
31 ;    a combined work that includes FreeRTOS without being obliged to provide the\r
32 ;    source code for proprietary components outside of the FreeRTOS kernel.\r
33 ;    FreeRTOS is distributed in the hope that it will be useful, but WITHOUT\r
34 ;    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\r
35 ;    FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for\r
36 ;    more details. You should have received a copy of the GNU General Public\r
37 ;    License and the FreeRTOS license exception along with FreeRTOS; if not it\r
38 ;    can be viewed here: http://www.freertos.org/a00114.html and also obtained\r
39 ;    by writing to Richard Barry, contact details for whom are available on the\r
40 ;    FreeRTOS WEB site.\r
41 ;\r
42 ;    1 tab == 4 spaces!\r
43 ;\r
44 ;    http://www.FreeRTOS.org - Documentation, latest information, license and\r
45 ;    contact details.\r
46 ;\r
47 ;    http://www.SafeRTOS.com - A version that is certified for use in safety\r
48 ;    critical systems.\r
49 ;\r
50 ;    http://www.OpenRTOS.com - Commercial support, development, porting,\r
51 ;    licensing and training services.\r
52 \r
53 ; * The definition of the "register test" tasks, as described at the top of\r
54 ; * main.c\r
55 \r
56         .include data_model.h\r
57 \r
58         .if $DEFINED( __LARGE_DATA_MODEL__ )\r
59                 .define "cmp.a", cmp_x\r
60                 .define "incx.w", inc_x\r
61         .else\r
62                 .define "cmp.w", cmp_x\r
63                 .define "inc.w", inc_x\r
64         .endif\r
65 \r
66 \r
67         .global usRegTest1Counter\r
68         .global usRegTest2Counter\r
69         .global vPortYield\r
70         \r
71         .def vRegTest1Task\r
72         .def vRegTest2Task\r
73 \r
74         .text\r
75 \r
76 vRegTest1Task:\r
77 \r
78         ; Fill each general purpose register with a known value.\r
79         mov_x   #0x4444, r4\r
80         mov_x   #0x5555, r5\r
81         mov_x   #0x6666, r6\r
82         mov_x   #0x7777, r7\r
83         mov_x   #0x8888, r8\r
84         mov_x   #0x9999, r9\r
85         mov_x   #0xaaaa, r10\r
86         mov_x   #0xbbbb, r11\r
87         mov_x   #0xcccc, r12\r
88         mov_x   #0xdddd, r13\r
89         mov_x   #0xeeee, r14\r
90         mov_x   #0xffff, r15\r
91         \r
92 prvRegTest1Loop:\r
93 \r
94         ; Test each general purpose register to check that it still contains the\r
95         ; expected known value, jumping to vRegTest1Error if any register contains\r
96         ; an unexpected value.\r
97         cmp_x   #0x4444, r4\r
98         jne             vRegTest1Error\r
99         cmp_x   #0x5555, r5\r
100         jne             vRegTest1Error\r
101         cmp_x   #0x6666, r6\r
102         jne             vRegTest1Error\r
103         cmp_x   #0x7777, r7\r
104         jne             vRegTest1Error\r
105         cmp_x   #0x8888, r8\r
106         jne             vRegTest1Error\r
107         cmp_x   #0x9999, r9\r
108         jne             vRegTest1Error\r
109         cmp_x   #0xaaaa, r10\r
110         jne             vRegTest1Error\r
111         cmp_x   #0xbbbb, r11\r
112         jne             vRegTest1Error\r
113         cmp_x   #0xcccc, r12\r
114         jne             vRegTest1Error\r
115         cmp_x   #0xdddd, r13\r
116         jne             vRegTest1Error\r
117         cmp_x   #0xeeee, r14\r
118         jne             vRegTest1Error\r
119         cmp_x   #0xffff, r15\r
120         jne             vRegTest1Error\r
121         \r
122         ; This task is still running without jumping to vRegTest1Error, so increment\r
123         ; the loop counter so the check task knows the task is running error free.\r
124         inc_x   &usRegTest1Counter\r
125         \r
126         ; Loop again, performing the same tests.\r
127         jmp             prvRegTest1Loop\r
128         nop\r
129 \r
130         \r
131 vRegTest1Error:\r
132         jmp vRegTest1Error\r
133         nop\r
134         \r
135 ; -----------------------------------------------------------\r
136 \r
137 ; See the comments in vRegTest1Task.  This task is the same, it just uses\r
138 ; different values in its registers.\r
139 vRegTest2Task:\r
140 \r
141         mov_x   #0x4441, r4\r
142         mov_x   #0x5551, r5\r
143         mov_x   #0x6661, r6\r
144         mov_x   #0x7771, r7\r
145         mov_x   #0x8881, r8\r
146         mov_x   #0x9991, r9\r
147         mov_x   #0xaaa1, r10\r
148         mov_x   #0xbbb1, r11\r
149         mov_x   #0xccc1, r12\r
150         mov_x   #0xddd1, r13\r
151         mov_x   #0xeee1, r14\r
152         mov_x   #0xfff1, r15\r
153         \r
154 prvRegTest2Loop:\r
155 \r
156         cmp_x   #0x4441, r4\r
157         jne             vRegTest2Error\r
158         cmp_x   #0x5551, r5\r
159         jne             vRegTest2Error\r
160         cmp_x   #0x6661, r6\r
161         jne             vRegTest2Error\r
162         cmp_x   #0x7771, r7\r
163         jne             vRegTest2Error\r
164         cmp_x   #0x8881, r8\r
165         jne             vRegTest2Error\r
166         cmp_x   #0x9991, r9\r
167         jne             vRegTest2Error\r
168         cmp_x   #0xaaa1, r10\r
169         jne             vRegTest2Error\r
170         cmp_x   #0xbbb1, r11\r
171         jne             vRegTest2Error\r
172         cmp_x   #0xccc1, r12\r
173         jne             vRegTest2Error\r
174         cmp_x   #0xddd1, r13\r
175         jne             vRegTest2Error\r
176         cmp_x   #0xeee1, r14\r
177         jne             vRegTest2Error\r
178         cmp_x   #0xfff1, r15\r
179         jne             vRegTest2Error\r
180         \r
181         ; Also perform a manual yield, just to increase the scope of the test.\r
182         call_x  #vPortYield\r
183         \r
184         inc_x   &usRegTest2Counter\r
185         jmp             prvRegTest2Loop\r
186         nop\r
187 \r
188         \r
189 vRegTest2Error:\r
190         jmp vRegTest2Error\r
191         nop\r
192 ; /*-----------------------------------------------------------\r
193 \r
194                 \r
195         .end\r
196                 \r