mbed library sources

Dependents:   Freedman_v2 Nucleo_i2c_OLED_BME280_copy

Fork of mbed-src by mbed official

Revision:
577:15494b56c2f3
Parent:
554:edd95c0879f8
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/targets/cmsis/TARGET_NXP/TARGET_LPC2460/TOOLCHAIN_GCC_ARM/vector_functions.S	Wed Jul 01 08:15:11 2015 +0100
@@ -0,0 +1,195 @@
+/* .include "vector_defns.h" */
+
+
+
+.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
+.weak SVC_Handler
+.weak IRQ_Handler
+/*  .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:
+/*
+    If RTOS is enabled then goto RTOS IRQ handler
+*/
+        PUSH   {R0}
+        LDR    R0, =IRQ_Handler
+        CMP    R0, #0
+        POP   {R0}
+        BNE   IRQ_Handler
+/*
+    else use CMSIS IRQ handler
+*/
+        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] 
+        
+        LDMFD sp!,{r0-r3,r12,lr}
+        
+        MSR CPSR_c, #0x12|0x80|0x40
+        
+        SUBS pc, lr, #4
+
+__mbed_swi:
+/*
+    If RTOS is enabled then goto RTOS SVC handler
+*/
+        PUSH   {R0}
+        LDR    R0, =SVC_Handler
+        CMP    R0, #0
+        POP   {R0}
+        BNE   SVC_Handler
+/*
+    else use CMSIS SVC handler
+*/
+        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} 
+        
+        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
+*/
+
+.section .text, "ax"
+.arm
+.global Reset_handler
+Reset_Handler:   
+        .extern __libc_init_array
+        .extern SystemInit
+        .weak   software_init_hook
+        LDR     R0, =SystemInit
+        MOV     LR, PC
+        BX      R0
+
+/* if (software_init_hook) // give control to the RTOS
+        software_init_hook(); // this will also call __libc_init_array
+*/
+        LDR    R0, =software_init_hook
+        CMP    R0, #0
+        BEQ    nortos
+        ORR    R0,R0,#1      /* set thumb address */
+        BX     R0
+/* else */
+nortos:
+        LDR     R0, =__libc_init_array
+        MOV     LR, PC
+        BX      R0
+
+        MSR CPSR_c, #0x1F /* enable irq */
+
+        LDR     R0, =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, #0x00000040
+        
+        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|0x80|0x40
+        MOV SP, R0
+*/
+        MSR CPSR_c, #0x1F|0x80|0x40
+        MOV SP, R0
+
+        MSR CPSR_c, #0x13|0x80|0x40 /* execute in Supervisor mode */
+        
+/*  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
+*/
+        
+/* Go to Reset_Handler */ 
+        LDR     R0, =Reset_Handler
+        BX R0