source: rtems/bsps/m68k/mcf5225x/start/start.S @ fbcd7c8f

5
Last change on this file since fbcd7c8f was fbcd7c8f, checked in by Sebastian Huber <sebastian.huber@…>, on 04/20/18 at 08:19:28

bsps: Move start files to bsps

This patch is a part of the BSP source reorganization.

Update #3285.

  • Property mode set to 100644
File size: 12.6 KB
Line 
1/*
2 *  dpu-mcf52258 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.org/license/LICENSE.
15 */
16
17#include <rtems/asm.h>
18
19.extern _StackInit
20
21BEGIN_CODE
22   
23    PUBLIC (_INTERRUPT_VECTOR)
24SYM(_INTERRUPT_VECTOR):
25
26    .long   _StackInit /* 00 Initial 'SSP' */
27    .long   SYM(start) /* 01 Initial PC */
28    .long   SYM(_uhoh) /* 02 Access Error */
29    .long   SYM(_uhoh) /* 03 Address Error */
30    .long   SYM(_uhoh) /* 04 Illegal Instruction */
31    .long   SYM(_uhoh) /* 05 Divide by Zero */
32    .long   SYM(_uhoh) /* 06 Reserved */
33    .long   SYM(_uhoh) /* 07 Reserved */
34    .long   SYM(_uhoh) /* 08 Privilege Violation */
35    .long   SYM(_uhoh) /* 09 Trace */
36    .long   SYM(_uhoh) /* 10 Unimplemented A-Line */
37    .long   SYM(_uhoh) /* 11 Unimplemented F-Line */
38    .long   SYM(_uhoh) /* 12 Debug Interrupt */
39    .long   SYM(_uhoh) /* 13 Reserved */
40    .long   SYM(_uhoh) /* 14 Format Error */
41    .long   SYM(_uhoh) /* 15 Reserved */
42    .long   SYM(_uhoh) /* 16 Reserved */
43    .long   SYM(_uhoh) /* 17 Reserved */
44    .long   SYM(_uhoh) /* 18 Reserved */
45    .long   SYM(_uhoh) /* 19 Reserved */
46    .long   SYM(_uhoh) /* 20 Reserved */
47    .long   SYM(_uhoh) /* 21 Reserved */
48    .long   SYM(_uhoh) /* 22 Reserved */
49    .long   SYM(_uhoh) /* 23 Reserved */
50    .long   SYM(_spuriousInterrupt) /* 24 Spurious Interrupt */
51    .long   SYM(_uhoh) /* 25 Reserved */
52    .long   SYM(_uhoh) /* 26 Reserved */
53    .long   SYM(_uhoh) /* 27 Reserved */
54    .long   SYM(_uhoh) /* 28 Reserved */
55    .long   SYM(_uhoh) /* 29 Reserved */
56    .long   SYM(_uhoh) /* 30 Reserved */
57    .long   SYM(_uhoh) /* 31 Reserved */
58    .long   SYM(_uhoh) /* 32 TRAP #0 */
59    .long   SYM(_uhoh) /* 33 TRAP #1 */
60    .long   SYM(_uhoh) /* 34 TRAP #2 */
61    .long   SYM(_uhoh) /* 35 TRAP #3 */
62    .long   SYM(_uhoh) /* 36 TRAP #4 */
63    .long   SYM(_uhoh) /* 37 TRAP #5 */
64    .long   SYM(_uhoh) /* 38 TRAP #6 */
65    .long   SYM(_uhoh) /* 39 TRAP #7 */
66    .long   SYM(_uhoh) /* 40 TRAP #8 */
67    .long   SYM(_uhoh) /* 41 TRAP #9 */
68    .long   SYM(_uhoh) /* 42 TRAP #10 */
69    .long   SYM(_uhoh) /* 43 TRAP #11 */
70    .long   SYM(_uhoh) /* 44 TRAP #12 */
71    .long   SYM(_uhoh) /* 45 TRAP #13 */
72    .long   SYM(_uhoh) /* 46 TRAP #14 */
73    .long   SYM(_uhoh) /* 47 TRAP #15 */
74    .long   SYM(_uhoh) /* 48 Reserved */
75    .long   SYM(_uhoh) /* 49 Reserved */
76    .long   SYM(_uhoh) /* 50 Reserved */
77    .long   SYM(_uhoh) /* 51 Reserved */
78    .long   SYM(_uhoh) /* 52 Reserved */
79    .long   SYM(_uhoh) /* 53 Reserved */
80    .long   SYM(_uhoh) /* 54 Reserved */
81    .long   SYM(_uhoh) /* 55 Reserved */
82    .long   SYM(_uhoh) /* 56 Reserved */
83    .long   SYM(_uhoh) /* 57 Reserved */
84    .long   SYM(_uhoh) /* 58 Reserved */
85    .long   SYM(_uhoh) /* 59 Reserved */
86    .long   SYM(_uhoh) /* 60 Reserved */
87    .long   SYM(_uhoh) /* 61 Reserved */
88    .long   SYM(_uhoh) /* 62 Reserved */
89    .long   SYM(_uhoh) /* 63 Reserved */
90
91    /* INTC0 */
92
93    .long   SYM(_uhoh) /* 64*/
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
158    /* INTC1 */
159
160    .long   SYM(_uhoh) /* 128*/
161    .long   SYM(_uhoh) /* 129*/
162    .long   SYM(_uhoh) /* 130*/
163    .long   SYM(_uhoh) /* 131*/
164    .long   SYM(_uhoh) /* 132*/
165    .long   SYM(_uhoh) /* 133*/
166    .long   SYM(_uhoh) /* 134*/
167    .long   SYM(_uhoh) /* 135*/
168    .long   SYM(_uhoh) /* 136*/
169    .long   SYM(_uhoh) /* 137*/
170    .long   SYM(_uhoh) /* 138*/
171    .long   SYM(_uhoh) /* 139*/
172    .long   SYM(_uhoh) /* 140*/
173    .long   SYM(_uhoh) /* 141*/
174    .long   SYM(_uhoh) /* 142*/
175    .long   SYM(_uhoh) /* 143*/
176    .long   SYM(_uhoh) /* 144*/
177    .long   SYM(_uhoh) /* 145*/
178    .long   SYM(_uhoh) /* 146*/
179    .long   SYM(_uhoh) /* 147*/
180    .long   SYM(_uhoh) /* 148*/
181    .long   SYM(_uhoh) /* 149*/
182    .long   SYM(_uhoh) /* 150*/
183    .long   SYM(_uhoh) /* 151*/
184    .long   SYM(_uhoh) /* 152*/
185    .long   SYM(_uhoh) /* 153*/
186    .long   SYM(_uhoh) /* 154*/
187    .long   SYM(_uhoh) /* 155*/
188    .long   SYM(_uhoh) /* 156*/
189    .long   SYM(_uhoh) /* 157*/
190    .long   SYM(_uhoh) /* 158*/
191    .long   SYM(_uhoh) /* 159*/
192    .long   SYM(_uhoh) /* 160*/
193    .long   SYM(_uhoh) /* 161*/
194    .long   SYM(_uhoh) /* 162*/
195    .long   SYM(_uhoh) /* 163*/
196    .long   SYM(_uhoh) /* 164*/
197    .long   SYM(_uhoh) /* 165*/
198    .long   SYM(_uhoh) /* 166*/
199    .long   SYM(_uhoh) /* 167*/
200    .long   SYM(_uhoh) /* 168*/
201    .long   SYM(_uhoh) /* 169*/
202    .long   SYM(_uhoh) /* 170*/
203    .long   SYM(_uhoh) /* 171*/
204    .long   SYM(_uhoh) /* 172*/
205    .long   SYM(_uhoh) /* 173*/
206    .long   SYM(_uhoh) /* 174*/
207    .long   SYM(_uhoh) /* 175*/
208    .long   SYM(_uhoh) /* 176*/
209    .long   SYM(_uhoh) /* 177*/
210    .long   SYM(_uhoh) /* 178*/
211    .long   SYM(_uhoh) /* 179*/
212    .long   SYM(_uhoh) /* 180*/
213    .long   SYM(_uhoh) /* 181*/
214    .long   SYM(_uhoh) /* 182*/
215    .long   SYM(_uhoh) /* 183*/
216    .long   SYM(_uhoh) /* 184*/
217    .long   SYM(_uhoh) /* 185*/
218    .long   SYM(_uhoh) /* 186*/
219    .long   SYM(_uhoh) /* 187*/
220    .long   SYM(_uhoh) /* 188*/
221    .long   SYM(_uhoh) /* 189*/
222    .long   SYM(_uhoh) /* 190*/
223    .long   SYM(_uhoh) /* 191*/
224    .long   SYM(_uhoh) /* 192*/
225
226    /* */
227
228    .long   SYM(_uhoh) /* 193*/
229    .long   SYM(_uhoh) /* 194*/
230    .long   SYM(_uhoh) /* 195*/
231    .long   SYM(_uhoh) /* 196*/
232    .long   SYM(_uhoh) /* 197*/
233    .long   SYM(_uhoh) /* 198*/
234    .long   SYM(_uhoh) /* 199*/
235    .long   SYM(_uhoh) /* 200*/
236    .long   SYM(_uhoh) /* 201*/
237    .long   SYM(_uhoh) /* 202*/
238    .long   SYM(_uhoh) /* 203*/
239    .long   SYM(_uhoh) /* 204*/
240    .long   SYM(_uhoh) /* 205*/
241    .long   SYM(_uhoh) /* 206*/
242    .long   SYM(_uhoh) /* 207*/
243    .long   SYM(_uhoh) /* 208*/
244    .long   SYM(_uhoh) /* 209*/
245    .long   SYM(_uhoh) /* 210*/
246    .long   SYM(_uhoh) /* 211*/
247    .long   SYM(_uhoh) /* 212*/
248    .long   SYM(_uhoh) /* 213*/
249    .long   SYM(_uhoh) /* 214*/
250    .long   SYM(_uhoh) /* 215*/
251    .long   SYM(_uhoh) /* 216*/
252    .long   SYM(_uhoh) /* 217*/
253    .long   SYM(_uhoh) /* 218*/
254    .long   SYM(_uhoh) /* 219*/
255    .long   SYM(_uhoh) /* 220*/
256    .long   SYM(_uhoh) /* 221*/
257    .long   SYM(_uhoh) /* 222*/
258    .long   SYM(_uhoh) /* 223*/
259    .long   SYM(_uhoh) /* 224*/
260    .long   SYM(_uhoh) /* 225*/
261    .long   SYM(_uhoh) /* 226*/
262    .long   SYM(_uhoh) /* 227*/
263    .long   SYM(_uhoh) /* 228*/
264    .long   SYM(_uhoh) /* 229*/
265    .long   SYM(_uhoh) /* 230*/
266    .long   SYM(_uhoh) /* 231*/
267    .long   SYM(_uhoh) /* 232*/
268    .long   SYM(_uhoh) /* 233*/
269    .long   SYM(_uhoh) /* 234*/
270    .long   SYM(_uhoh) /* 235*/
271    .long   SYM(_uhoh) /* 236*/
272    .long   SYM(_uhoh) /* 237*/
273    .long   SYM(_uhoh) /* 238*/
274    .long   SYM(_uhoh) /* 239*/
275    .long   SYM(_uhoh) /* 240*/
276    .long   SYM(_uhoh) /* 241*/
277    .long   SYM(_uhoh) /* 242*/
278    .long   SYM(_uhoh) /* 243*/
279    .long   SYM(_uhoh) /* 244*/
280    .long   SYM(_uhoh) /* 245*/
281    .long   SYM(_uhoh) /* 246*/
282    .long   SYM(_uhoh) /* 247*/
283    .long   SYM(_uhoh) /* 248*/
284    .long   SYM(_uhoh) /* 249*/
285    .long   SYM(_uhoh) /* 250*/
286    .long   SYM(_uhoh) /* 251*/
287    .long   SYM(_uhoh) /* 252*/
288    .long   SYM(_uhoh) /* 253*/
289    .long   SYM(_uhoh) /* 254*/
290    .long   SYM(_uhoh) /* 255*/
291
292/*
293 * We must write the flash configuration here.
294         This portion of RAM is shadowed
295 * by some flash registers, so we can't put code here!
296 */
297
298    PUBLIC (_FLASH_CONFIGURATION_FIELD)
299SYM(_FLASH_CONFIGURATION_FIELD):
300
301_key_upper: .long   0x5a5a5a5a
302_key_lower: .long   0x5a5a5a5a
303_cfm_prot:  .long   0x00000000
304_cfm_sacc:  .long   0x00000000
305_cfm_dacc:  .long   0x00000000
306_cfm_msec:  .long   0x80000000          //enable the KEYEN bit to bypass security in backdoor mode
307
308/*
309 * Default trap handler
310 * With an oscilloscope you can see AS* stop
311 */
312.align 4
313    PUBLIC (_uhoh)
314SYM(_uhoh):
315    nop                     | Leave spot for breakpoint
316    stop    #0x2700         | Stop with interrupts disabled
317    bra.w   SYM(_uhoh)      | Stuck forever
318
319/*
320 * Spurious Interrupt Handler
321 */
322.align 4
323    PUBLIC (_spuriousInterrupt)
324SYM(_spuriousInterrupt):
325    addql   #1, SYM(_M68kSpuriousInterruptCount)
326    rte
327
328/*
329 * Write VBR Register
330 */
331
332/*
333.align 4
334    PUBLIC (_wr_vbr)
335SYM(_wr_vbr):
336    move.l  4(sp), d0
337    movec   d0, vbr
338    nop
339    rts
340*/
341
342/*
343 * Board startup
344 * Disable watchdog, interrupts
345 * Enable sram
346 */
347.align 4
348    PUBLIC (start)
349SYM(start):
350
351    /* Mask off interupts */
352    move.w   #0x2700, sr
353
354                /* Save off intial D0 and D1 to NOT scratched registers conforming to ABI C calling convention */
355                move.l  d0,d5;
356                move.l  d1,d6;
357
358    /* Initialize RAMBAR: locate SRAM and validate it */
359    move.l  #RamBase, d7
360    add.l   #0x21, d7
361    movec   d7, %rambar
362
363    /* Locate Stack Pointer */
364    move.l  #_StackInit, sp
365
366    /* Initialize FLASHBAR */
367    move.l  #_FlashBase, d7
368    cmp.l   #0x00000000, d7
369    bne     _change_flashbar
370    add.l   #0x61, d7
371    movec   d7, %flashbar
372
373_continue_startup:
374
375    /* Locate Stack Pointer */
376//    move.l  #_StackInit, sp           //is done automatically by the CPU
377
378    /*
379     * Remainder of the startup code is handled by C code
380     * This never returns
381     */
382   
383    jmp SYM(Init5225x)
384
385_change_flashbar:
386    /*
387    * The following sequence is used to set FLASHBAR. Since we may
388    * be executing from Flash, we must put the routine into SRAM for
389    * execution and then jump back to Flash using the new address.
390    *
391    * The following instructions are coded into the SRAM:
392    *
393    * move.l    #(__FLASH + 0x61),d0
394    * movec    d0, FLASHBAR
395    * jmp        _continue_startup
396    *
397    * An arbitrary SRAM address is chosen until the real address
398    * can be loaded.
399    *
400    * This routine is not necessary if the default Flash address
401    * (0x00000000) is used.
402    *
403    * If running in SRAM, change_flashbar should not be executed
404    */
405
406    move.l  #RamBase, a0
407
408    /* Code "move.l #(__FLASH + 0x61),d0" into SRAM */
409    move.w  #0x203C, d0
410    move.w  d0, (a0)+
411    move.l  #_FlashBase, d0
412    add.l   #0x61, d0
413    move.l  d0, (a0)+
414
415    /* Code "movec d0,FLASHBAR" into SRAM */
416    move.l  #0x4e7b0C04, d0
417    move.l  d0, (a0)+
418
419    /* Code "jmp _continue_startup" into SRAM */
420    move.w  #0x4EF9, d0
421    move.w  d0, (a0)+
422    move.l  #_continue_startup, d0
423    move.l  d0, (a0)+
424
425    /* Jump to code segment in internal SRAM */
426    jmp     RamBase
427
428END_CODE
429
430
431BEGIN_DATA_DCL
432
433    .align 4
434
435PUBLIC (_M68kSpuriousInterruptCount)
436SYM (_M68kSpuriousInterruptCount):
437    .long   0
438
439PUBLIC (_d0_reset)
440SYM (_d0_reset):
441    .long   0
442
443PUBLIC (_d1_reset)
444SYM (_d1_reset):
445    .long   0
446
447END_DATA_DCL
448
449END
450
Note: See TracBrowser for help on using the repository browser.