summaryrefslogtreecommitdiff
path: root/bsp/nxp/lpc/lpc1114/driver/startup_gcc.s
blob: ffb08abf438321e447baf0b5c81a9a548d11dc07 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
/*
 * Copyright (c) 2019, RT-Thread Development Team
 *
 * SPDX-License-Identifier: Apache-2.0
 *
 * Change Logs:
 * Date           Author       Notes
 * 2019-05-05     jg1uaa       the first version
 */

#include "../rtconfig.h"

/* Interrupt Vectors */
        .section .isr_vector
        .thumb
        .align 0

        .long   _estack                 // MSP default value
        .long   Reset_Handler + 1       //  1: Reset
        .long   default_handler + 1     //  2: NMI
        .long   HardFault_Handler + 1   //  3: HardFault
        .long   default_handler + 1     //  4: reserved
        .long   default_handler + 1     //  5: reserved
        .long   default_handler + 1     //  6: reserved
        .long   default_handler + 1     //  7: reserved
        .long   default_handler + 1     //  8: reserved
        .long   default_handler + 1     //  9: reserved
        .long   default_handler + 1     // 10: reserved
        .long   default_handler + 1     // 11: SVCall
        .long   default_handler + 1     // 12: reserved
        .long   default_handler + 1     // 13: reserved
        .long   PendSV_Handler + 1      // 14: PendSV
        .long   SysTick_Handler + 1     // 15: SysTick
        .long   default_handler + 1     // 16: External Interrupt(0)
        .long   default_handler + 1     // 17: External Interrupt(1)
        .long   default_handler + 1     // 18: External Interrupt(2)
        .long   default_handler + 1     // 19: External Interrupt(3)
        .long   default_handler + 1     // 20: External Interrupt(4)
        .long   default_handler + 1     // 21: External Interrupt(5)
        .long   default_handler + 1     // 22: External Interrupt(6)
        .long   default_handler + 1     // 23: External Interrupt(7)
        .long   default_handler + 1     // 24: External Interrupt(8)
        .long   default_handler + 1     // 25: External Interrupt(9)
        .long   default_handler + 1     // 26: External Interrupt(10)
        .long   default_handler + 1     // 27: External Interrupt(11)
        .long   default_handler + 1     // 28: External Interrupt(12)
        .long   default_handler + 1     // 29: External Interrupt(13) C_CAN
        .long   default_handler + 1     // 30: External Interrupt(14) SPI/SSP1
        .long   default_handler + 1     // 31: External Interrupt(15) I2C
        .long   default_handler + 1     // 32: External Interrupt(16) CT16B0
        .long   default_handler + 1     // 33: External Interrupt(17) CT16B1
        .long   default_handler + 1     // 34: External Interrupt(18) CT32B0
        .long   default_handler + 1     // 35: External Interrupt(19) CT32B1
        .long   default_handler + 1     // 36: External Interrupt(20) SPI/SSP0
        .long   UART_IRQHandler + 1     // 37: External Interrupt(21) UART
        .long   default_handler + 1     // 38: External Interrupt(22)
        .long   default_handler + 1     // 39: External Interrupt(23)
        .long   default_handler + 1     // 40: External Interrupt(24) ADC
        .long   default_handler + 1     // 41: External Interrupt(25) WDT
        .long   default_handler + 1     // 42: External Interrupt(26) BOD
        .long   default_handler + 1     // 43: External Interrupt(27)
        .long   default_handler + 1     // 44: External Interrupt(28) PIO_3
        .long   default_handler + 1     // 45: External Interrupt(29) PIO_2
        .long   default_handler + 1     // 46: External Interrupt(30) PIO_1
        .long   default_handler + 1     // 47: External Interrupt(31) PIO_0
        .long   default_handler + 1     // 48: External Interrupt(32)
        .long   default_handler + 1     // 49: External Interrupt(33)
        .long   default_handler + 1     // 50: External Interrupt(34)
        .long   default_handler + 1     // 51: External Interrupt(35)
        .long   default_handler + 1     // 52: External Interrupt(36)
        .long   default_handler + 1     // 53: External Interrupt(37)
        .long   default_handler + 1     // 54: External Interrupt(38)
        .long   default_handler + 1     // 55: External Interrupt(39)
        .long   default_handler + 1     // 56: External Interrupt(40)
        .long   default_handler + 1     // 57: External Interrupt(41)
        .long   default_handler + 1     // 58: External Interrupt(42)
        .long   default_handler + 1     // 59: External Interrupt(43)
        .long   default_handler + 1     // 60: External Interrupt(44)
        .long   default_handler + 1     // 61: External Interrupt(45)
        .long   default_handler + 1     // 62: External Interrupt(46)
        .long   default_handler + 1     // 63: External Interrupt(47)

/* startup */
        .section .text
        .thumb
        .align 0
        .global Reset_Handler
Reset_Handler:

        /* initialize .data */
data_init:
        ldr     r1, =_sidata
        ldr     r2, =_sdata
        ldr     r3, =_edata
        cmp     r2, r3
        beq     bss_init
data_loop:
        ldrb    r0, [r1]
        add     r1, r1, #1
        strb    r0, [r2]
        add     r2, r2, #1
        cmp     r2, r3
        bne     data_loop

        /* initialize .bss */
bss_init:
        mov     r0, #0
        ldr     r2, =_sbss      // sbss/ebss is 4byte aligned by link.lds
        ldr     r3, =_ebss
        cmp     r2, r3
        beq     start_main
bss_loop:
        str     r0, [r2]
        add     r2, r2, #4
        cmp     r2, r3
        bne     bss_loop

        /* launch main() */
start_main:
#ifdef RT_USING_USER_MAIN
        bl      entry
#else
        bl      main
#endif

default_handler:
die:
        b       die

        .pool

    .end