source: rtems/c/src/lib/libbsp/m68k/genmcf548x/start/start.S @ 6440903c

4.115
Last change on this file since 6440903c was 6440903c, checked in by Sebastian Huber <sebastian.huber@…>, on 12/05/13 at 09:26:08

bsps/m68k: Add and use linkcmds.base

  • Property mode set to 100644
File size: 18.5 KB
Line 
1/*===============================================================*\
2| Project: RTEMS generic mcf548x BSP                              |
3+-----------------------------------------------------------------+
4| File: start.S                                                   |
5+-----------------------------------------------------------------+
6| The file contains the assembly part of MCF548x init code        |
7+-----------------------------------------------------------------+
8|                    Copyright (c) 2007                           |
9|                    Embedded Brains GmbH                         |
10|                    Obere Lagerstr. 30                           |
11|                    D-82178 Puchheim                             |
12|                    Germany                                      |
13|                    rtems@embedded-brains.de                     |
14+-----------------------------------------------------------------+
15|                                                                 |
16| Parts of the code has been derived from the "dBUG source code"  |
17| package Freescale is providing for M548X EVBs. The usage of     |
18| the modified or unmodified code and it's integration into the   |
19| generic mcf548x BSP has been done according to the Freescale    |
20| license terms.                                                  |
21|                                                                 |
22| The Freescale license terms can be reviewed in the file         |
23|                                                                 |
24|    Freescale_license.txt                                        |
25|                                                                 |
26+-----------------------------------------------------------------+
27|                                                                 |
28| The generic mcf548x BSP has been developed on the basic         |
29| structures and modules of the av5282 BSP.                       |
30|                                                                 |
31+-----------------------------------------------------------------+
32|                                                                 |
33| The license and distribution terms for this file may be         |
34| found in the file LICENSE in this distribution or at            |
35|                                                                 |
36| http://www.rtems.com/license/LICENSE.                           |
37|                                                                 |
38+-----------------------------------------------------------------+
39|                                                                 |
40|   date                      history                        ID   |
41| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
42| 12.11.07                    1.0                            ras  |
43|                                                                 |
44\*===============================================================*/
45
46/*===============================================================*\
47| Includes                                                        |
48\*===============================================================*/
49#include <rtems/asm.h>
50#include <bsp/linker-symbols.h>
51
52/*===============================================================*\
53| External references                                             |
54\*===============================================================*/
55.extern __MBAR
56.extern _CoreSramBase0
57.extern _CoreSramBase1
58.extern _CoreSramSize1
59.extern mcf548x_init
60.extern boot_card
61
62/*===============================================================*\
63| Global symbols                                                  |
64\*===============================================================*/
65
66.global interrupt_vector_table
67.global spurious_int_count
68.global start
69
70
71/*===============================================================*\
72| Exception Table                                                 |
73\*===============================================================*/
74
75.section ".vectors","ax"             /* begin of vectors section */
76PUBLIC (InterruptVectorTable)
77SYM(InterruptVectorTable):
78INITSP:         .long   bsp_initstack_end       /* Initial SP             */
79INITPC:         .long   start                   /* Initial PC             */
80vector002:      .long   asm_default_interrupt   /* Access Error           */
81vector003:      .long   asm_default_interrupt   /* Address Error          */
82vector004:      .long   asm_default_interrupt   /* Illegal Instruction    */
83vector005:      .long   asm_default_interrupt   /* Reserved               */
84vector006:      .long   asm_default_interrupt   /* Reserved               */
85vector007:      .long   asm_default_interrupt   /* Reserved               */
86vector008:      .long   asm_default_interrupt   /* Privilege Violation    */
87vector009:      .long   asm_default_interrupt   /* Trace                  */
88vector010:      .long   asm_default_interrupt   /* Unimplemented A-Line   */
89vector011:      .long   asm_default_interrupt   /* Unimplemented F-Line   */
90vector012:      .long   asm_default_interrupt   /* Debug Interrupt        */
91vector013:      .long   asm_default_interrupt   /* Reserved               */
92vector014:      .long   asm_default_interrupt   /* Format Error           */
93vector015:      .long   asm_default_interrupt   /* Unitialized Int.       */
94vector016:      .long   asm_default_interrupt   /* Reserved               */
95vector017:      .long   asm_default_interrupt   /* Reserved               */
96vector018:      .long   asm_default_interrupt   /* Reserved               */
97vector019:      .long   asm_default_interrupt   /* Reserved               */
98vector020:      .long   asm_default_interrupt   /* Reserved               */
99vector021:      .long   asm_default_interrupt   /* Reserved               */
100vector022:      .long   asm_default_interrupt   /* Reserved               */
101vector023:      .long   asm_default_interrupt   /* Reserved               */
102vector024:      .long   asm_spurious_interrupt  /* Spurious Interrupt     */
103vector025:      .long   asm_default_interrupt   /* Autovector Level 1     */
104vector026:      .long   asm_default_interrupt   /* Autovector Level 2     */
105vector027:      .long   asm_default_interrupt   /* Autovector Level 3     */
106vector028:      .long   asm_default_interrupt   /* Autovector Level 4     */
107vector029:      .long   asm_default_interrupt   /* Autovector Level 5     */
108vector030:      .long   asm_default_interrupt   /* Autovector Level 6     */
109vector031:      .long   asm_default_interrupt   /* Autovector Level 7     */
110vector032:      .long   asm_default_interrupt   /* TRAP #0                */
111vector033:      .long   asm_default_interrupt   /* TRAP #1                */
112vector034:      .long   asm_default_interrupt   /* TRAP #2                */
113vector035:      .long   asm_default_interrupt   /* TRAP #3                */
114vector036:      .long   asm_default_interrupt   /* TRAP #4                */
115vector037:      .long   asm_default_interrupt   /* TRAP #5                */
116vector038:      .long   asm_default_interrupt   /* TRAP #6                */
117vector039:      .long   asm_default_interrupt   /* TRAP #7                */
118vector040:      .long   asm_default_interrupt   /* TRAP #8                */
119vector041:      .long   asm_default_interrupt   /* TRAP #9                */
120vector042:      .long   asm_default_interrupt   /* TRAP #10               */
121vector043:      .long   asm_default_interrupt   /* TRAP #11               */
122vector044:      .long   asm_default_interrupt   /* TRAP #12               */
123vector045:      .long   asm_default_interrupt   /* TRAP #13               */
124vector046:      .long   asm_default_interrupt   /* TRAP #14               */
125vector047:      .long   asm_default_interrupt   /* TRAP #15               */
126vector048:      .long   asm_default_interrupt   /* Reserved               */
127vector049:      .long   asm_default_interrupt   /* Reserved               */
128vector050:      .long   asm_default_interrupt   /* Reserved               */
129vector051:      .long   asm_default_interrupt   /* Reserved               */
130vector052:      .long   asm_default_interrupt   /* Reserved               */
131vector053:      .long   asm_default_interrupt   /* Reserved               */
132vector054:      .long   asm_default_interrupt   /* Reserved               */
133vector055:      .long   asm_default_interrupt   /* Reserved               */
134vector056:      .long   asm_default_interrupt   /* Reserved               */
135vector057:      .long   asm_default_interrupt   /* Reserved               */
136vector058:      .long   asm_default_interrupt   /* Reserved               */
137vector059:      .long   asm_default_interrupt   /* Reserved               */
138vector060:      .long   asm_default_interrupt   /* Reserved               */
139vector061:      .long   asm_default_interrupt   /* Reserved               */
140vector062:      .long   asm_default_interrupt   /* Reserved               */
141vector063:      .long   asm_default_interrupt   /* Reserved               */
142vector064:      .long   asm_default_interrupt
143vector065:      .long   asm_default_interrupt
144vector066:      .long   asm_default_interrupt
145vector067:      .long   asm_default_interrupt
146vector068:      .long   asm_default_interrupt
147vector069:      .long   asm_default_interrupt
148vector070:      .long   asm_default_interrupt
149vector071:      .long   asm_default_interrupt
150vector072:      .long   asm_default_interrupt
151vector073:      .long   asm_default_interrupt
152vector074:      .long   asm_default_interrupt
153vector075:      .long   asm_default_interrupt
154vector076:      .long   asm_default_interrupt
155vector077:      .long   asm_default_interrupt
156vector078:      .long   asm_default_interrupt
157vector079:      .long   asm_default_interrupt
158vector080:      .long   asm_default_interrupt
159vector081:      .long   asm_default_interrupt
160vector082:      .long   asm_default_interrupt
161vector083:      .long   asm_default_interrupt
162vector084:      .long   asm_default_interrupt
163vector085:      .long   asm_default_interrupt
164vector086:      .long   asm_default_interrupt
165vector087:      .long   asm_default_interrupt
166vector088:      .long   asm_default_interrupt
167vector089:      .long   asm_default_interrupt
168vector090:      .long   asm_default_interrupt
169vector091:      .long   asm_default_interrupt
170vector092:      .long   asm_default_interrupt
171vector093:      .long   asm_default_interrupt
172vector094:      .long   asm_default_interrupt
173vector095:      .long   asm_default_interrupt
174vector096:      .long   asm_default_interrupt
175vector097:      .long   asm_default_interrupt
176vector098:      .long   asm_default_interrupt
177vector099:      .long   asm_default_interrupt
178vector100:      .long   asm_default_interrupt
179vector101:      .long   asm_default_interrupt
180vector102:      .long   asm_default_interrupt
181vector103:      .long   asm_default_interrupt
182vector104:      .long   asm_default_interrupt
183vector105:      .long   asm_default_interrupt
184vector106:      .long   asm_default_interrupt
185vector107:      .long   asm_default_interrupt
186vector108:      .long   asm_default_interrupt
187vector109:      .long   asm_default_interrupt
188vector110:      .long   asm_default_interrupt
189vector111:      .long   asm_default_interrupt
190vector112:      .long   asm_default_interrupt
191vector113:      .long   asm_default_interrupt
192vector114:      .long   asm_default_interrupt
193vector115:      .long   asm_default_interrupt
194vector116:      .long   asm_default_interrupt
195vector117:      .long   asm_default_interrupt
196vector118:      .long   asm_default_interrupt
197vector119:      .long   asm_default_interrupt
198vector120:      .long   asm_default_interrupt
199vector121:      .long   asm_default_interrupt
200vector122:      .long   asm_default_interrupt
201vector123:      .long   asm_default_interrupt
202vector124:      .long   asm_default_interrupt
203vector125:      .long   asm_default_interrupt
204vector126:      .long   asm_default_interrupt
205vector127:      .long   asm_default_interrupt
206vector128:      .long   asm_default_interrupt
207vector129:      .long   asm_default_interrupt
208vector130:      .long   asm_default_interrupt
209vector131:      .long   asm_default_interrupt
210vector132:      .long   asm_default_interrupt
211vector133:      .long   asm_default_interrupt
212vector134:      .long   asm_default_interrupt
213vector135:      .long   asm_default_interrupt
214vector136:      .long   asm_default_interrupt
215vector137:      .long   asm_default_interrupt
216vector138:      .long   asm_default_interrupt
217vector139:      .long   asm_default_interrupt
218vector140:      .long   asm_default_interrupt
219vector141:      .long   asm_default_interrupt
220vector142:      .long   asm_default_interrupt
221vector143:      .long   asm_default_interrupt
222vector144:      .long   asm_default_interrupt
223vector145:      .long   asm_default_interrupt
224vector146:      .long   asm_default_interrupt
225vector147:      .long   asm_default_interrupt
226vector148:      .long   asm_default_interrupt
227vector149:      .long   asm_default_interrupt
228vector150:      .long   asm_default_interrupt
229vector151:      .long   asm_default_interrupt
230vector152:      .long   asm_default_interrupt
231vector153:      .long   asm_default_interrupt
232vector154:      .long   asm_default_interrupt
233vector155:      .long   asm_default_interrupt
234vector156:      .long   asm_default_interrupt
235vector157:      .long   asm_default_interrupt
236vector158:      .long   asm_default_interrupt
237vector159:      .long   asm_default_interrupt
238vector160:      .long   asm_default_interrupt
239vector161:      .long   asm_default_interrupt
240vector162:      .long   asm_default_interrupt
241vector163:      .long   asm_default_interrupt
242vector164:      .long   asm_default_interrupt
243vector165:      .long   asm_default_interrupt
244vector166:      .long   asm_default_interrupt
245vector167:      .long   asm_default_interrupt
246vector168:      .long   asm_default_interrupt
247vector169:      .long   asm_default_interrupt
248vector170:      .long   asm_default_interrupt
249vector171:      .long   asm_default_interrupt
250vector172:      .long   asm_default_interrupt
251vector173:      .long   asm_default_interrupt
252vector174:      .long   asm_default_interrupt
253vector175:      .long   asm_default_interrupt
254vector176:      .long   asm_default_interrupt
255vector177:      .long   asm_default_interrupt
256vector178:      .long   asm_default_interrupt
257vector179:      .long   asm_default_interrupt
258vector180:      .long   asm_default_interrupt
259vector181:      .long   asm_default_interrupt
260vector182:      .long   asm_default_interrupt
261vector183:      .long   asm_default_interrupt
262vector184:      .long   asm_default_interrupt
263vector185:      .long   asm_default_interrupt
264vector186:      .long   asm_default_interrupt
265vector187:      .long   asm_default_interrupt
266vector188:      .long   asm_default_interrupt
267vector189:      .long   asm_default_interrupt
268vector190:      .long   asm_default_interrupt
269vector191:      .long   asm_default_interrupt
270vector192:      .long   asm_default_interrupt
271vector193:      .long   asm_default_interrupt
272vector194:      .long   asm_default_interrupt
273vector195:      .long   asm_default_interrupt
274vector196:      .long   asm_default_interrupt
275vector197:      .long   asm_default_interrupt
276vector198:      .long   asm_default_interrupt
277vector199:      .long   asm_default_interrupt
278vector200:      .long   asm_default_interrupt
279vector201:      .long   asm_default_interrupt
280vector202:      .long   asm_default_interrupt
281vector203:      .long   asm_default_interrupt
282vector204:      .long   asm_default_interrupt
283vector205:      .long   asm_default_interrupt
284vector206:      .long   asm_default_interrupt
285vector207:      .long   asm_default_interrupt
286vector208:      .long   asm_default_interrupt
287vector209:      .long   asm_default_interrupt
288vector210:      .long   asm_default_interrupt
289vector211:      .long   asm_default_interrupt
290vector212:      .long   asm_default_interrupt
291vector213:      .long   asm_default_interrupt
292vector214:      .long   asm_default_interrupt
293vector215:      .long   asm_default_interrupt
294vector216:      .long   asm_default_interrupt
295vector217:      .long   asm_default_interrupt
296vector218:      .long   asm_default_interrupt
297vector219:      .long   asm_default_interrupt
298vector220:      .long   asm_default_interrupt
299vector221:      .long   asm_default_interrupt
300vector222:      .long   asm_default_interrupt
301vector223:      .long   asm_default_interrupt
302vector224:      .long   asm_default_interrupt
303vector225:      .long   asm_default_interrupt
304vector226:      .long   asm_default_interrupt
305vector227:      .long   asm_default_interrupt
306vector228:      .long   asm_default_interrupt
307vector229:      .long   asm_default_interrupt
308vector230:      .long   asm_default_interrupt
309vector231:      .long   asm_default_interrupt
310vector232:      .long   asm_default_interrupt
311vector233:      .long   asm_default_interrupt
312vector234:      .long   asm_default_interrupt
313vector235:      .long   asm_default_interrupt
314vector236:      .long   asm_default_interrupt
315vector237:      .long   asm_default_interrupt
316vector238:      .long   asm_default_interrupt
317vector239:      .long   asm_default_interrupt
318vector240:      .long   asm_default_interrupt
319vector241:      .long   asm_default_interrupt
320vector242:      .long   asm_default_interrupt
321vector243:      .long   asm_default_interrupt
322vector244:      .long   asm_default_interrupt
323vector245:      .long   asm_default_interrupt
324vector246:      .long   asm_default_interrupt
325vector247:      .long   asm_default_interrupt
326vector248:      .long   asm_default_interrupt
327vector249:      .long   asm_default_interrupt
328vector250:      .long   asm_default_interrupt
329vector251:      .long   asm_default_interrupt
330vector252:      .long   asm_default_interrupt
331vector253:      .long   asm_default_interrupt
332vector254:      .long   asm_default_interrupt
333vector255:      .long   asm_default_interrupt
334
335/*===============================================================*\
336| Start of code                                                   |
337\*===============================================================*/
338.text
339PUBLIC (start)
340SYM(start):
341    move.w      #0x3700,sr              /* disable interrupts */
342    jmp         start_init
343
344/*===============================================================*\
345| Sspurious interrupt counter                                     |
346\*===============================================================*/
347.align 4
348.data                                   /* begin of data section */
349PUBLIC (spurious_int_count)
350SYM(spurious_int_count):
351    .long   0                           /* spurious interrupt counter */
352
353/*===============================================================*\
354| Function: Default exception handler                             |
355+-----------------------------------------------------------------+
356| - stop and disable all interrupts                               |
357| - loop forever                                                  |
358\*===============================================================*/
359.text                                   /* start of text section */
360.align 4
361PUBLIC (asm_default_interrupt)
362SYM(asm_default_interrupt):
363    nop
364    stop    #0x3700                     /* stop */
365    bra.w   asm_default_interrupt       /* loop forever */
366
367/*===============================================================*\
368| Function: Exception handler for spurious interrupts             |
369+-----------------------------------------------------------------+
370| - count spurious interrupts                                     |
371\*===============================================================*/
372.align 4
373PUBLIC (asm_spurious_interrupt)
374SYM(asm_spurious_interrupt):
375    add.l   #1,spurious_int_count
376    rte
377
378/*===============================================================*\
379| Function: start_init                                            |
380+-----------------------------------------------------------------+
381| - Disable all intterupts                                        |
382| - Setup the internal SRAM                                       |
383| - Initialize mcf548x peripherals                                |
384| - Set initial stack pointer                                     |
385| - Boot RTEMS
386\*===============================================================*/
387.align 4
388PUBLIC (start_init)
389SYM(start_init):
390
391    move.l  #0x01040100,d0              /* invalidate instruction/data/branch cache, disable all caches */
392    movec   d0,cacr
393
394    move.l  #_CoreSramBase0,d0          /* initialize RAMBAR0 */
395    add.l   #0x21,d0                    /* for code & data    */
396    movec   d0,rambar0
397
398    move.l  #_CoreSramBase1,d0          /* initialize RAMBAR1 */
399    add.l   #0x21,d0                    /* for code & data    */
400    movec   d0,rambar1                  /* movec d0,RAMBAR1   */
401
402    move.l  #__MBAR,d0                  /* initialize MBAR */
403    movec   d0,mbar
404
405    move.l  #_CoreSramBase1,d0          /* set sp to end of Core SRAM temporarily */
406    add.l   #_CoreSramSize1,d0
407    move.l  d0,sp
408
409    move.l  #0,d0                       /* initialize frame pointer */
410    movea.l d0,a6
411
412    jsr     mcf548x_init                /* Initialize mcf548x peripherals */
413
414    move.l  #bsp_initstack_end,sp       /* relocate sp */
415
416    clrl    d0                          /* clear d0 */
417    movel   d0,a7@-                     /* command line == 0 */
418
419    jsr     boot_card                   /* boot rtems */
420
421    movel   a7@+,d0
422
423exit_multitasking:
424    nop
425    nop
426    halt
427    bra     exit_multitasking
428
429.end                                    /* end of start.S module */
430
431
432
Note: See TracBrowser for help on using the repository browser.