mbed library sources for GR-PEACH rev.B.

Fork of mbed-src by mbed official

Revision:
20:4263a77256ae
Parent:
13:0645d8841f51
Child:
231:e72bc43fb91c
--- a/targets/cmsis/TARGET_NXP/TARGET_LPC23XX/TOOLCHAIN_GCC_ARM/vector_functions.s	Mon Aug 19 18:17:02 2013 +0300
+++ b/targets/cmsis/TARGET_NXP/TARGET_LPC23XX/TOOLCHAIN_GCC_ARM/vector_functions.s	Tue Sep 10 15:14:19 2013 +0300
@@ -1,180 +1,149 @@
-# 1 "vector_functions.s"
-# 1 "<built-in>"
-# 1 "<command line>"
-# 1 "vector_functions.s"
-;
-;
-;
+/* .include "vector_defns.h" */
+
 
-# 1 "vector_defns.h" 1
-# 6 "vector_functions.s" 2
+
+.section .privileged_code, "ax"
+.arm
 
 
+.weak __mbed_fiq
+.weak __mbed_undef
+.weak __mbed_prefetch_abort
+.weak __mbed_data_abort
+.weak __mbed_irq
+.weak __mbed_swi
+.weak __mbed_dcc_irq
+.weak __mbed_reset
+.global __mbed_init_realmonitor
+/*  .global __mbed_init */
 
 
 
 
-        .section VECFUNCS, "ax"
-        .arm
-
-
-        .weak __mbed_fiq
-        .weak __mbed_undef
-        .weak __mbed_prefetch_abort
-        .weak __mbed_data_abort
-        .weak __mbed_irq
-        .weak __mbed_swi
-        .weak __mbed_dcc_irq
-        .weak __mbed_reset
-        .global __mbed_init_realmonitor
-        .global __mbed_init
-
-;
-;
 __mbed_fiq:
         B __mbed_fiq
-
-;
-;
 __mbed_undef:
         LDR PC, =0x7fffffa0
-
-;
-;
 __mbed_prefetch_abort:
         LDR PC, =0x7fffffb0
-
-;
-;
 __mbed_data_abort:
         LDR PC, =0x7fffffc0
-
-;
-;
-;
-;
-;
-;
-;
-;
-;
 __mbed_irq:
-        ;
         MSR CPSR_c, #0x1F|0x80|0x40
-
-        ;
+        
         STMDB sp!, {r0-r3,r12,lr}
-
-        ;
+        
         MOV r0, #0xFFFFFF00
         LDR r0, [r0]
-
-        ;
+        
         MOV lr, pc
         BX r0
-
-        ;
+        
         MOV r0, #0xFFFFFF00
-        STR r0, [r0] ;
-
-        ;
+        STR r0, [r0] 
+        
         LDMFD sp!,{r0-r3,r12,lr}
-
-        ;
+        
         MSR CPSR_c, #0x12|0x80|0x40
-
-        ;
+        
         SUBS pc, lr, #4
-
-;
-;
-;
-;
 __mbed_swi:
-        ;
-        ;
         STMFD sp!, {a4, r4, ip, lr}
-
-        ;
+        
         LDR r4, =0x40000040
-
-        ;
-        ;
+        
         LDR a4, =0x00940000
         LDR PC, =0x7ffff820
-
-;
-;
-;
-;
 __mbed_dcc_irq:
-
-        ;
-
-        ;
         LDMFD sp!,{r0-r3,r12,lr}
-
-        ;
+        
         MSR CPSR_c, #0x12|0x80|0x40
-
-        ;
-
-        ;
-        SUB lr, lr, #4 ;
-        STMFD sp!, {ip,lr} ;
-
-        ;
+        
+        SUB lr, lr, #4 
+        STMFD sp!, {ip,lr} 
+        
         LDR LR, =0xfffff000
         STR LR, [LR, #0xf00]
-
-        ;
-        ;
-        ;
-        ;
+        
         LDR PC, =0x7fffffe0
+/*
+ __mbed_reset is called after reset
+ we setup the stacks and realmonitor, then call Reset_Handler like on M3
+*/
 
-;
-;
-__mbed_reset:
+.section .text, "ax"
+.arm
+.global Reset_handler
+Reset_Handler:   
+        .extern __libc_init_array
+        .extern  SystemInit
+        .extern  __wrap_main
+        LDR     R0, =SystemInit
+        MOV     LR, PC       
+        BX      R0
 
-        ;
+        LDR     R0, =__libc_init_array
+        MOV     LR, PC       
+        BX      R0
 
-        LDR R0, =(0x40000000 + 0x8000)
+        LDR     R0, =__wrap_main
+        BX      R0
 
-        ;
+__mbed_reset:
+        LDR R0, =( __SRAM_segment_end__ )
+        
         MSR CPSR_c, #0x1B|0x80|0x40
         MOV SP, R0
         SUB R0, R0, #0x00000040
-
-        ;
+        
         MSR CPSR_c, #0x17|0x80|0x40
         MOV SP, R0
         SUB R0, R0, #0x00000040
-
-        ;
+        
         MSR CPSR_c, #0x11|0x80|0x40
         MOV SP, R0
         SUB R0, R0, #0x00000000
-
-        ;
+        
         MSR CPSR_c, #0x12|0x80|0x40
         MOV SP, R0
         SUB R0, R0, #0x00000040
-
-        ;
+        
         MSR CPSR_c, #0x13|0x80|0x40
         MOV SP, R0
         SUB R0, R0, #0x00000040
-
-        ;
+        
         MSR CPSR_c, #0x10
         MOV SP, R0
+        
+/*  Relocate .data section (Copy from ROM to RAM) */
+        LDR     R1, =__text_end__        /* _etext */ 
+        LDR     R2, =__data_start__      /* _data  */
+        LDR     R3, =__data_end__        /* _edata */ 
+        CMP     R2, R3
+        BEQ     DataIsEmpty
+LoopRel:        CMP     R2, R3 
+        LDRLO   R0, [R1], #4 
+        STRLO   R0, [R2], #4 
+        BLO     LoopRel 
+DataIsEmpty:
 
-        ;
+/*   Clear .bss section (Zero init) */
+        MOV     R0, #0 
+        LDR     R1, =__bss_start__ 
+        LDR     R2, =__bss_end__ 
+        CMP     R1,R2
+        BEQ     BSSIsEmpty
+LoopZI:         CMP     R1, R2 
+        STRLO   R0, [R1], #4 
+        BLO     LoopZI 
+BSSIsEmpty:
+
+
+/* Init realmonitor */
         LDR R0, =__mbed_init_realmonitor
         MOV LR, PC
         BX R0
-
-        ;
-        LDR R0, =__mbed_init
+        
+/* Go to Reset_Handler */ 
+        LDR     R0, =Reset_Handler
         BX R0