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