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