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

Subversion Repositories openrisc

[/] [openrisc/] [trunk/] [rtos/] [freertos-6.1.1/] [Demo/] [uIP_Demo_Rowley_ARM7/] [Philips_LPC210X_Startup.s] - Blame information for rev 612

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

Line No. Rev Author Line
1 583 jeremybenn
/*****************************************************************************
2
 * Copyright (c) 2001, 2002 Rowley Associates Limited.                       *
3
 *                                                                           *
4
 * This file may be distributed under the terms of the License Agreement     *
5
 * provided with this software.                                              *
6
 *                                                                           *
7
 * THIS FILE IS PROVIDED AS IS WITH NO WARRANTY OF ANY KIND, INCLUDING THE   *
8
 * WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. *
9
 *****************************************************************************/
10
 
11
/*****************************************************************************
12
 *                           Preprocessor Definitions
13
 *                           ------------------------
14
 *
15
 * VECTORED_IRQ_INTERRUPTS
16
 *
17
 *   Enable vectored IRQ interrupts. If defined, the PC register will be loaded
18
 *   with the contents of the VICVectAddr register on an IRQ exception.
19
 *
20
 * USE_PLL
21
 *
22
 *   If defined, connect PLL as processor clock source. If undefined, the
23
 *   oscillator clock will be used.
24
 *
25
 * PLLCFG_VAL
26
 *
27
 *   Override the default PLL configuration (multiplier = 5, divider = 2)
28
 *   by defining PLLCFG_VAL.
29
 *
30
 * USE_MAM
31
 *
32
 *   If defined then the memory accelerator module (MAM) will be enabled.
33
 *
34
 * MAMCR_VAL & MAMTIM_VAL
35
 *
36
 *   Override the default MAM configuration (fully enabled, 3 fetch cycles)
37
 *   by defining MAMCR_VAL and MAMTIM_VAL.
38
 *
39
 * VPBDIV_VAL
40
 *
41
 *   If defined then this value will be used to configure the VPB divider.
42
 *
43
 * SRAM_EXCEPTIONS
44
 *
45
 *   If defined, enable copying and re-mapping of interrupt vectors from User
46
 *   FLASH to SRAM. If undefined, interrupt vectors will be mapped in User
47
 *   FLASH.
48
 *
49
 *****************************************************************************/
50
 
51
#ifndef PLLCFG_VAL
52
#define PLLCFG_VAL 0x24
53
#endif
54
 
55
#ifndef MAMCR_VAL
56
#define MAMCR_VAL 2
57
#endif
58
 
59
#ifndef MAMTIM_VAL
60
#define MAMTIM_VAL 3
61
#endif
62
 
63
#define MAMCR_OFFS   0x000
64
#define MAMTIM_OFFS  0x004
65
 
66
#define PLLCON_OFFS  0x080
67
#define PLLCFG_OFFS  0x084
68
#define PLLSTAT_OFFS 0x088
69
#define PLLFEED_OFFS 0x08C
70
 
71
#define VPBDIV_OFFS  0x100
72
 
73
  .section .vectors, "ax"
74
  .code 32
75
  .align 0
76
 
77
/*****************************************************************************
78
 * Exception Vectors                                                         *
79
 *****************************************************************************/
80
_vectors:
81
  ldr pc, [pc, #reset_handler_address - . - 8]  /* reset */
82
  ldr pc, [pc, #undef_handler_address - . - 8]  /* undefined instruction */
83
  ldr pc, [pc, #swi_handler_address - . - 8]    /* swi handler */
84
  ldr pc, [pc, #pabort_handler_address - . - 8] /* abort prefetch */
85
  ldr pc, [pc, #dabort_handler_address - . - 8] /* abort data */
86
#ifdef VECTORED_IRQ_INTERRUPTS
87
  .word 0xB9205F84                              /* boot loader checksum */
88
  ldr pc, [pc, #-0xFF0]                         /* irq handler */
89
#else
90
  .word 0xB8A06F60                              /* boot loader checksum */
91
  ldr pc, [pc, #irq_handler_address - . - 8]    /* irq handler */
92
#endif
93
  ldr pc, [pc, #fiq_handler_address - . - 8]    /* fiq handler */
94
 
95
reset_handler_address:
96
  .word reset_handler
97
undef_handler_address:
98
  .word undef_handler
99
swi_handler_address:
100
  .word swi_handler
101
pabort_handler_address:
102
  .word pabort_handler
103
dabort_handler_address:
104
  .word dabort_handler
105
irq_handler_address:
106
  .word irq_handler
107
fiq_handler_address:
108
  .word fiq_handler
109
 
110
  .section .init, "ax"
111
  .code 32
112
  .align 0
113
 
114
/******************************************************************************
115
 *                                                                            *
116
 * Default exception handlers                                                 *
117
 *                                                                            *
118
 ******************************************************************************/
119
 
120
reset_handler:
121
#if defined(USE_PLL) || defined(USE_MAM) || defined(VPBDIV_VAL)
122
  ldr r0, =0xE01FC000
123
#endif
124
#if defined(USE_PLL)
125
  /* Configure PLL Multiplier/Divider */
126
  ldr r1, =PLLCFG_VAL
127
  str r1, [r0, #PLLCFG_OFFS]
128
  /* Enable PLL */
129
  mov r1, #0x1
130
  str r1, [r0, #PLLCON_OFFS]
131
  mov r1, #0xAA
132
  str r1, [r0, #PLLFEED_OFFS]
133
  mov r1, #0x55
134
  str r1, [r0, #PLLFEED_OFFS]
135
  /* Wait for PLL to lock */
136
pll_lock_loop:
137
  ldr r1, [r0, #PLLSTAT_OFFS]
138
  tst r1, #0x400
139
  beq pll_lock_loop
140
  /* PLL Locked, connect PLL as clock source */
141
  mov r1, #0x3
142
  str r1, [r0, #PLLCON_OFFS]
143
  mov r1, #0xAA
144
  str r1, [r0, #PLLFEED_OFFS]
145
  mov r1, #0x55
146
  str r1, [r0, #PLLFEED_OFFS]
147
#endif
148
 
149
#if defined(USE_MAM)
150
  mov r1, #0
151
  str r1, [r0, #MAMCR_OFFS]
152
  ldr r1, =MAMTIM_VAL
153
  str r1, [r0, #MAMTIM_OFFS]
154
  ldr r1, =MAMCR_VAL
155
  str r1, [r0, #MAMCR_OFFS]
156
#endif
157
 
158
#if defined(VPBDIV_VAL)
159
  ldr r1, =VPBDIV_VAL
160
  str r1, [r0, #VPBDIV_OFFS]
161
#endif
162
 
163
#if defined(SRAM_EXCEPTIONS)
164
  /* Copy exception vectors into SRAM */
165
  mov r8, #0x40000000
166
  ldr r9, =_vectors
167
  ldmia r9!, {r0-r7}
168
  stmia r8!, {r0-r7}
169
  ldmia r9!, {r0-r6}
170
  stmia r8!, {r0-r6}
171
 
172
  /* Re-map interrupt vectors from SRAM */
173
  ldr r0, MEMMAP
174
  mov r1, #2 /* User RAM Mode. Interrupt vectors are re-mapped from SRAM */
175
  str r1, [r0]
176
#endif /* SRAM_EXCEPTIONS */
177
 
178
  b _start
179
 
180
#ifdef SRAM_EXCEPTIONS
181
MEMMAP:
182
  .word 0xE01FC040
183
#endif
184
 
185
/******************************************************************************
186
 *                                                                            *
187
 * Default exception handlers                                                 *
188
 * These are declared weak symbols so they can be redefined in user code.     *
189
 *                                                                            *
190
 ******************************************************************************/
191
 
192
undef_handler:
193
  b undef_handler
194
 
195
swi_handler:
196
  b swi_handler
197
 
198
pabort_handler:
199
  b pabort_handler
200
 
201
dabort_handler:
202
  b dabort_handler
203
 
204
irq_handler:
205
  b irq_handler
206
 
207
fiq_handler:
208
  b fiq_handler
209
 
210
  .weak undef_handler, swi_handler, pabort_handler, dabort_handler, irq_handler, fiq_handler
211
 
212
 
213
 

powered by: WebSVN 2.1.0

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