OpenCores
URL https://opencores.org/ocsvn/sdcard_mass_storage_controller/sdcard_mass_storage_controller/trunk

Subversion Repositories sdcard_mass_storage_controller

[/] [sdcard_mass_storage_controller/] [trunk/] [sw/] [sdc_dma/] [BootReset.S] - Blame information for rev 126

Go to most recent revision | Details | Compare with Previous | View Log

Line No. Rev Author Line
1 69 tac2
/*$$HEADER*/
2
/******************************************************************************/
3
/*                                                                            */
4
/*                    H E A D E R   I N F O R M A T I O N                     */
5
/*                                                                            */
6
/******************************************************************************/
7
 
8
// Project Name                   : Development Board Debugger Example
9
// File Name                      : BootReset.S
10
// Prepared By                    : jb
11
// Project Start                  : 2009-01-01
12
 
13
 
14
/*$$COPYRIGHT NOTICE*/
15
/******************************************************************************/
16
/*                                                                            */
17
/*                      C O P Y R I G H T   N O T I C E                       */
18
/*                                                                            */
19
/******************************************************************************/
20
 
21
// Copyright (c) ORSoC 2009 All rights reserved.
22
 
23
// The information in this document is the property of ORSoC.
24
// Except as specifically authorized in writing by ORSoC, the receiver of
25
// this document shall keep the information contained herein confidential and
26
// shall protect the same in whole or in part thereof from disclosure and
27
// dissemination to third parties. Disclosure and disseminations to the receiver's
28
// employees shall only be made on a strict need to know basis.
29
 
30
 
31
/*$$DESCRIPTION*/
32
/******************************************************************************/
33
/*                                                                            */
34
/*                           D E S C R I P T I O N                            */
35
/*                                                                            */
36
/******************************************************************************/
37
 
38
// Define the contents of the reset vector (from 0x100), an IC enable routine
39
// as well as en external IRQ service routine.
40
 
41
/*$$CHANGE HISTORY*/
42
/******************************************************************************/
43
/*                                                                            */
44
/*                         C H A N G E  H I S T O R Y                         */
45
/*                                                                            */
46
/******************************************************************************/
47
 
48
// Date         Version Description
49
//------------------------------------------------------------------------
50
// 090101       1.0     First version                           jb
51
 
52
 
53
/*$$INCLUDE FILES*/
54
/******************************************************************************/
55
/*                                                                            */
56
/*                      I N C L U D E   F I L E S                             */
57
/*                                                                            */
58
/******************************************************************************/
59
 
60
#include "board.h"
61
#include "spr_defs.h"
62
 
63
/*$$PRIVATE MACROS*/
64
/******************************************************************************/
65
/*                                                                            */
66
/*                      P R I V A T E   M A C R O S                           */
67
/*                                                                            */
68
/******************************************************************************/
69
 
70
/******************************************************************************/
71
/*        L O A D   3 2  B I T   C O N S T A N T  I N T O   R E G I S T E R   */
72
/******************************************************************************/
73
 
74
.macro  load32i reg const
75
        l.movhi \reg,hi(\const)
76
        l.ori   \reg,\reg,lo(\const)
77
.endm
78
 
79
/******************************************************************************/
80
/*                   S E T U P   E X C E P T I O N   V E C T O R              */
81
/******************************************************************************/
82
 
83
.macro  exception_vector name org
84
        .org \org
85
        .p2align 8
86
        .global  __exception_\name
87
__exception_\name:
88
 
89
        l.j __exception_\name
90
        l.nop
91
.endm
92
 
93
/******************************************************************************/
94
/*                         B R A N C H   T O   N A M E                        */
95
/******************************************************************************/
96
 
97
.macro  BSR name
98
        l.j    \name
99
        l.nop
100
ret_\name:
101
.endm
102
 
103
 
104
/*$$RESET START*/
105
/******************************************************************************/
106
/*                                                                            */
107
/*                          R E S E T   S T A R T                             */
108
/*                                                                            */
109
/******************************************************************************/
110
 
111
.section .vectors, "ax"
112
 
113
.org 0x100 - 0x100              // Sector .vectors start at 0x100
114
 
115
 
116
_reset:
117
 
118
// Set stack pointer (r1) to 00003560
119
// Clear all other registers
120
 
121
        .equ sp,0x00003560      ;
122
        l.movhi r0,0x0000       ; #r0 = 0
123
        l.ori r0,r0,0x0000      ;
124
        l.movhi r1,hi(sp)       ; #r1 = sp
125
        l.ori r1,r1,lo(sp)      ;
126
        l.or r2,r0,r0           ; #clear r2
127
        l.or r3,r0,r0           ; #clear r3
128
        l.or r4,r0,r0           ; #clear r4
129
        l.or r5,r0,r0           ; #clear r5
130
        l.or r6,r0,r0           ; #clear r6
131
        l.or r7,r0,r0           ; #clear r7
132
        l.or r8,r0,r0           ; #clear r8
133
        l.or r9,r0,r0           ; #clear r9
134
        l.or r10,r0,r0          ; #clear r10
135
        l.or r11,r0,r0          ; #clear r11
136
        l.or r12,r0,r0          ; #clear r12
137
        l.or r13,r0,r0          ; #clear r13
138
        l.or r14,r0,r0          ; #clear r14
139
        l.or r15,r0,r0          ; #clear r15
140
        l.or r16,r0,r0          ; #clear r16
141
        l.or r17,r0,r0          ; #clear r17
142
        l.or r18,r0,r0          ; #clear r18
143
        l.or r19,r0,r0          ; #clear r19
144
        l.or r20,r0,r0          ; #clear r20
145
        l.or r21,r0,r0          ; #clear r21
146
        l.or r22,r0,r0          ; #clear r22
147
        l.or r23,r0,r0          ; #clear r23
148
        l.or r24,r0,r0          ; #clear r24
149
        l.or r25,r0,r0          ; #clear r25
150
        l.or r26,r0,r0          ; #clear r26
151
        l.or r27,r0,r0          ; #clear r27
152
        l.or r28,r0,r0          ; #clear r28
153
        l.or r29,r0,r0          ; #clear r29
154
        l.or r30,r0,r0          ; #clear r30
155
        l.or r31,r0,r0          ; #clear r31
156
 
157
 
158
#if IC_ENABLE == 1      /* INSTRUCTION CACHE */
159
        BSR ic_enable
160
#endif
161
 
162
// Jump to start of program
163
 
164
        load32i r2, (_Start)
165
        l.jr    r2
166
        l.nop
167
 
168
        exception_vector        bus_error               0x200 - 0x100 // Sector .vectors start at 0x100
169
        exception_vector        data_page_fault         0x300 - 0x100 // Sector .vectors start at 0x100
170
        exception_vector        instruction_page_fault  0x400 - 0x100 // Sector .vectors start at 0x100
171
        exception_vector        tick_timer              0x500 - 0x100 // Sector .vectors start at 0x100
172
        exception_vector        unaligned_access        0x600 - 0x100 // Sector .vectors start at 0x100
173
        exception_vector        illegal_instruction     0x700 - 0x100 // Sector .vectors start at 0x100
174
 
175
 
176
// Defines what will happen when an external interrupt occurs
177
 
178
.org 0x800 - 0x100
179
 
180
        .global  __external_IRQ
181
 
182
__external_IRQ:
183
        l.addi r1,r1,-30*4                      //move SP 30*4 adresses lower
184
 
185
        l.sw 0x1c(r1),r9
186
 
187
        l.jal (save_state)
188
        l.nop
189
 
190
        // we mess with r3, r4 and r9
191
        //
192
        l.mfspr r3,r0,SPR_ESR_BASE      // get SR before interrupt
193
        l.andi  r4,r3,SPR_SR_IEE        // check if it had SPR_SR_IEE bit enabled
194
        l.sfeqi r4,0
195
        l.bnf   JUMP                      // external irq enabled, all ok.
196
        l.nop
197
 
198
JUMP:     l.jal (_external_exeption)
199
        l.nop
200
 
201
        l.jal (restore_state)
202
        l.nop
203
 
204
        l.lwz r9 ,0x1c(r1)
205
        l.addi r1,r1,30*4                       //move SP 30*4 adresses lower
206
 
207
        //Return from exception
208
        l.rfe
209
 
210
 
211
// Save current state (all general purpose registers)
212
 
213
save_state:
214
    l.sw 0x0(r1),r2
215
    l.sw 0x4(r1),r3
216
    l.sw 0x8(r1),r4
217
    l.sw 0xc(r1),r5
218
    l.sw 0x10(r1),r6
219
    l.sw 0x14(r1),r7
220
    l.sw 0x18(r1),r8
221
    l.sw 0x20(r1),r10
222
    l.sw 0x24(r1),r11
223
    l.sw 0x28(r1),r12
224
    l.sw 0x2c(r1),r13
225
    l.sw 0x30(r1),r14
226
    l.sw 0x34(r1),r15
227
    l.sw 0x38(r1),r16
228
    l.sw 0x3c(r1),r17
229
    l.sw 0x40(r1),r18
230
    l.sw 0x44(r1),r19
231
    l.sw 0x48(r1),r20
232
    l.sw 0x4c(r1),r21
233
    l.sw 0x50(r1),r22
234
    l.sw 0x54(r1),r23
235
    l.sw 0x58(r1),r24
236
    l.sw 0x5c(r1),r25
237
    l.sw 0x60(r1),r26
238
    l.sw 0x64(r1),r27
239
    l.sw 0x68(r1),r28
240
    l.sw 0x6c(r1),r29
241
    l.sw 0x70(r1),r30
242
    l.jr r9
243
    l.nop
244
 
245
// Restore current state
246
 
247
restore_state:
248
    // disable interrupts (if needed)
249
    l.lwz r2,0x0(r1)
250
    l.lwz r3  ,0x4(r1)
251
    l.lwz r4  ,0x8(r1)
252
    l.lwz r5  ,0xc(r1)
253
    l.lwz r6 ,0x10(r1)
254
    l.lwz r7 ,0x14(r1)
255
    l.lwz r8 ,0x18(r1)
256
    l.lwz r10,0x20(r1)
257
    l.lwz r11,0x24(r1)
258
    l.lwz r12,0x28(r1)
259
    l.lwz r13,0x2c(r1)
260
    l.lwz r14,0x30(r1)
261
    l.lwz r15,0x34(r1)
262
    l.lwz r16,0x38(r1)
263
    l.lwz r17,0x3c(r1)
264
    l.lwz r18,0x40(r1)
265
    l.lwz r19,0x44(r1)
266
    l.lwz r20,0x48(r1)
267
    l.lwz r21,0x4c(r1)
268
    l.lwz r22,0x50(r1)
269
    l.lwz r23,0x54(r1)
270
    l.lwz r24,0x58(r1)
271
    l.lwz r25,0x5c(r1)
272
    l.lwz r26,0x60(r1)
273
    l.lwz r27,0x64(r1)
274
    l.lwz r28,0x68(r1)
275
    l.lwz r29,0x6c(r1)
276
    l.lwz r30,0x70(r1)
277
    l.jr r9
278
    l.nop
279
 
280
 
281
 
282
/***************************
283
 * Instruction cache enable
284
 */
285
#if IC_ENABLE == 1
286
ic_enable:
287
 
288
        /* Disable IC */
289
        l.mfspr r6,r0,SPR_SR
290
        l.addi  r5,r0,-1
291
        l.xori  r5,r5,SPR_SR_ICE
292
        l.and   r5,r6,r5
293
        l.mtspr r0,r5,SPR_SR
294
 
295
        /* Invalidate IC */
296
        l.addi  r6,r0,0
297
        l.addi  r5,r0,IC_SIZE
298
1:
299
        l.mtspr r0,r6,SPR_ICBIR
300
        l.sfne  r6,r5
301
        l.bf    1b
302
        l.addi  r6,r6,IC_LINE
303
 
304
        /* Enable IC */
305
        l.mfspr r6,r0,SPR_SR
306
        l.ori   r6,r6,SPR_SR_ICE
307
        l.mtspr r0,r6,SPR_SR
308
        l.nop
309
        l.nop
310
        l.nop
311
        l.nop
312
        l.nop
313
        l.nop
314
        l.nop
315
        l.nop
316
        l.nop
317
        l.nop
318
        l.j  ret_ic_enable
319
        l.nop
320
#endif

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.