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

4.104.114.95
Last change on this file since 69effbb4 was 69effbb4, checked in by Thomas Doerfler <Thomas.Doerfler@…>, on 07/11/08 at 10:00:41

added variant to gen68360 BSP
added genmcf548x BSP

  • Property mode set to 100644
File size: 18.7 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
51/*===============================================================*\
52| External references                                             |
53\*===============================================================*/
54.extern __MBAR
55.extern _CoreSramBase0
56.extern _CoreSramBase1
57.extern _CoreSramSize1
58.extern mcf548x_init
59.extern boot_card
60.extern _SpInit
61.extern _InitPc
62
63/*===============================================================*\
64| Global symbols                                                  |
65\*===============================================================*/
66
67.global interrupt_vector_table
68.global spurious_int_count
69.global start
70
71
72/*===============================================================*\
73| Exception Table                                                 |
74\*===============================================================*/
75
76.section ".vectors","ax"             /* begin of vectors section */
77PUBLIC (InterruptVectorTable)
78SYM(InterruptVectorTable):
79INITSP:         .long   _SpInit                 /* Initial SP             */
80INITPC:         .long   _InitPc                 /* Initial PC             */
81vector002:      .long   asm_default_interrupt   /* Access Error           */
82vector003:      .long   asm_default_interrupt   /* Address Error          */
83vector004:      .long   asm_default_interrupt   /* Illegal Instruction    */
84vector005:      .long   asm_default_interrupt   /* Reserved               */
85vector006:      .long   asm_default_interrupt   /* Reserved               */
86vector007:      .long   asm_default_interrupt   /* Reserved               */
87vector008:      .long   asm_default_interrupt   /* Privilege Violation    */
88vector009:      .long   asm_default_interrupt   /* Trace                  */
89vector010:      .long   asm_default_interrupt   /* Unimplemented A-Line   */
90vector011:      .long   asm_default_interrupt   /* Unimplemented F-Line   */
91vector012:      .long   asm_default_interrupt   /* Debug Interrupt        */
92vector013:      .long   asm_default_interrupt   /* Reserved               */
93vector014:      .long   asm_default_interrupt   /* Format Error           */
94vector015:      .long   asm_default_interrupt   /* Unitialized Int.       */
95vector016:      .long   asm_default_interrupt   /* Reserved               */
96vector017:      .long   asm_default_interrupt   /* Reserved               */
97vector018:      .long   asm_default_interrupt   /* Reserved               */
98vector019:      .long   asm_default_interrupt   /* Reserved               */
99vector020:      .long   asm_default_interrupt   /* Reserved               */
100vector021:      .long   asm_default_interrupt   /* Reserved               */
101vector022:      .long   asm_default_interrupt   /* Reserved               */
102vector023:      .long   asm_default_interrupt   /* Reserved               */
103vector024:      .long   asm_spurious_interrupt  /* Spurious Interrupt     */
104vector025:      .long   asm_default_interrupt   /* Autovector Level 1     */
105vector026:      .long   asm_default_interrupt   /* Autovector Level 2     */
106vector027:      .long   asm_default_interrupt   /* Autovector Level 3     */
107vector028:      .long   asm_default_interrupt   /* Autovector Level 4     */
108vector029:      .long   asm_default_interrupt   /* Autovector Level 5     */
109vector030:      .long   asm_default_interrupt   /* Autovector Level 6     */
110vector031:      .long   asm_default_interrupt   /* Autovector Level 7     */
111vector032:      .long   asm_default_interrupt   /* TRAP #0                */
112vector033:      .long   asm_default_interrupt   /* TRAP #1                */
113vector034:      .long   asm_default_interrupt   /* TRAP #2                */
114vector035:      .long   asm_default_interrupt   /* TRAP #3                */
115vector036:      .long   asm_default_interrupt   /* TRAP #4                */
116vector037:      .long   asm_default_interrupt   /* TRAP #5                */
117vector038:      .long   asm_default_interrupt   /* TRAP #6                */
118vector039:      .long   asm_default_interrupt   /* TRAP #7                */
119vector040:      .long   asm_default_interrupt   /* TRAP #8                */
120vector041:      .long   asm_default_interrupt   /* TRAP #9                */
121vector042:      .long   asm_default_interrupt   /* TRAP #10               */
122vector043:      .long   asm_default_interrupt   /* TRAP #11               */
123vector044:      .long   asm_default_interrupt   /* TRAP #12               */
124vector045:      .long   asm_default_interrupt   /* TRAP #13               */
125vector046:      .long   asm_default_interrupt   /* TRAP #14               */
126vector047:      .long   asm_default_interrupt   /* TRAP #15               */
127vector048:      .long   asm_default_interrupt   /* Reserved               */
128vector049:      .long   asm_default_interrupt   /* Reserved               */
129vector050:      .long   asm_default_interrupt   /* Reserved               */
130vector051:      .long   asm_default_interrupt   /* Reserved               */
131vector052:      .long   asm_default_interrupt   /* Reserved               */
132vector053:      .long   asm_default_interrupt   /* Reserved               */
133vector054:      .long   asm_default_interrupt   /* Reserved               */
134vector055:      .long   asm_default_interrupt   /* Reserved               */
135vector056:      .long   asm_default_interrupt   /* Reserved               */
136vector057:      .long   asm_default_interrupt   /* Reserved               */
137vector058:      .long   asm_default_interrupt   /* Reserved               */
138vector059:      .long   asm_default_interrupt   /* Reserved               */
139vector060:      .long   asm_default_interrupt   /* Reserved               */
140vector061:      .long   asm_default_interrupt   /* Reserved               */
141vector062:      .long   asm_default_interrupt   /* Reserved               */
142vector063:      .long   asm_default_interrupt   /* Reserved               */
143vector064:      .long   asm_default_interrupt
144vector065:      .long   asm_default_interrupt
145vector066:      .long   asm_default_interrupt
146vector067:      .long   asm_default_interrupt
147vector068:      .long   asm_default_interrupt
148vector069:      .long   asm_default_interrupt
149vector070:      .long   asm_default_interrupt
150vector071:      .long   asm_default_interrupt
151vector072:      .long   asm_default_interrupt
152vector073:      .long   asm_default_interrupt
153vector074:      .long   asm_default_interrupt
154vector075:      .long   asm_default_interrupt
155vector076:      .long   asm_default_interrupt
156vector077:      .long   asm_default_interrupt
157vector078:      .long   asm_default_interrupt
158vector079:      .long   asm_default_interrupt
159vector080:      .long   asm_default_interrupt
160vector081:      .long   asm_default_interrupt
161vector082:      .long   asm_default_interrupt
162vector083:      .long   asm_default_interrupt
163vector084:      .long   asm_default_interrupt
164vector085:      .long   asm_default_interrupt
165vector086:      .long   asm_default_interrupt
166vector087:      .long   asm_default_interrupt
167vector088:      .long   asm_default_interrupt
168vector089:      .long   asm_default_interrupt
169vector090:      .long   asm_default_interrupt
170vector091:      .long   asm_default_interrupt
171vector092:      .long   asm_default_interrupt
172vector093:      .long   asm_default_interrupt
173vector094:      .long   asm_default_interrupt
174vector095:      .long   asm_default_interrupt
175vector096:      .long   asm_default_interrupt
176vector097:      .long   asm_default_interrupt
177vector098:      .long   asm_default_interrupt
178vector099:      .long   asm_default_interrupt
179vector100:      .long   asm_default_interrupt
180vector101:      .long   asm_default_interrupt
181vector102:      .long   asm_default_interrupt
182vector103:      .long   asm_default_interrupt
183vector104:      .long   asm_default_interrupt
184vector105:      .long   asm_default_interrupt
185vector106:      .long   asm_default_interrupt
186vector107:      .long   asm_default_interrupt
187vector108:      .long   asm_default_interrupt
188vector109:      .long   asm_default_interrupt
189vector110:      .long   asm_default_interrupt
190vector111:      .long   asm_default_interrupt
191vector112:      .long   asm_default_interrupt
192vector113:      .long   asm_default_interrupt
193vector114:      .long   asm_default_interrupt
194vector115:      .long   asm_default_interrupt
195vector116:      .long   asm_default_interrupt
196vector117:      .long   asm_default_interrupt
197vector118:      .long   asm_default_interrupt
198vector119:      .long   asm_default_interrupt
199vector120:      .long   asm_default_interrupt
200vector121:      .long   asm_default_interrupt
201vector122:      .long   asm_default_interrupt
202vector123:      .long   asm_default_interrupt
203vector124:      .long   asm_default_interrupt
204vector125:      .long   asm_default_interrupt
205vector126:      .long   asm_default_interrupt
206vector127:      .long   asm_default_interrupt
207vector128:      .long   asm_default_interrupt
208vector129:      .long   asm_default_interrupt
209vector130:      .long   asm_default_interrupt
210vector131:      .long   asm_default_interrupt
211vector132:      .long   asm_default_interrupt
212vector133:      .long   asm_default_interrupt
213vector134:      .long   asm_default_interrupt
214vector135:      .long   asm_default_interrupt
215vector136:      .long   asm_default_interrupt
216vector137:      .long   asm_default_interrupt
217vector138:      .long   asm_default_interrupt
218vector139:      .long   asm_default_interrupt
219vector140:      .long   asm_default_interrupt
220vector141:      .long   asm_default_interrupt
221vector142:      .long   asm_default_interrupt
222vector143:      .long   asm_default_interrupt
223vector144:      .long   asm_default_interrupt
224vector145:      .long   asm_default_interrupt
225vector146:      .long   asm_default_interrupt
226vector147:      .long   asm_default_interrupt
227vector148:      .long   asm_default_interrupt
228vector149:      .long   asm_default_interrupt
229vector150:      .long   asm_default_interrupt
230vector151:      .long   asm_default_interrupt
231vector152:      .long   asm_default_interrupt
232vector153:      .long   asm_default_interrupt
233vector154:      .long   asm_default_interrupt
234vector155:      .long   asm_default_interrupt
235vector156:      .long   asm_default_interrupt
236vector157:      .long   asm_default_interrupt
237vector158:      .long   asm_default_interrupt
238vector159:      .long   asm_default_interrupt
239vector160:      .long   asm_default_interrupt
240vector161:      .long   asm_default_interrupt
241vector162:      .long   asm_default_interrupt
242vector163:      .long   asm_default_interrupt
243vector164:      .long   asm_default_interrupt
244vector165:      .long   asm_default_interrupt
245vector166:      .long   asm_default_interrupt
246vector167:      .long   asm_default_interrupt
247vector168:      .long   asm_default_interrupt
248vector169:      .long   asm_default_interrupt
249vector170:      .long   asm_default_interrupt
250vector171:      .long   asm_default_interrupt
251vector172:      .long   asm_default_interrupt
252vector173:      .long   asm_default_interrupt
253vector174:      .long   asm_default_interrupt
254vector175:      .long   asm_default_interrupt
255vector176:      .long   asm_default_interrupt
256vector177:      .long   asm_default_interrupt
257vector178:      .long   asm_default_interrupt
258vector179:      .long   asm_default_interrupt
259vector180:      .long   asm_default_interrupt
260vector181:      .long   asm_default_interrupt
261vector182:      .long   asm_default_interrupt
262vector183:      .long   asm_default_interrupt
263vector184:      .long   asm_default_interrupt
264vector185:      .long   asm_default_interrupt
265vector186:      .long   asm_default_interrupt
266vector187:      .long   asm_default_interrupt
267vector188:      .long   asm_default_interrupt
268vector189:      .long   asm_default_interrupt
269vector190:      .long   asm_default_interrupt
270vector191:      .long   asm_default_interrupt
271vector192:      .long   asm_default_interrupt
272vector193:      .long   asm_default_interrupt
273vector194:      .long   asm_default_interrupt
274vector195:      .long   asm_default_interrupt
275vector196:      .long   asm_default_interrupt
276vector197:      .long   asm_default_interrupt
277vector198:      .long   asm_default_interrupt
278vector199:      .long   asm_default_interrupt
279vector200:      .long   asm_default_interrupt
280vector201:      .long   asm_default_interrupt
281vector202:      .long   asm_default_interrupt
282vector203:      .long   asm_default_interrupt
283vector204:      .long   asm_default_interrupt
284vector205:      .long   asm_default_interrupt
285vector206:      .long   asm_default_interrupt
286vector207:      .long   asm_default_interrupt
287vector208:      .long   asm_default_interrupt
288vector209:      .long   asm_default_interrupt
289vector210:      .long   asm_default_interrupt
290vector211:      .long   asm_default_interrupt
291vector212:      .long   asm_default_interrupt
292vector213:      .long   asm_default_interrupt
293vector214:      .long   asm_default_interrupt
294vector215:      .long   asm_default_interrupt
295vector216:      .long   asm_default_interrupt
296vector217:      .long   asm_default_interrupt
297vector218:      .long   asm_default_interrupt
298vector219:      .long   asm_default_interrupt
299vector220:      .long   asm_default_interrupt
300vector221:      .long   asm_default_interrupt
301vector222:      .long   asm_default_interrupt
302vector223:      .long   asm_default_interrupt
303vector224:      .long   asm_default_interrupt
304vector225:      .long   asm_default_interrupt
305vector226:      .long   asm_default_interrupt
306vector227:      .long   asm_default_interrupt
307vector228:      .long   asm_default_interrupt
308vector229:      .long   asm_default_interrupt
309vector230:      .long   asm_default_interrupt
310vector231:      .long   asm_default_interrupt
311vector232:      .long   asm_default_interrupt
312vector233:      .long   asm_default_interrupt
313vector234:      .long   asm_default_interrupt
314vector235:      .long   asm_default_interrupt
315vector236:      .long   asm_default_interrupt
316vector237:      .long   asm_default_interrupt
317vector238:      .long   asm_default_interrupt
318vector239:      .long   asm_default_interrupt
319vector240:      .long   asm_default_interrupt
320vector241:      .long   asm_default_interrupt
321vector242:      .long   asm_default_interrupt
322vector243:      .long   asm_default_interrupt
323vector244:      .long   asm_default_interrupt
324vector245:      .long   asm_default_interrupt
325vector246:      .long   asm_default_interrupt
326vector247:      .long   asm_default_interrupt
327vector248:      .long   asm_default_interrupt
328vector249:      .long   asm_default_interrupt
329vector250:      .long   asm_default_interrupt
330vector251:      .long   asm_default_interrupt
331vector252:      .long   asm_default_interrupt
332vector253:      .long   asm_default_interrupt
333vector254:      .long   asm_default_interrupt
334vector255:      .long   asm_default_interrupt
335
336/*===============================================================*\
337| Start of code                                                   |
338\*===============================================================*/
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  #_SpInit,sp                 /* relocate sp */
415     
416    clrl    d0                          /* clear d0 */
417    movel   d0,a7@-                     /* environp == NULL */
418    movel   d0,a7@-                     /* argv == NULL */
419    movel   d0,a7@-                     /* argc == 0 */
420 
421    jsr     boot_card                   /* boot rtems */
422
423    movel   a7@+,d0
424    movel   a7@+,d0
425    movel   a7@+,d0
426
427exit_multitasking:
428    nop
429    nop
430    halt                               
431    bra     exit_multitasking
432
433.end                                    /* end of start.S module */     
434   
435
436 
Note: See TracBrowser for help on using the repository browser.