libs
platform_specific_components
lpc11c24
libuavcan
test_olimex_lpc_p11c24
src
sys
crt0.c
Go to the documentation of this file.
1
/*
2
* Pavel Kirienko, 2014 <pavel.kirienko@gmail.com>
3
* ARM Cortex-M0(+)/M1/M3 startup file.
4
*/
5
6
typedef
void (*
funptr_t
)(void);
7
8
#define fill32(start, end, filler) { \
9
unsigned *p1 = start; \
10
const unsigned * const p2 = end; \
11
while (p1 < p2) \
12
*p1++ = filler; \
13
}
14
15
extern
const
unsigned
_etext
;
16
17
extern
unsigned
_data
;
18
extern
unsigned
_edata
;
19
20
extern
unsigned
_bss
;
21
extern
unsigned
_ebss
;
22
23
extern
funptr_t
__init_array_start
;
24
extern
funptr_t
__init_array_end
;
25
26
__attribute__
((noreturn))
27
extern
int
main
(
void
);
28
29
extern
void
SystemInit
(
void
);
30
31
#pragma GCC optimize 1
32
36
void
Reset_Handler(
void
);
37
void
Default_Handler(
void
);
38
void
NMI_Handler(
void
);
39
void
HardFault_Handler(
void
);
40
void
SVC_Handler(
void
);
41
void
PendSV_Handler(
void
);
42
void
SysTick_Handler
(
void
);
43
47
__attribute__
((naked, noreturn))
48
void
Reset_Handler(
void
)
49
{
50
// Data section
51
{
52
const
unsigned
* tp = &
_etext
;
53
unsigned
* dp = &
_data
;
54
while
(dp < &
_edata
)
55
{
56
*dp++ = *tp++;
57
}
58
}
59
60
// BSS section
61
fill32
(&
_bss
, &
_ebss
, 0);
62
63
SystemInit
();
64
65
// Constructors
66
{
67
funptr_t
* fpp = &
__init_array_start
;
68
while
(fpp < &
__init_array_end
)
69
{
70
(*fpp)();
71
fpp++;
72
}
73
}
74
75
(void)
main
();
76
77
while
(1) { }
78
}
79
83
__attribute__
((weak))
84
void
Default_Handler(
void
)
85
{
86
while
(1) { }
87
}
88
89
__attribute__
((weak))
90
void
NMI_Handler(
void
)
91
{
92
while
(1) { }
93
}
94
95
__attribute__
((weak))
96
void
HardFault_Handler(
void
)
97
{
98
while
(1) { }
99
}
100
101
__attribute__
((weak))
102
void
SVC_Handler(
void
)
103
{
104
while
(1) { }
105
}
106
107
__attribute__
((weak))
108
void
PendSV_Handler(
void
)
109
{
110
while
(1) { }
111
}
112
113
__attribute__
((weak))
114
void
SysTick_Handler
(
void
)
115
{
116
while
(1) { }
117
}
118
122
#define ALIAS(f) __attribute__ ((weak, alias (#f)))
123
124
void
CAN_IRQHandler
(
void
)
ALIAS
(Default_Handler);
125
void
SSP1_IRQHandler(
void
)
ALIAS
(Default_Handler);
126
void
I2C_IRQHandler(
void
)
ALIAS
(Default_Handler);
127
void
TIMER16_0_IRQHandler(
void
)
ALIAS
(Default_Handler);
128
void
TIMER16_1_IRQHandler(
void
)
ALIAS
(Default_Handler);
129
void
TIMER32_0_IRQHandler(
void
)
ALIAS
(Default_Handler);
130
void
TIMER32_1_IRQHandler(
void
)
ALIAS
(Default_Handler);
131
void
SSP0_IRQHandler(
void
)
ALIAS
(Default_Handler);
132
void
UART_IRQHandler(
void
)
ALIAS
(Default_Handler);
133
void
ADC_IRQHandler(
void
)
ALIAS
(Default_Handler);
134
void
WDT_IRQHandler(
void
)
ALIAS
(Default_Handler);
135
void
BOD_IRQHandler(
void
)
ALIAS
(Default_Handler);
136
void
PIOINT3_IRQHandler(
void
)
ALIAS
(Default_Handler);
137
void
PIOINT2_IRQHandler(
void
)
ALIAS
(Default_Handler);
138
void
PIOINT1_IRQHandler(
void
)
ALIAS
(Default_Handler);
139
void
PIOINT0_IRQHandler(
void
)
ALIAS
(Default_Handler);
140
void
WAKEUP_IRQHandler(
void
)
ALIAS
(Default_Handler);
141
145
extern
void
__stack_end(
void
);
146
151
__attribute__
((used, section(
"vectors"
)))
152
void (* const VectorTable[64])(
void
) =
153
{
154
__stack_end,
// The initial stack pointer
155
Reset_Handler,
// The reset handler
156
NMI_Handler,
// The NMI handler
157
HardFault_Handler,
// The hard fault handler
158
0,
// Reserved
159
0,
// Reserved
160
0,
// Reserved
161
0,
// Reserved
162
0,
// Reserved
163
0,
// Reserved
164
0,
// Reserved
165
SVC_Handler,
// SVCall handler
166
0,
// Reserved
167
0,
// Reserved
168
PendSV_Handler,
// The PendSV handler
169
SysTick_Handler
,
// The SysTick handler
170
171
WAKEUP_IRQHandler,
// PIO0_0 Wakeup
172
WAKEUP_IRQHandler,
// PIO0_1 Wakeup
173
WAKEUP_IRQHandler,
// PIO0_2 Wakeup
174
WAKEUP_IRQHandler,
// PIO0_3 Wakeup
175
WAKEUP_IRQHandler,
// PIO0_4 Wakeup
176
WAKEUP_IRQHandler,
// PIO0_5 Wakeup
177
WAKEUP_IRQHandler,
// PIO0_6 Wakeup
178
WAKEUP_IRQHandler,
// PIO0_7 Wakeup
179
WAKEUP_IRQHandler,
// PIO0_8 Wakeup
180
WAKEUP_IRQHandler,
// PIO0_9 Wakeup
181
WAKEUP_IRQHandler,
// PIO0_10 Wakeup
182
WAKEUP_IRQHandler,
// PIO0_11 Wakeup
183
WAKEUP_IRQHandler,
// PIO1_0 Wakeup
184
185
CAN_IRQHandler
,
// C_CAN Interrupt
186
SSP1_IRQHandler,
// SPI/SSP1 Interrupt
187
I2C_IRQHandler,
// I2C0
188
TIMER16_0_IRQHandler,
// CT16B0 (16-bit Timer 0)
189
TIMER16_1_IRQHandler,
// CT16B1 (16-bit Timer 1)
190
TIMER32_0_IRQHandler,
// CT32B0 (32-bit Timer 0)
191
TIMER32_1_IRQHandler,
// CT32B1 (32-bit Timer 1)
192
SSP0_IRQHandler,
// SPI/SSP0 Interrupt
193
UART_IRQHandler,
// UART0
194
195
0,
// Reserved
196
0,
// Reserved
197
198
ADC_IRQHandler,
// ADC (A/D Converter)
199
WDT_IRQHandler,
// WDT (Watchdog Timer)
200
BOD_IRQHandler,
// BOD (Brownout Detect)
201
0,
// Reserved
202
PIOINT3_IRQHandler,
// PIO INT3
203
PIOINT2_IRQHandler,
// PIO INT2
204
PIOINT1_IRQHandler,
// PIO INT1
205
PIOINT0_IRQHandler,
// PIO INT0
206
207
0,
208
0,
209
0,
210
0,
211
0,
212
0,
213
0,
214
0,
215
0,
216
0,
217
0,
218
0,
219
0,
220
0,
221
0,
222
0
223
};
SystemInit
void SystemInit()
Definition:
board.cpp:190
main
int main(int argc, char **argv)
Definition:
test_main.cpp:24
ALIAS
#define ALIAS(f)
Definition:
crt0.c:122
_etext
const unsigned _etext
__init_array_start
funptr_t __init_array_start
funptr_t
void(* funptr_t)(void)
Definition:
crt0.c:6
__attribute__
__attribute__((noreturn))
Definition:
crt0.c:26
_edata
unsigned _edata
_bss
unsigned _bss
fill32
#define fill32(start, end, filler)
Definition:
crt0.c:8
CAN_IRQHandler
void CAN_IRQHandler(void SSP1_IRQHandler() ALIAS(Default_Handler) void)
Definition:
crt0.c:124
_data
unsigned _data
__init_array_end
funptr_t __init_array_end
SysTick_Handler
void SysTick_Handler()
Definition:
clock.cpp:172
_ebss
unsigned _ebss
uavcan_communicator
Author(s):
autogenerated on Fri Dec 13 2024 03:10:02