source: rtems/c/src/lib/libbsp/m68k/mcf5235/start/start.S @ 1612af0

4.104.114.84.95
Last change on this file since 1612af0 was 1612af0, checked in by Joel Sherrill <joel.sherrill@…>, on 06/17/05 at 14:06:05

2005-06-17 Mike Bertosh <mbertosh@…>

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