source: rtems/c/src/lib/libbsp/m68k/av5282/start/start.S @ cfaa366

4.115
Last change on this file since cfaa366 was cfaa366, checked in by Joel Sherrill <joel.sherrill@…>, on 05/03/12 at 17:55:58

General - Remove extraneous blank line in license message

Many files had an extra blank line in the license text
found in the file header. This patch removes that line.

The script that did this also turned off execute permission
when it was turned on incorrectly.

  • Property mode set to 100644
File size: 13.4 KB
Line 
1/*
2 *  uC5282 startup code
3 *
4 *  This file contains the entry point for the application.
5 *  The name of this entry point is compiler dependent.
6 *  It jumps to the BSP which is responsible for performing
7 *  all initialization.
8 *
9 *  COPYRIGHT (c) 1989-1998.
10 *  On-Line Applications Research Corporation (OAR).
11 *
12 *  The license and distribution terms for this file may be
13 *  found in the file LICENSE in this distribution or at
14 *  http://www.rtems.com/license/LICENSE.
15 *
16 *  $Id$
17 */
18
19#include <rtems/asm.h>
20
21#define SRAM_SIZE (64*1024)
22#define DEFAULT_IPSBAR  0x40000000
23
24BEGIN_CODE
25#define INITIAL_STACK __SRAMBASE+SRAM_SIZE-4
26
27        PUBLIC (INTERRUPT_VECTOR)
28SYM(INTERRUPT_VECTOR):
29    .long   INITIAL_STACK   |   0: Initial 'SSP'
30    .long   start           |   1: Initial PC
31    .long   SYM(_uhoh)      |   2: Bus error
32    .long   SYM(_uhoh)      |   3: Address error
33    .long   SYM(_uhoh)      |   4: Illegal instruction
34    .long   SYM(_uhoh)      |   5: Zero division
35    .long   SYM(_uhoh)      |   6: CHK, CHK2 instruction
36    .long   SYM(_uhoh)      |   7: TRAPcc, TRAPV instructions
37    .long   SYM(_uhoh)      |   8: Privilege violation
38    .long   SYM(_uhoh)      |   9: Trace
39    .long   SYM(_uhoh)      |  10: Line 1010 emulator
40    .long   SYM(_uhoh)      |  11: Line 1111 emulator
41    .long   SYM(_uhoh)      |  12: Hardware breakpoint
42    .long   SYM(_uhoh)      |  13: Reserved for coprocessor violation
43    .long   SYM(_uhoh)      |  14: Format error
44    .long   SYM(_uhoh)      |  15: Uninitialized interrupt
45    .long   SYM(_uhoh)      |  16: Unassigned, reserved
46    .long   SYM(_uhoh)      |  17:
47    .long   SYM(_uhoh)      |  18:
48    .long   SYM(_uhoh)      |  19:
49    .long   SYM(_uhoh)      |  20:
50    .long   SYM(_uhoh)      |  21:
51    .long   SYM(_uhoh)      |  22:
52    .long   SYM(_uhoh)      |  23:
53    .long   SYM(_spuriousInterrupt) |  24: Spurious interrupt
54    .long   SYM(_uhoh)      |  25: Level 1 interrupt autovector
55    .long   SYM(_uhoh)      |  26: Level 2 interrupt autovector
56    .long   SYM(_uhoh)      |  27: Level 3 interrupt autovector
57    .long   SYM(_uhoh)      |  28: Level 4 interrupt autovector
58    .long   SYM(_uhoh)      |  29: Level 5 interrupt autovector
59    .long   SYM(_uhoh)      |  30: Level 6 interrupt autovector
60    .long   SYM(_uhoh)      |  31: Level 7 interrupt autovector
61    .long   SYM(_uhoh)      |  32: Trap instruction (0-15)
62    .long   SYM(_uhoh)      |  33:
63    .long   SYM(_uhoh)      |  34:
64    .long   SYM(_uhoh)      |  35:
65    .long   SYM(_uhoh)      |  36:
66    .long   SYM(_uhoh)      |  37:
67    .long   SYM(_uhoh)      |  38:
68    .long   SYM(_uhoh)      |  39:
69    .long   SYM(_uhoh)      |  40:
70    .long   SYM(_uhoh)      |  41:
71    .long   SYM(_uhoh)      |  42:
72    .long   SYM(_uhoh)      |  43:
73    .long   SYM(_uhoh)      |  44:
74    .long   SYM(_uhoh)      |  45:
75    .long   SYM(_uhoh)      |  46:
76    .long   SYM(_uhoh)      |  47:
77    .long   SYM(_uhoh)      |  48: Reserved for coprocessor
78    .long   SYM(_uhoh)      |  49:
79    .long   SYM(_uhoh)      |  50:
80    .long   SYM(_uhoh)      |  51:
81    .long   SYM(_uhoh)      |  52:
82    .long   SYM(_uhoh)      |  53:
83    .long   SYM(_uhoh)      |  54:
84    .long   SYM(_uhoh)      |  55:
85    .long   SYM(_uhoh)      |  56:
86    .long   SYM(_uhoh)      |  57:
87    .long   SYM(_uhoh)      |  58:
88    .long   SYM(_uhoh)      |  59: Unassigned, reserved
89    .long   SYM(_uhoh)      |  60:
90    .long   SYM(_uhoh)      |  61:
91    .long   SYM(_uhoh)      |  62:
92    .long   SYM(_uhoh)      |  63:
93    .long   SYM(_spuriousInterrupt) |  64: User spurious handler
94    .long   SYM(_uhoh)      |  65:
95    .long   SYM(_uhoh)      |  66:
96    .long   SYM(_uhoh)      |  67:
97    .long   SYM(_uhoh)      |  68:
98    .long   SYM(_uhoh)      |  69:
99    .long   SYM(_uhoh)      |  70:
100    .long   SYM(_uhoh)      |  71:
101    .long   SYM(_uhoh)      |  72:
102    .long   SYM(_uhoh)      |  73:
103    .long   SYM(_uhoh)      |  74:
104    .long   SYM(_uhoh)      |  75:
105    .long   SYM(_uhoh)      |  76:
106    .long   SYM(_uhoh)      |  77:
107    .long   SYM(_uhoh)      |  78:
108    .long   SYM(_uhoh)      |  79:
109    .long   SYM(_uhoh)      |  80:
110    .long   SYM(_uhoh)      |  81:
111    .long   SYM(_uhoh)      |  82:
112    .long   SYM(_uhoh)      |  83:
113    .long   SYM(_uhoh)      |  84:
114    .long   SYM(_uhoh)      |  85:
115    .long   SYM(_uhoh)      |  86:
116    .long   SYM(_uhoh)      |  87:
117    .long   SYM(_uhoh)      |  88:
118    .long   SYM(_uhoh)      |  89:
119    .long   SYM(_uhoh)      |  90:
120    .long   SYM(_uhoh)      |  91:
121    .long   SYM(_uhoh)      |  92:
122    .long   SYM(_uhoh)      |  93:
123    .long   SYM(_uhoh)      |  94:
124    .long   SYM(_uhoh)      |  95:
125    .long   SYM(_uhoh)      |  96:
126    .long   SYM(_uhoh)      |  97:
127    .long   SYM(_uhoh)      |  98:
128    .long   SYM(_uhoh)      |  99:
129    .long   SYM(_uhoh)      | 100:
130    .long   SYM(_uhoh)      | 101:
131    .long   SYM(_uhoh)      | 102:
132    .long   SYM(_uhoh)      | 103:
133    .long   SYM(_uhoh)      | 104:
134    .long   SYM(_uhoh)      | 105:
135    .long   SYM(_uhoh)      | 106:
136    .long   SYM(_uhoh)      | 107:
137    .long   SYM(_uhoh)      | 108:
138    .long   SYM(_uhoh)      | 109:
139    .long   SYM(_uhoh)      | 110:
140    .long   SYM(_uhoh)      | 111:
141    .long   SYM(_uhoh)      | 112:
142    .long   SYM(_uhoh)      | 113:
143    .long   SYM(_uhoh)      | 114:
144    .long   SYM(_uhoh)      | 115:
145    .long   SYM(_uhoh)      | 116:
146    .long   SYM(_uhoh)      | 117:
147    .long   SYM(_uhoh)      | 118:
148    .long   SYM(_uhoh)      | 119:
149    .long   SYM(_uhoh)      | 120:
150    .long   SYM(_uhoh)      | 121:
151    .long   SYM(_uhoh)      | 122:
152    .long   SYM(_uhoh)      | 123:
153    .long   SYM(_uhoh)      | 124:
154    .long   SYM(_uhoh)      | 125:
155    .long   SYM(_uhoh)      | 126:
156    .long   SYM(_uhoh)      | 127:
157    .long   SYM(_uhoh)      | 128:
158    .long   SYM(_uhoh)      | 129:
159    .long   SYM(_uhoh)      | 130:
160    .long   SYM(_uhoh)      | 131:
161    .long   SYM(_uhoh)      | 132:
162    .long   SYM(_uhoh)      | 133:
163    .long   SYM(_uhoh)      | 134:
164    .long   SYM(_uhoh)      | 135:
165    .long   SYM(_uhoh)      | 136:
166    .long   SYM(_uhoh)      | 137:
167    .long   SYM(_uhoh)      | 138:
168    .long   SYM(_uhoh)      | 139:
169    .long   SYM(_uhoh)      | 140:
170    .long   SYM(_uhoh)      | 141:
171    .long   SYM(_uhoh)      | 142:
172    .long   SYM(_uhoh)      | 143:
173    .long   SYM(_uhoh)      | 144:
174    .long   SYM(_uhoh)      | 145:
175    .long   SYM(_uhoh)      | 146:
176    .long   SYM(_uhoh)      | 147:
177    .long   SYM(_uhoh)      | 148:
178    .long   SYM(_uhoh)      | 149:
179    .long   SYM(_uhoh)      | 150:
180    .long   SYM(_uhoh)      | 151:
181    .long   SYM(_uhoh)      | 152:
182    .long   SYM(_uhoh)      | 153:
183    .long   SYM(_uhoh)      | 154:
184    .long   SYM(_uhoh)      | 155:
185    .long   SYM(_uhoh)      | 156:
186    .long   SYM(_uhoh)      | 157:
187    .long   SYM(_uhoh)      | 158:
188    .long   SYM(_uhoh)      | 159:
189    .long   SYM(_uhoh)      | 160:
190    .long   SYM(_uhoh)      | 161:
191    .long   SYM(_uhoh)      | 162:
192    .long   SYM(_uhoh)      | 163:
193    .long   SYM(_uhoh)      | 164:
194    .long   SYM(_uhoh)      | 165:
195    .long   SYM(_uhoh)      | 166:
196    .long   SYM(_uhoh)      | 167:
197    .long   SYM(_uhoh)      | 168:
198    .long   SYM(_uhoh)      | 169:
199    .long   SYM(_uhoh)      | 170:
200    .long   SYM(_uhoh)      | 171:
201    .long   SYM(_uhoh)      | 172:
202    .long   SYM(_uhoh)      | 173:
203    .long   SYM(_uhoh)      | 174:
204    .long   SYM(_uhoh)      | 175:
205    .long   SYM(_uhoh)      | 176:
206    .long   SYM(_uhoh)      | 177:
207    .long   SYM(_uhoh)      | 178:
208    .long   SYM(_uhoh)      | 179:
209    .long   SYM(_uhoh)      | 180:
210    .long   SYM(_uhoh)      | 181:
211    .long   SYM(_uhoh)      | 182:
212    .long   SYM(_uhoh)      | 183:
213    .long   SYM(_uhoh)      | 184:
214    .long   SYM(_uhoh)      | 185:
215    .long   SYM(_uhoh)      | 186:
216    .long   SYM(_uhoh)      | 187:
217    .long   SYM(_uhoh)      | 188:
218    .long   SYM(_uhoh)      | 189:
219    .long   SYM(_uhoh)      | 190:
220    .long   SYM(_uhoh)      | 191:
221    .long   SYM(_uhoh)      | 192:
222    .long   SYM(_uhoh)      | 193:
223    .long   SYM(_uhoh)      | 194:
224    .long   SYM(_uhoh)      | 195:
225    .long   SYM(_uhoh)      | 196:
226    .long   SYM(_uhoh)      | 197:
227    .long   SYM(_uhoh)      | 198:
228    .long   SYM(_uhoh)      | 199:
229    .long   SYM(_uhoh)      | 200:
230    .long   SYM(_uhoh)      | 201:
231    .long   SYM(_uhoh)      | 202:
232    .long   SYM(_uhoh)      | 203:
233    .long   SYM(_uhoh)      | 204:
234    .long   SYM(_uhoh)      | 205:
235    .long   SYM(_uhoh)      | 206:
236    .long   SYM(_uhoh)      | 207:
237    .long   SYM(_uhoh)      | 208:
238    .long   SYM(_uhoh)      | 209:
239    .long   SYM(_uhoh)      | 210:
240    .long   SYM(_uhoh)      | 211:
241    .long   SYM(_uhoh)      | 212:
242    .long   SYM(_uhoh)      | 213:
243    .long   SYM(_uhoh)      | 214:
244    .long   SYM(_uhoh)      | 215:
245    .long   SYM(_uhoh)      | 216:
246    .long   SYM(_uhoh)      | 217:
247    .long   SYM(_uhoh)      | 218:
248    .long   SYM(_uhoh)      | 219:
249    .long   SYM(_uhoh)      | 220:
250    .long   SYM(_uhoh)      | 221:
251    .long   SYM(_uhoh)      | 222:
252    .long   SYM(_uhoh)      | 223:
253    .long   SYM(_uhoh)      | 224:
254    .long   SYM(_uhoh)      | 225:
255    .long   SYM(_uhoh)      | 226:
256    .long   SYM(_uhoh)      | 227:
257    .long   SYM(_uhoh)      | 228:
258    .long   SYM(_uhoh)      | 229:
259    .long   SYM(_uhoh)      | 230:
260    .long   SYM(_uhoh)      | 231:
261    .long   SYM(_uhoh)      | 232:
262    .long   SYM(_uhoh)      | 233:
263    .long   SYM(_uhoh)      | 234:
264    .long   SYM(_uhoh)      | 235:
265    .long   SYM(_uhoh)      | 236:
266    .long   SYM(_uhoh)      | 237:
267    .long   SYM(_uhoh)      | 238:
268    .long   SYM(_uhoh)      | 239:
269    .long   SYM(_uhoh)      | 240:
270    .long   SYM(_uhoh)      | 241:
271    .long   SYM(_uhoh)      | 242:
272    .long   SYM(_uhoh)      | 243:
273    .long   SYM(_uhoh)      | 244:
274    .long   SYM(_uhoh)      | 245:
275    .long   SYM(_uhoh)      | 246:
276    .long   SYM(_uhoh)      | 247:
277    .long   SYM(_uhoh)      | 248:
278    .long   SYM(_uhoh)      | 249:
279    .long   SYM(_uhoh)      | 250:
280    .long   SYM(_uhoh)      | 251:
281    .long   SYM(_uhoh)      | 252:
282    .long   SYM(_uhoh)      | 253:
283    .long   SYM(_uhoh)      | 254:
284    .long   SYM(_uhoh)      | 255:
285
286/*
287 * Default trap handler
288 * With an oscilloscope you can see AS* stop
289 */
290.align 4
291    PUBLIC (_uhoh)
292SYM(_uhoh):
293    nop                 | Leave spot for breakpoint
294    stop    #0x2700             | Stop with interrupts disabled
295    bra.w   SYM(_uhoh)          | Stuck forever
296
297.align 4
298    PUBLIC (_spuriousInterrupt)
299SYM(_spuriousInterrupt):
300    addql   #1,SYM(_M68kSpuriousInterruptCount)
301    rte
302/***************************************************************************
303   Function : start
304
305   Description : setup the internal SRAM for use and setup the INITIAL STACK ptr.
306        Also enable the internal peripherals
307 ***************************************************************************/
308.align 4
309    PUBLIC (start)
310SYM(start):
311    move.w  #0x0000,d0                  | Turn off watchdog timer
312    move.w  d0, (0x40140000)
313    move.w  #0x2000,d0                  | Set system frequency to 58960000
314    move.w  d0, (0x40120000)
315    move.w  #0x2700,sr                  | Disable interrupts
316
317    move.l  #__SRAMBASE+1,d0            | Enable the MCF5282 internal SRAM
318    movec   d0,%rambar                  | ...so we have a stack
319    move.l  #(INITIAL_STACK),sp         | Overwrite the fake stack pointer
320
321    /*
322     * If we're being started by the debugger, and the debugger has
323     * moved the IPSBAR, we're doomed........
324     */
325    move.l  #__IPSBAR+1,d0      | Enable the MCF5282 internal peripherals
326    move.l  d0,DEFAULT_IPSBAR
327
328    /*
329     * Remainder of the startup code is handled by C code
330     */
331    jmp SYM(Init5282)       | Start C code (which never returns)
332
333/***************************************************************************
334   Function : CopyDataClearBSSAndStart
335
336   Description : Copy DATA segment, Copy SRAM segment, clear BSS segment,
337   start C program. Assume that DATA and BSS sizes are multiples of 4.
338 ***************************************************************************/
339.align 4
340
341    PUBLIC (CopyDataClearBSSAndStart)
342SYM(CopyDataClearBSSAndStart):
343    lea SYM(_data_dest_start),a0        | Get start of DATA in RAM
344    lea SYM(_data_src_start),a2     | Get start of DATA in ROM
345    cmpl    a0,a2                   | Are they the same?
346    beq.s   NODATACOPY              | Yes, no copy necessary
347    lea SYM(_data_dest_end),a1      | Get end of DATA in RAM
348    bra.s   DATACOPYLOOPTEST            | Branch into copy loop
349DATACOPYLOOP:
350    movel   a2@+,a0@+               | Copy word from ROM to RAM
351DATACOPYLOOPTEST:
352    cmpl    a1,a0                   | Done?
353    bcs.s   DATACOPYLOOP                | No, skip
354NODATACOPY:
355
356/* Now, clear BSS */
357        lea _clear_start,a0     | Get start of BSS
358    lea _clear_end,a1       | Get end of BSS
359    clrl    d0          | Value to set
360    bra.s   ZEROLOOPTEST        | Branch into clear loop
361ZEROLOOP:
362    movel   d0,a0@+         | Clear a word
363ZEROLOOPTEST:
364    cmpl    a1,a0           | Done?
365    bcs.s   ZEROLOOP        | No, skip
366
367
368    /*
369     * Right : Now we're ready to boot RTEMS
370     */
371    clrl    d0          | Pass in null to all boot_card() params
372    movel   d0,a7@-         | command line
373    jsr SYM(boot_card)      | Call C boot_card function to startup RTEMS
374    movel   a7@+,d0
375MULTI_TASK_EXIT:
376        nop
377        nop
378        trap    #14
379        bra     MULTI_TASK_EXIT
380
381END_CODE
382
383        .align 2
384BEGIN_DATA_DCL
385        .align 2
386    PUBLIC (_M68kSpuriousInterruptCount)
387SYM (_M68kSpuriousInterruptCount):
388    .long   0
389END_DATA_DCL
390
391END
392
Note: See TracBrowser for help on using the repository browser.