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

Last change on this file since ff081aee was ff081aee, checked in by Sebastian Huber <sebastian.huber@…>, on Nov 6, 2018 at 3:58:02 PM

score: Rename interrupt stack symbols

Rename

  • _Configuration_Interrupt_stack_area_begin in _ISR_Stack_area_begin,
  • _Configuration_Interrupt_stack_area_end in _ISR_Stack_area_end, and
  • _Configuration_Interrupt_stack_size in _ISR_Stack_size.

Move definitions to <rtems/score/isr.h>. The new names are considerable
shorter and in the right namespace.

Update #3459.

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