]> git.sur5r.net Git - freertos/blob - FreeRTOS/Demo/MSP430X_MSP430F5438_IAR/RegTest.s43
8c021650d895dcb3a607a536717133502294f2c2
[freertos] / FreeRTOS / Demo / MSP430X_MSP430F5438_IAR / RegTest.s43
1 /*\r
2     FreeRTOS V8.0.1 - Copyright (C) 2014 Real Time Engineers Ltd. \r
3     All rights reserved\r
4 \r
5     VISIT http://www.FreeRTOS.org TO ENSURE YOU ARE USING THE LATEST VERSION.\r
6 \r
7     ***************************************************************************\r
8      *                                                                       *\r
9      *    FreeRTOS provides completely free yet professionally developed,    *\r
10      *    robust, strictly quality controlled, supported, and cross          *\r
11      *    platform software that has become a de facto standard.             *\r
12      *                                                                       *\r
13      *    Help yourself get started quickly and support the FreeRTOS         *\r
14      *    project by purchasing a FreeRTOS tutorial book, reference          *\r
15      *    manual, or both from: http://www.FreeRTOS.org/Documentation        *\r
16      *                                                                       *\r
17      *    Thank you!                                                         *\r
18      *                                                                       *\r
19     ***************************************************************************\r
20 \r
21     This file is part of the FreeRTOS distribution.\r
22 \r
23     FreeRTOS is free software; you can redistribute it and/or modify it under\r
24     the terms of the GNU General Public License (version 2) as published by the\r
25     Free Software Foundation >>!AND MODIFIED BY!<< the FreeRTOS exception.\r
26 \r
27     >>!   NOTE: The modification to the GPL is included to allow you to     !<<\r
28     >>!   distribute a combined work that includes FreeRTOS without being   !<<\r
29     >>!   obliged to provide the source code for proprietary components     !<<\r
30     >>!   outside of the FreeRTOS kernel.                                   !<<\r
31 \r
32     FreeRTOS is distributed in the hope that it will be useful, but WITHOUT ANY\r
33     WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\r
34     FOR A PARTICULAR PURPOSE.  Full license text is available from the following\r
35     link: http://www.freertos.org/a00114.html\r
36 \r
37     1 tab == 4 spaces!\r
38 \r
39     ***************************************************************************\r
40      *                                                                       *\r
41      *    Having a problem?  Start by reading the FAQ "My application does   *\r
42      *    not run, what could be wrong?"                                     *\r
43      *                                                                       *\r
44      *    http://www.FreeRTOS.org/FAQHelp.html                               *\r
45      *                                                                       *\r
46     ***************************************************************************\r
47 \r
48     http://www.FreeRTOS.org - Documentation, books, training, latest versions,\r
49     license and Real Time Engineers Ltd. contact details.\r
50 \r
51     http://www.FreeRTOS.org/plus - A selection of FreeRTOS ecosystem products,\r
52     including FreeRTOS+Trace - an indispensable productivity tool, a DOS\r
53     compatible FAT file system, and our tiny thread aware UDP/IP stack.\r
54 \r
55     http://www.OpenRTOS.com - Real Time Engineers ltd license FreeRTOS to High\r
56     Integrity Systems to sell under the OpenRTOS brand.  Low cost OpenRTOS\r
57     licenses offer ticketed support, indemnification and middleware.\r
58 \r
59     http://www.SafeRTOS.com - High Integrity Systems also provide a safety\r
60     engineered and independently SIL3 certified version for use in safety and\r
61     mission critical applications that require provable dependability.\r
62 \r
63     1 tab == 4 spaces!\r
64 */\r
65 #include "msp430.h"\r
66 #include "FreeRTOSConfig.h"\r
67 #include "data_model.h"\r
68 \r
69 /*\r
70  * The definition of the "register test" tasks, as described at the top of\r
71  * main.c\r
72  */\r
73 \r
74 \r
75 \r
76         IMPORT usRegTest1Counter\r
77         IMPORT usRegTest2Counter\r
78         IMPORT vPortYield\r
79         \r
80         EXPORT vRegTest1Task\r
81         EXPORT vRegTest2Task\r
82 \r
83         RSEG CODE\r
84         \r
85         EVEN\r
86 \r
87 vRegTest1Task:\r
88 \r
89         /* Fill each general purpose register with a known value. */\r
90         mov_x   #0x4444, r4\r
91         mov_x   #0x5555, r5\r
92         mov_x   #0x6666, r6\r
93         mov_x   #0x7777, r7\r
94         mov_x   #0x8888, r8\r
95         mov_x   #0x9999, r9\r
96         mov_x   #0xaaaa, r10\r
97         mov_x   #0xbbbb, r11\r
98         mov_x   #0xcccc, r12\r
99         mov_x   #0xdddd, r13\r
100         mov_x   #0xeeee, r14\r
101         mov_x   #0xffff, r15\r
102         \r
103 prvRegTest1Loop:\r
104 \r
105         /* Test each general purpose register to check that it still contains the\r
106         expected known value, jumping to vRegTest1Error if any register contains\r
107         an unexpected value. */\r
108         cmp_x   #0x4444, r4\r
109         jne             vRegTest1Error\r
110         cmp_x   #0x5555, r5\r
111         jne             vRegTest1Error\r
112         cmp_x   #0x6666, r6\r
113         jne             vRegTest1Error\r
114         cmp_x   #0x7777, r7\r
115         jne             vRegTest1Error\r
116         cmp_x   #0x8888, r8\r
117         jne             vRegTest1Error\r
118         cmp_x   #0x9999, r9\r
119         jne             vRegTest1Error\r
120         cmp_x   #0xaaaa, r10\r
121         jne             vRegTest1Error\r
122         cmp_x   #0xbbbb, r11\r
123         jne             vRegTest1Error\r
124         cmp_x   #0xcccc, r12\r
125         jne             vRegTest1Error\r
126         cmp_x   #0xdddd, r13\r
127         jne             vRegTest1Error\r
128         cmp_x   #0xeeee, r14\r
129         jne             vRegTest1Error\r
130         cmp_x   #0xffff, r15\r
131         jne             vRegTest1Error\r
132         \r
133         /* This task is still running without jumping to vRegTest1Error, so increment\r
134         the loop counter so the check task knows the task is running error free. */\r
135         incx.w  &usRegTest1Counter\r
136         \r
137         /* Loop again, performing the same tests. */\r
138         jmp             prvRegTest1Loop\r
139         nop\r
140 \r
141         \r
142         EVEN\r
143         \r
144 vRegTest1Error:\r
145         jmp vRegTest1Error\r
146         nop\r
147         \r
148 /*-----------------------------------------------------------*/\r
149 \r
150 /* See the comments in vRegTest1Task.  This task is the same, it just uses\r
151 different values in its registers. */\r
152 vRegTest2Task:\r
153 \r
154         mov_x   #0x4441, r4\r
155         mov_x   #0x5551, r5\r
156         mov_x   #0x6661, r6\r
157         mov_x   #0x7771, r7\r
158         mov_x   #0x8881, r8\r
159         mov_x   #0x9991, r9\r
160         mov_x   #0xaaa1, r10\r
161         mov_x   #0xbbb1, r11\r
162         mov_x   #0xccc1, r12\r
163         mov_x   #0xddd1, r13\r
164         mov_x   #0xeee1, r14\r
165         mov_x   #0xfff1, r15\r
166         \r
167 prvRegTest2Loop:\r
168 \r
169         cmp_x   #0x4441, r4\r
170         jne             vRegTest2Error\r
171         cmp_x   #0x5551, r5\r
172         jne             vRegTest2Error\r
173         cmp_x   #0x6661, r6\r
174         jne             vRegTest2Error\r
175         cmp_x   #0x7771, r7\r
176         jne             vRegTest2Error\r
177         cmp_x   #0x8881, r8\r
178         jne             vRegTest2Error\r
179         cmp_x   #0x9991, r9\r
180         jne             vRegTest2Error\r
181         cmp_x   #0xaaa1, r10\r
182         jne             vRegTest2Error\r
183         cmp_x   #0xbbb1, r11\r
184         jne             vRegTest2Error\r
185         cmp_x   #0xccc1, r12\r
186         jne             vRegTest2Error\r
187         cmp_x   #0xddd1, r13\r
188         jne             vRegTest2Error\r
189         cmp_x   #0xeee1, r14\r
190         jne             vRegTest2Error\r
191         cmp_x   #0xfff1, r15\r
192         jne             vRegTest2Error\r
193         \r
194         /* Also perform a manual yield, just to increase the scope of the test. */\r
195         calla   #vPortYield\r
196         \r
197         incx.w  &usRegTest2Counter\r
198         jmp             prvRegTest2Loop\r
199         nop\r
200 \r
201         \r
202 vRegTest2Error:\r
203         jmp vRegTest2Error\r
204         nop\r
205 /*-----------------------------------------------------------*/\r
206 \r
207                 \r
208         END\r
209                 \r