]> git.sur5r.net Git - freertos/blob - FreeRTOS/Demo/CORTEX_M4F_Infineon_XMC4500_Keil/startup_XMC4200.s
Reworked XMC4500 IAR project to use latest system files and include build configurati...
[freertos] / FreeRTOS / Demo / CORTEX_M4F_Infineon_XMC4500_Keil / startup_XMC4200.s
1 ;*****************************************************************************/\r
2 ; * @file     startup_XMC4200.s\r
3 ; * @brief    CMSIS Cortex-M4 Core Device Startup File for\r
4 ; *           Infineon XMC4200 Device Series\r
5 ; * @version  V1.00\r
6 ; * @date     05. February 2013\r
7 ; *\r
8 ; * @note\r
9 ; * Copyright (C) 2009-2013 ARM Limited. All rights reserved.\r
10 ; *\r
11 ; * @par\r
12 ; * ARM Limited (ARM) is supplying this software for use with Cortex-M\r
13 ; * processor based microcontrollers.  This file can be freely distributed\r
14 ; * within development tools that are supporting such ARM based processors.\r
15 ; *\r
16 ; * @par\r
17 ; * THIS SOFTWARE IS PROVIDED "AS IS".  NO WARRANTIES, WHETHER EXPRESS, IMPLIED\r
18 ; * OR STATUTORY, INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF\r
19 ; * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE.\r
20 ; * ARM SHALL NOT, IN ANY CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR\r
21 ; * CONSEQUENTIAL DAMAGES, FOR ANY REASON WHATSOEVER.\r
22 ; *\r
23 ; ******************************************************************************/\r
24 \r
25 ;/* ********************* Version History *********************************** */\r
26 ;/* ***************************************************************************\r
27 ; V0.1 , September 2012, First version\r
28 ; V1.0 , February 2013, FIX for CPU prefetch bug implemented\r
29 ;**************************************************************************** */\r
30 \r
31 \r
32 ;*  <<< Use Configuration Wizard in Context Menu >>>\r
33 \r
34 ; Amount of memory (in bytes) allocated for Stack\r
35 ; Tailor this value to your application needs\r
36 ; <h> Stack Configuration\r
37 ;   <o> Stack Size (in Bytes) <0x0-0xFFFFFFFF:8>\r
38 ; </h>\r
39 \r
40 Stack_Size      EQU     0x00000400\r
41 \r
42                 AREA    STACK, NOINIT, READWRITE, ALIGN=3\r
43 Stack_Mem       SPACE   Stack_Size\r
44 __initial_sp\r
45 \r
46 \r
47 ; <h> Heap Configuration\r
48 ;   <o>  Heap Size (in Bytes) <0x0-0xFFFFFFFF:8>\r
49 ; </h>\r
50 \r
51 Heap_Size       EQU     0x00000000\r
52 \r
53                 AREA    HEAP, NOINIT, READWRITE, ALIGN=3\r
54 __heap_base\r
55 Heap_Mem        SPACE   Heap_Size\r
56 __heap_limit\r
57 \r
58                 PRESERVE8\r
59                 THUMB\r
60 \r
61 \r
62 ;/* ===========START : MACRO DEFINITION MACRO DEFINITION ================== */\r
63 ;/*\r
64 ; * STEP_AB and below have the prefetch functional deviation (Errata id: PMU_CM.001).\r
65 ; * A veneer defined below will first\r
66 ; * be executed which in turn branches to the final exception handler.\r
67 ; *\r
68 ; * In addition to defining the veneers, the vector table must for these buggy\r
69 ; * devices contain the veneers.\r
70 ; */\r
71 \r
72 ;set WORKAROUND_PMU_CM001 under Options for target - Asm - Define\r
73 ;or use define below\r
74               GBLL WORKAROUND_PMU_CM001\r
75 \r
76 ;/* A macro to setup a vector table entry based on STEP ID */\r
77               IF    :DEF:WORKAROUND_PMU_CM001\r
78                 MACRO\r
79                 ExcpVector $Handler\r
80                   DCD   $Handler._Veneer\r
81                 MEND\r
82               ELSE\r
83                 MACRO\r
84                 ExcpVector $Handler\r
85                   DCD   $Handler\r
86                 MEND\r
87               ENDIF\r
88 \r
89 ;/* A macro to ease definition of the various handlers based on STEP ID */\r
90               IF     :DEF:WORKAROUND_PMU_CM001\r
91 \r
92                 ;/* First define the final exception handler */\r
93                 MACRO\r
94                 ExcpHandler $Handler_Func\r
95 $Handler_Func\\r
96                   PROC\r
97                   EXPORT  $Handler_Func            [WEAK]\r
98                   B       .\r
99                   ENDP\r
100 \r
101                 ;/* And then define a veneer that will branch to the final excp handler */\r
102 $Handler_Func._Veneer\\r
103                   PROC\r
104                   EXPORT  $Handler_Func._Veneer    [WEAK]\r
105                   LDR     R0, =$Handler_Func\r
106                   PUSH    {LR}\r
107                   BLX     R0\r
108                   POP     {PC}\r
109                   ALIGN\r
110                   LTORG\r
111                   ENDP\r
112                 MEND\r
113 \r
114               ELSE\r
115 \r
116                 ;/* No prefetch bug, hence define only the final exception handler */\r
117                 MACRO\r
118                 ExcpHandler $Handler_Func\r
119 $Handler_Func\\r
120                   PROC\r
121                   EXPORT  $Handler_Func            [WEAK]\r
122                   B       .\r
123                   ENDP\r
124                 MEND\r
125 \r
126               ENDIF\r
127 ;/* ============= END OF MACRO DEFINITION MACRO DEFINITION ================== */\r
128 \r
129 \r
130 ;* ================== START OF VECTOR TABLE DEFINITION ====================== */\r
131 ;* Vector Table - This gets programed into VTOR register */\r
132                 AREA    RESET, DATA, READONLY\r
133                 EXPORT  __Vectors\r
134                 EXPORT  __Vectors_End\r
135                 EXPORT  __Vectors_Size\r
136 \r
137 \r
138 \r
139 __Vectors\r
140     DCD          __initial_sp               ; Top of Stack\r
141     DCD          Reset_Handler              ; Reset Handler\r
142 \r
143     ExcpVector   NMI_Handler                ; NMI Handler\r
144     ExcpVector   HardFault_Handler          ; Hard Fault Handler\r
145     ExcpVector   MemManage_Handler          ; MPU Fault Handler\r
146     ExcpVector   BusFault_Handler           ; Bus Fault Handler\r
147     ExcpVector   UsageFault_Handler         ; Usage Fault Handler\r
148     DCD          0                          ; Reserved\r
149     DCD          0                          ; Reserved\r
150     DCD          0                          ; Reserved\r
151     DCD          0                          ; Reserved\r
152     DCD          SVC_Handler                ; SVCall Handler\r
153     ExcpVector   DebugMon_Handler           ; Debug Monitor Handler\r
154     DCD          0                          ; Reserved\r
155     DCD          PendSV_Handler             ; PendSV Handler\r
156     DCD          SysTick_Handler            ; SysTick Handler\r
157 \r
158     ; Interrupt Handlers for Service Requests (SR) from XMC4200 Peripherals\r
159     ExcpVector   SCU_0_IRQHandler           ; Handler name for SR SCU_0\r
160     ExcpVector   ERU0_0_IRQHandler          ; Handler name for SR ERU0_0\r
161     ExcpVector   ERU0_1_IRQHandler          ; Handler name for SR ERU0_1\r
162     ExcpVector   ERU0_2_IRQHandler          ; Handler name for SR ERU0_2\r
163     ExcpVector   ERU0_3_IRQHandler          ; Handler name for SR ERU0_3\r
164     ExcpVector   ERU1_0_IRQHandler          ; Handler name for SR ERU1_0\r
165     ExcpVector   ERU1_1_IRQHandler          ; Handler name for SR ERU1_1\r
166     ExcpVector   ERU1_2_IRQHandler          ; Handler name for SR ERU1_2\r
167     ExcpVector   ERU1_3_IRQHandler          ; Handler name for SR ERU1_3\r
168     DCD          0                          ; Reserved\r
169     DCD          0                          ; Reserved\r
170     DCD          0                          ; Reserved\r
171     ExcpVector   PMU0_0_IRQHandler          ; Handler name for SR PMU0_0\r
172     DCD          0                          ; Reserved\r
173     ExcpVector   VADC0_C0_0_IRQHandler      ; Handler name for SR VADC0_C0_0\r
174     ExcpVector   VADC0_C0_1_IRQHandler      ; Handler name for SR VADC0_C0_1\r
175     ExcpVector   VADC0_C0_2_IRQHandler      ; Handler name for SR VADC0_C0_1\r
176     ExcpVector   VADC0_C0_3_IRQHandler      ; Handler name for SR VADC0_C0_3\r
177     ExcpVector   VADC0_G0_0_IRQHandler      ; Handler name for SR VADC0_G0_0\r
178     ExcpVector   VADC0_G0_1_IRQHandler      ; Handler name for SR VADC0_G0_1\r
179     ExcpVector   VADC0_G0_2_IRQHandler      ; Handler name for SR VADC0_G0_2\r
180     ExcpVector   VADC0_G0_3_IRQHandler      ; Handler name for SR VADC0_G0_3\r
181     ExcpVector   VADC0_G1_0_IRQHandler      ; Handler name for SR VADC0_G1_0\r
182     ExcpVector   VADC0_G1_1_IRQHandler      ; Handler name for SR VADC0_G1_1\r
183     ExcpVector   VADC0_G1_2_IRQHandler      ; Handler name for SR VADC0_G1_2\r
184     ExcpVector   VADC0_G1_3_IRQHandler      ; Handler name for SR VADC0_G1_3\r
185     DCD          0                          ; Reserved\r
186     DCD          0                          ; Reserved\r
187     DCD          0                          ; Reserved\r
188     DCD          0                          ; Reserved\r
189     DCD          0                          ; Reserved\r
190     DCD          0                          ; Reserved\r
191     DCD          0                          ; Reserved\r
192     DCD          0                          ; Reserved\r
193     DCD          0                          ; Reserved\r
194     DCD          0                          ; Reserved\r
195     DCD          0                          ; Reserved\r
196     DCD          0                          ; Reserved\r
197     DCD          0                          ; Reserved\r
198     DCD          0                          ; Reserved\r
199     DCD          0                          ; Reserved\r
200     DCD          0                          ; Reserved\r
201     ExcpVector   DAC0_0_IRQHandler          ; Handler name for SR DAC0_0\r
202     ExcpVector   DAC0_1_IRQHandler          ; Handler name for SR DAC0_1\r
203     ExcpVector   CCU40_0_IRQHandler         ; Handler name for SR CCU40_0\r
204     ExcpVector   CCU40_1_IRQHandler         ; Handler name for SR CCU40_1\r
205     ExcpVector   CCU40_2_IRQHandler         ; Handler name for SR CCU40_2\r
206     ExcpVector   CCU40_3_IRQHandler         ; Handler name for SR CCU40_3\r
207     ExcpVector   CCU41_0_IRQHandler         ; Handler name for SR CCU41_0\r
208     ExcpVector   CCU41_1_IRQHandler         ; Handler name for SR CCU41_1\r
209     ExcpVector   CCU41_2_IRQHandler         ; Handler name for SR CCU41_2\r
210     ExcpVector   CCU41_3_IRQHandler         ; Handler name for SR CCU41_3\r
211     DCD          0                          ; Reserved\r
212     DCD          0                          ; Reserved\r
213     DCD          0                          ; Reserved\r
214     DCD          0                          ; Reserved\r
215     DCD          0                          ; Reserved\r
216     DCD          0                          ; Reserved\r
217     DCD          0                          ; Reserved\r
218     DCD          0                          ; Reserved\r
219     ExcpVector   CCU80_0_IRQHandler         ; Handler name for SR CCU80_0\r
220     ExcpVector   CCU80_1_IRQHandler         ; Handler name for SR CCU80_1\r
221     ExcpVector   CCU80_2_IRQHandler         ; Handler name for SR CCU80_2\r
222     ExcpVector   CCU80_3_IRQHandler         ; Handler name for SR CCU80_3\r
223     DCD          0                          ; Reserved\r
224     DCD          0                          ; Reserved\r
225     DCD          0                          ; Reserved\r
226     DCD          0                          ; Reserved\r
227     ExcpVector   POSIF0_0_IRQHandler        ; Handler name for SR POSIF0_0\r
228     ExcpVector   POSIF0_1_IRQHandler        ; Handler name for SR POSIF0_1\r
229     DCD          0                          ; Reserved\r
230     DCD          0                          ; Reserved\r
231     ExcpVector   HRPWM_0_IRQHandler         ; Handler name for SR HRPWM_0\r
232     ExcpVector   HRPWM_1_IRQHandler         ; Handler name for SR HRPWM_1\r
233     ExcpVector   HRPWM_2_IRQHandler         ; Handler name for SR HRPWM_2\r
234     ExcpVector   HRPWM_3_IRQHandler         ; Handler name for SR HRPWM_3\r
235     ExcpVector   CAN0_0_IRQHandler          ; Handler name for SR CAN0_0\r
236     ExcpVector   CAN0_1_IRQHandler          ; Handler name for SR CAN0_1\r
237     ExcpVector   CAN0_2_IRQHandler          ; Handler name for SR CAN0_2\r
238     ExcpVector   CAN0_3_IRQHandler          ; Handler name for SR CAN0_3\r
239     ExcpVector   CAN0_4_IRQHandler          ; Handler name for SR CAN0_4\r
240     ExcpVector   CAN0_5_IRQHandler          ; Handler name for SR CAN0_5\r
241     ExcpVector   CAN0_6_IRQHandler          ; Handler name for SR CAN0_6\r
242     ExcpVector   CAN0_7_IRQHandler          ; Handler name for SR CAN0_7\r
243     ExcpVector   USIC0_0_IRQHandler         ; Handler name for SR USIC0_0\r
244     ExcpVector   USIC0_1_IRQHandler         ; Handler name for SR USIC0_1\r
245     ExcpVector   USIC0_2_IRQHandler         ; Handler name for SR USIC0_2\r
246     ExcpVector   USIC0_3_IRQHandler         ; Handler name for SR USIC0_3\r
247     ExcpVector   USIC0_4_IRQHandler         ; Handler name for SR USIC0_4\r
248     ExcpVector   USIC0_5_IRQHandler         ; Handler name for SR USIC0_5\r
249     ExcpVector   USIC1_0_IRQHandler         ; Handler name for SR USIC1_0\r
250     ExcpVector   USIC1_1_IRQHandler         ; Handler name for SR USIC1_1\r
251     ExcpVector   USIC1_2_IRQHandler         ; Handler name for SR USIC1_2\r
252     ExcpVector   USIC1_3_IRQHandler         ; Handler name for SR USIC1_3\r
253     ExcpVector   USIC1_4_IRQHandler         ; Handler name for SR USIC1_4\r
254     ExcpVector   USIC1_5_IRQHandler         ; Handler name for SR USIC1_5\r
255     DCD          0                          ; Reserved\r
256     DCD          0                          ; Reserved\r
257     DCD          0                          ; Reserved\r
258     DCD          0                          ; Reserved\r
259     DCD          0                          ; Reserved\r
260     DCD          0                          ; Reserved\r
261     ExcpVector   LEDTS0_0_IRQHandler        ; Handler name for SR LEDTS0_0\r
262     DCD          0                          ; Reserved\r
263     ExcpVector   FCE0_0_IRQHandler          ; Handler name for SR FCE0_0\r
264     ExcpVector   GPDMA0_0_IRQHandler        ; Handler name for SR GPDMA0_0\r
265     DCD          0                          ; Reserved\r
266     ExcpVector   USB0_0_IRQHandler          ; Handler name for SR USB0_0\r
267     DCD          0                          ; Reserved\r
268     DCD          0                          ; Reserved\r
269     DCD          0                          ; Reserved\r
270     DCD          0                          ; Reserved\r
271 __Vectors_End\r
272 \r
273 __Vectors_Size  EQU  __Vectors_End - __Vectors\r
274 \r
275 ;* ================== END OF VECTOR TABLE DEFINITION ======================= */\r
276 \r
277 ;* ================== START OF VECTOR ROUTINES ============================= */\r
278 \r
279                 AREA    |.text|, CODE, READONLY\r
280 \r
281 ;* Reset Handler */\r
282 Reset_Handler    PROC\r
283                  EXPORT  Reset_Handler             [WEAK]\r
284         IMPORT  SystemInit\r
285         IMPORT  __main\r
286 \r
287         ; Remap vector table\r
288         LDR     R0, =__Vectors\r
289         LDR     R1, =0xE000ED08 ;*VTOR register\r
290         STR     R0,[R1]\r
291 \r
292         ;* C routines are likely to be called. Setup the stack now\r
293         LDR     SP,=__initial_sp\r
294 \r
295         LDR     R0, = SystemInit\r
296         BLX     R0\r
297 \r
298         ;SystemInit_DAVE3() is provided by DAVE3 code generation engine. It is\r
299         ;weakly defined here though for a potential override.\r
300 \r
301         LDR     R0, = SystemInit_DAVE3\r
302         BLX     R0\r
303 \r
304         ;* Reset stack pointer before zipping off to user application\r
305         LDR     SP,=__initial_sp\r
306 \r
307         LDR     R0, =__main\r
308         BX      R0\r
309 \r
310         ALIGN\r
311         ENDP\r
312 \r
313 \r
314 \r
315 \r
316 ;* ========== START OF EXCEPTION HANDLER DEFINITION ======================== */\r
317 \r
318 \r
319 \r
320 ;/* Default exception Handlers - Users may override this default functionality by\r
321 ;   defining handlers of the same name in their C code */\r
322 \r
323     ExcpHandler   NMI_Handler\r
324     ExcpHandler   HardFault_Handler\r
325     ExcpHandler   MemManage_Handler\r
326     ExcpHandler   BusFault_Handler\r
327     ExcpHandler   UsageFault_Handler\r
328     ExcpHandler   SVC_Handler\r
329     ExcpHandler   DebugMon_Handler\r
330     ExcpHandler   PendSV_Handler\r
331     ExcpHandler   SysTick_Handler\r
332 \r
333 ;* ============= END OF EXCEPTION HANDLER DEFINITION ======================== */\r
334 \r
335 ;* ============= START OF INTERRUPT HANDLER DEFINITION ====================== */\r
336 \r
337 ;* IRQ Handlers */\r
338     ExcpHandler   SCU_0_IRQHandler\r
339     ExcpHandler   ERU0_0_IRQHandler\r
340     ExcpHandler   ERU0_1_IRQHandler\r
341     ExcpHandler   ERU0_2_IRQHandler\r
342     ExcpHandler   ERU0_3_IRQHandler\r
343     ExcpHandler   ERU1_0_IRQHandler\r
344     ExcpHandler   ERU1_1_IRQHandler\r
345     ExcpHandler   ERU1_2_IRQHandler\r
346     ExcpHandler   ERU1_3_IRQHandler\r
347     ExcpHandler   PMU0_0_IRQHandler\r
348     ExcpHandler   VADC0_C0_0_IRQHandler\r
349     ExcpHandler   VADC0_C0_1_IRQHandler\r
350     ExcpHandler   VADC0_C0_2_IRQHandler\r
351     ExcpHandler   VADC0_C0_3_IRQHandler\r
352     ExcpHandler   VADC0_G0_0_IRQHandler\r
353     ExcpHandler   VADC0_G0_1_IRQHandler\r
354     ExcpHandler   VADC0_G0_2_IRQHandler\r
355     ExcpHandler   VADC0_G0_3_IRQHandler\r
356     ExcpHandler   VADC0_G1_0_IRQHandler\r
357     ExcpHandler   VADC0_G1_1_IRQHandler\r
358     ExcpHandler   VADC0_G1_2_IRQHandler\r
359     ExcpHandler   VADC0_G1_3_IRQHandler\r
360     ExcpHandler   DAC0_0_IRQHandler\r
361     ExcpHandler   DAC0_1_IRQHandler\r
362     ExcpHandler   CCU40_0_IRQHandler\r
363     ExcpHandler   CCU40_1_IRQHandler\r
364     ExcpHandler   CCU40_2_IRQHandler\r
365     ExcpHandler   CCU40_3_IRQHandler\r
366     ExcpHandler   CCU41_0_IRQHandler\r
367     ExcpHandler   CCU41_1_IRQHandler\r
368     ExcpHandler   CCU41_2_IRQHandler\r
369     ExcpHandler   CCU41_3_IRQHandler\r
370     ExcpHandler   CCU80_0_IRQHandler\r
371     ExcpHandler   CCU80_1_IRQHandler\r
372     ExcpHandler   CCU80_2_IRQHandler\r
373     ExcpHandler   CCU80_3_IRQHandler\r
374     ExcpHandler   POSIF0_0_IRQHandler\r
375     ExcpHandler   POSIF0_1_IRQHandler\r
376     ExcpHandler   HRPWM_0_IRQHandler\r
377     ExcpHandler   HRPWM_1_IRQHandler\r
378     ExcpHandler   HRPWM_2_IRQHandler\r
379     ExcpHandler   HRPWM_3_IRQHandler\r
380     ExcpHandler   CAN0_0_IRQHandler\r
381     ExcpHandler   CAN0_1_IRQHandler\r
382     ExcpHandler   CAN0_2_IRQHandler\r
383     ExcpHandler   CAN0_3_IRQHandler\r
384     ExcpHandler   CAN0_4_IRQHandler\r
385     ExcpHandler   CAN0_5_IRQHandler\r
386     ExcpHandler   CAN0_6_IRQHandler\r
387     ExcpHandler   CAN0_7_IRQHandler\r
388     ExcpHandler   USIC0_0_IRQHandler\r
389     ExcpHandler   USIC0_1_IRQHandler\r
390     ExcpHandler   USIC0_2_IRQHandler\r
391     ExcpHandler   USIC0_3_IRQHandler\r
392     ExcpHandler   USIC0_4_IRQHandler\r
393     ExcpHandler   USIC0_5_IRQHandler\r
394     ExcpHandler   USIC1_0_IRQHandler\r
395     ExcpHandler   USIC1_1_IRQHandler\r
396     ExcpHandler   USIC1_2_IRQHandler\r
397     ExcpHandler   USIC1_3_IRQHandler\r
398     ExcpHandler   USIC1_4_IRQHandler\r
399     ExcpHandler   USIC1_5_IRQHandler\r
400     ExcpHandler   LEDTS0_0_IRQHandler\r
401     ExcpHandler   FCE0_0_IRQHandler\r
402     ExcpHandler   GPDMA0_0_IRQHandler\r
403     ExcpHandler   USB0_0_IRQHandler\r
404 \r
405 ;* ============= END OF INTERRUPT HANDLER DEFINITION ======================== */\r
406 \r
407 ;*  Definition of the default weak SystemInit_DAVE3 function.\r
408 ;*  This function will be called by the CMSIS SystemInit function.\r
409 ;*  If DAVE3 requires an extended SystemInit it will create its own SystemInit_DAVE3\r
410 ;*  which will overule this weak definition\r
411 SystemInit_DAVE3  PROC\r
412                   EXPORT  SystemInit_DAVE3             [WEAK]\r
413                   NOP\r
414                   BX     LR\r
415                   ENDP\r
416 \r
417 ;*  Definition of the default weak DAVE3 function for clock App usage.\r
418 ;* AllowPLLInitByStartup Handler */\r
419 AllowPLLInitByStartup    PROC\r
420                   EXPORT  AllowPLLInitByStartup        [WEAK]\r
421                   MOV    R0,#1\r
422                   BX     LR\r
423                   ENDP\r
424 \r
425                   ALIGN\r
426 \r
427 ;*******************************************************************************\r
428 ; User Stack and Heap initialization\r
429 ;*******************************************************************************\r
430                  IF      :DEF:__MICROLIB\r
431 \r
432                  EXPORT  __initial_sp\r
433                  EXPORT  __heap_base\r
434                  EXPORT  __heap_limit\r
435 \r
436                  ELSE\r
437 \r
438                  IMPORT  __use_two_region_memory\r
439                  EXPORT  __user_initial_stackheap\r
440 \r
441 __user_initial_stackheap\r
442 \r
443                  LDR     R0, =  Heap_Mem\r
444                  LDR     R1, =(Stack_Mem + Stack_Size)\r
445                  LDR     R2, = (Heap_Mem +  Heap_Size)\r
446                  LDR     R3, = Stack_Mem\r
447                  BX      LR\r
448 \r
449                  ALIGN\r
450 \r
451                  ENDIF\r
452 \r
453                  END\r
454 \r
455 ;******************* Copyright (C) 2009-2013 ARM Limited *****END OF FILE*****\r