]> git.donarmstrong.com Git - qmk_firmware.git/blob - tool/mbed/mbed-sdk/libraries/mbed/targets/cmsis/TARGET_NXP/TARGET_LPC23XX/TOOLCHAIN_GCC_CR/vector_functions.s
Squashed 'tmk_core/' changes from 7967731..b9e0ea0
[qmk_firmware.git] / tool / mbed / mbed-sdk / libraries / mbed / targets / cmsis / TARGET_NXP / TARGET_LPC23XX / TOOLCHAIN_GCC_CR / vector_functions.s
1 /* .include "vector_defns.h" */
2
3
4
5 .section .privileged_code, "ax"
6 .arm
7
8
9 .weak __mbed_fiq
10 .weak __mbed_undef
11 .weak __mbed_prefetch_abort
12 .weak __mbed_data_abort
13 .weak __mbed_irq
14 .weak __mbed_swi
15 .weak __mbed_dcc_irq
16 .weak __mbed_reset
17 .global __mbed_init_realmonitor
18 /*  .global __mbed_init */
19
20
21
22
23 __mbed_fiq:
24         B __mbed_fiq
25 __mbed_undef:
26         LDR PC, =0x7fffffa0
27 __mbed_prefetch_abort:
28         LDR PC, =0x7fffffb0
29 __mbed_data_abort:
30         LDR PC, =0x7fffffc0
31 __mbed_irq:
32         MSR CPSR_c, #0x1F|0x80|0x40
33         
34         STMDB sp!, {r0-r3,r12,lr}
35         
36         MOV r0, #0xFFFFFF00
37         LDR r0, [r0]
38         
39         MOV lr, pc
40         BX r0
41         
42         MOV r0, #0xFFFFFF00
43         STR r0, [r0] 
44         
45         LDMFD sp!,{r0-r3,r12,lr}
46         
47         MSR CPSR_c, #0x12|0x80|0x40
48         
49         SUBS pc, lr, #4
50 __mbed_swi:
51         STMFD sp!, {a4, r4, ip, lr}
52         
53         LDR r4, =0x40000040
54         
55         LDR a4, =0x00940000
56         LDR PC, =0x7ffff820
57 __mbed_dcc_irq:
58         LDMFD sp!,{r0-r3,r12,lr}
59         
60         MSR CPSR_c, #0x12|0x80|0x40
61         
62         SUB lr, lr, #4 
63         STMFD sp!, {ip,lr} 
64         
65         LDR LR, =0xfffff000
66         STR LR, [LR, #0xf00]
67         
68         LDR PC, =0x7fffffe0
69 /*
70  __mbed_reset is called after reset
71  we setup the stacks and realmonitor, then call Reset_Handler like on M3
72 */
73
74 .section .text, "ax"
75 .arm
76 .global Reset_handler
77 Reset_Handler:   
78         .extern __libc_init_array
79         .extern  SystemInit
80         .extern  __wrap_main
81         LDR     R0, =SystemInit
82         MOV     LR, PC       
83         BX      R0
84
85         LDR     R0, =__libc_init_array
86         MOV     LR, PC       
87         BX      R0
88
89         LDR     R0, =__wrap_main
90         BX      R0
91
92 __mbed_reset:
93         LDR R0, =( __SRAM_segment_end__ )
94         
95         MSR CPSR_c, #0x1B|0x80|0x40
96         MOV SP, R0
97         SUB R0, R0, #0x00000040
98         
99         MSR CPSR_c, #0x17|0x80|0x40
100         MOV SP, R0
101         SUB R0, R0, #0x00000040
102         
103         MSR CPSR_c, #0x11|0x80|0x40
104         MOV SP, R0
105         SUB R0, R0, #0x00000000
106         
107         MSR CPSR_c, #0x12|0x80|0x40
108         MOV SP, R0
109         SUB R0, R0, #0x00000040
110         
111         MSR CPSR_c, #0x13|0x80|0x40
112         MOV SP, R0
113         SUB R0, R0, #0x00000040
114         
115         MSR CPSR_c, #0x10
116         MOV SP, R0
117         
118 /*  Relocate .data section (Copy from ROM to RAM) */
119         LDR     R1, =__text_end__        /* _etext */ 
120         LDR     R2, =__data_start__      /* _data  */
121         LDR     R3, =__data_end__        /* _edata */ 
122         CMP     R2, R3
123         BEQ     DataIsEmpty
124 LoopRel:        CMP     R2, R3 
125         LDRLO   R0, [R1], #4 
126         STRLO   R0, [R2], #4 
127         BLO     LoopRel 
128 DataIsEmpty:
129
130 /*   Clear .bss section (Zero init) */
131         MOV     R0, #0 
132         LDR     R1, =__bss_start__ 
133         LDR     R2, =__bss_end__ 
134         CMP     R1,R2
135         BEQ     BSSIsEmpty
136 LoopZI:         CMP     R1, R2 
137         STRLO   R0, [R1], #4 
138         BLO     LoopZI 
139 BSSIsEmpty:
140
141
142 /* Init realmonitor */
143         LDR R0, =__mbed_init_realmonitor
144         MOV LR, PC
145         BX R0
146         
147 /* Go to Reset_Handler */ 
148         LDR     R0, =Reset_Handler
149         BX R0