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

4.104.114.95
Last change on this file since b7ad0ed was b7ad0ed, checked in by Chris Johns <chrisj@…>, on 06/11/08 at 08:03:50

2008-06-10 Matthew Riek <matthew.riek@…>

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