]> git.sur5r.net Git - freertos/blob - FreeRTOS/Demo/RL78_E2Studio_GCC/src/RegTest.S
For RL78GCC port/demo:
[freertos] / FreeRTOS / Demo / RL78_E2Studio_GCC / src / RegTest.S
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 \r
75 /*\r
76  * This file defines the RegTest tasks as described at the top of main.c\r
77  */\r
78 \r
79         .global _vRegTest1Task\r
80         .short  _vRegTest1Task\r
81         .global _vRegTest2Task\r
82         .short  _vRegTest2Task\r
83 \r
84         .extern _vRegTestError\r
85         .extern _usRegTest1LoopCounter\r
86         .extern _usRegTest2LoopCounter\r
87 \r
88         .text\r
89 /*\r
90  * Fill all the registers with known values, then check that the registers\r
91  * contain the expected value.  An incorrect value being indicative of an\r
92  * error in the context switch mechanism.\r
93  */\r
94 _vRegTest1Task:\r
95 \r
96         /* First fill the registers. */\r
97         MOVW    AX, #0x1122\r
98         MOVW    BC, #0x3344\r
99         MOVW    DE, #0x5566\r
100         MOVW    HL, #0x7788\r
101         MOV             CS, #0x01\r
102 \r
103 #if __DATA_MODEL__ == __DATA_MODEL_FAR__\r
104 \r
105         ; ES is not saved or restored when using the near memory model so only\r
106         ; test it when using the far model.\r
107         MOV             ES, #0x02\r
108 \r
109 #endif\r
110 \r
111 _loop1:\r
112 \r
113         /* Continuously check that the register values remain at their expected\r
114         values.  The BRK is to test the yield.  This task runs at low priority\r
115         so will also regularly get preempted. */\r
116         BRK\r
117 \r
118         /* Compare with the expected value. */\r
119         CMPW    AX, #0x1122\r
120         BZ              $.+5\r
121 \r
122         /* Jump over the branch to vRegTestError() if the register contained the\r
123         expected value - otherwise flag an error by executing vRegTestError(). */\r
124         BR              !!_vRegTestError\r
125 \r
126         /* Repeat for all the registers. */\r
127         MOVW    AX, BC\r
128         CMPW    AX, #0x3344\r
129         BZ              $.+5\r
130         BR              !!_vRegTestError\r
131         MOVW    AX, DE\r
132         CMPW    AX, #0x5566\r
133         BZ              $.+5\r
134         BR              !!_vRegTestError\r
135         MOVW    AX, HL\r
136         CMPW    AX, #0x7788\r
137         BZ              $.+5\r
138         BR              !!_vRegTestError\r
139         MOV             A, CS\r
140         CMP             A, #0x01\r
141         BZ              $.+5\r
142         BR              !!_vRegTestError\r
143 \r
144 #if __DATA_MODEL__ == __DATA_MODEL_FAR__\r
145 \r
146         /* ES is not saved or restored when using the near memory model so only\r
147         test it when using the far model. */\r
148         MOV             A, ES\r
149         CMP             A, #0x02\r
150         BZ              $.+5\r
151         BR              !!_vRegTestError\r
152 \r
153 #endif\r
154 \r
155         /* Indicate that this task is still cycling. */\r
156         INCW    !_usRegTest1LoopCounter\r
157 \r
158         MOVW    AX, #0x1122\r
159         BR              !!_loop1\r
160 \r
161 \r
162 /*\r
163  * Fill all the registers with known values, then check that the registers\r
164  * contain the expected value.  An incorrect value being indicative of an\r
165  * error in the context switch mechanism.\r
166  */\r
167 _vRegTest2Task:\r
168 \r
169         MOVW    AX, #0x99aa\r
170         MOVW    BC, #0xbbcc\r
171         MOVW    DE, #0xddee\r
172         MOVW    HL, #0xff12\r
173         MOV             CS, #0x03\r
174 \r
175 #if __DATA_MODEL__ == __DATA_MODEL_FAR__\r
176 \r
177         MOV             ES, #0x04\r
178 \r
179 #endif\r
180 \r
181 _loop2:\r
182         CMPW    AX, #0x99aa\r
183         BZ              $.+5\r
184         BR              !!_vRegTestError\r
185         MOVW    AX, BC\r
186         CMPW    AX, #0xbbcc\r
187         BZ              $.+5\r
188         BR              !!_vRegTestError\r
189         MOVW    AX, DE\r
190         CMPW    AX, #0xddee\r
191         BZ              $.+5\r
192         BR              !!_vRegTestError\r
193         MOVW    AX, HL\r
194         CMPW    AX, #0xff12\r
195         BZ              $.+5\r
196         BR              !!_vRegTestError\r
197         MOV             A, CS\r
198         CMP             A, #0x03\r
199         BZ              $.+5\r
200         BR              !!_vRegTestError\r
201 \r
202 #if __DATA_MODEL__ == __DATA_MODEL_FAR__\r
203 \r
204         MOV             A, ES\r
205         CMP             A, #0x04\r
206         BZ              $.+5\r
207         BR              !!_vRegTestError\r
208 \r
209 #endif\r
210 \r
211         /* Indicate that this task is still cycling. */\r
212         INCW    !_usRegTest2LoopCounter\r
213 \r
214         MOVW    AX, #0x99aa\r
215         BR              !!_loop2\r
216 \r
217         .end\r
218 \r