YAHAL
Yet Another Hardware Abstraction Library
Loading...
Searching...
No Matches
startup_msp432p401r_gcc.cpp
1#include <msp.h>
3#include <stdint.h>
4
5#ifdef __cplusplus
6extern "C" {
7#endif
8
9// Forward declaration of SysTick Handler
10// (implemented in task_msp432.cpp)
11void SysTick_Handler(void);
12
13/*********************/
14/* Macro Definitions */
15/*********************/
16#define WEAK_FUNC(FUN) \
17void FUN(void) __attribute__ ((weak));
18#define WEAK_INT_FUNC(FUN) \
19int FUN() __attribute__ ((weak));
20#define WEAK_ALIAS_FUNC(FUN, FUN_ALIAS) \
21void FUN(void) __attribute__ ((weak, alias(#FUN_ALIAS)));
22#define WEAK_ALIAS_INT_FUNC(FUN, FUN_ALIAS) \
23int FUN() __attribute__ ((weak, alias(#FUN_ALIAS)));
24
25/************************************/
26/* External variables and functions */
27/************************************/
28extern void __cmsis_start(void);
29extern uint32_t __StackTop;
30
31typedef void (*pFunc)(void);
32
33// Forward declaration of the implemented handlers.
34WEAK_FUNC(Default_Handler)
35WEAK_FUNC(Reset_Handler)
36WEAK_INT_FUNC(return_0)
37/* Cortex-M4 Processor Exceptions */
38WEAK_ALIAS_FUNC(NMI_Handler, Default_Handler)
39WEAK_ALIAS_FUNC(HardFault_Handler, Default_Handler)
40WEAK_ALIAS_FUNC(MemManage_Handler, Default_Handler)
41WEAK_ALIAS_FUNC(BusFault_Handler, Default_Handler)
42WEAK_ALIAS_FUNC(UsageFault_Handler, Default_Handler)
43WEAK_ALIAS_FUNC(SVC_Handler, Default_Handler)
44WEAK_ALIAS_FUNC(DebugMon_Handler, Default_Handler)
45WEAK_ALIAS_FUNC(PendSV_Handler, Default_Handler)
46
47// Device specific interrupt handler
48WEAK_ALIAS_FUNC( PSS_IRQHandler, Default_Handler)
49WEAK_ALIAS_FUNC( CS_IRQHandler, Default_Handler)
50WEAK_ALIAS_FUNC( PCM_IRQHandler, Default_Handler)
51WEAK_ALIAS_FUNC( WDT_A_IRQHandler, Default_Handler)
52WEAK_ALIAS_FUNC( FPU_IRQHandler, Default_Handler)
53WEAK_ALIAS_FUNC( FLCTL_IRQHandler, Default_Handler)
54WEAK_ALIAS_FUNC( COMP_E0_IRQHandler, Default_Handler)
55WEAK_ALIAS_FUNC( COMP_E1_IRQHandler, Default_Handler)
56WEAK_ALIAS_FUNC( TA0_0_IRQHandler, Default_Handler)
57WEAK_ALIAS_FUNC( TA0_N_IRQHandler, Default_Handler)
58WEAK_ALIAS_FUNC( TA1_0_IRQHandler, Default_Handler)
59WEAK_ALIAS_FUNC( TA1_N_IRQHandler, Default_Handler)
60WEAK_ALIAS_FUNC( TA2_0_IRQHandler, Default_Handler)
61WEAK_ALIAS_FUNC( TA2_N_IRQHandler, Default_Handler)
62WEAK_ALIAS_FUNC( TA3_0_IRQHandler, Default_Handler)
63WEAK_ALIAS_FUNC( TA3_N_IRQHandler, Default_Handler)
64WEAK_ALIAS_FUNC( EUSCIA0_IRQHandler, Default_Handler)
65WEAK_ALIAS_FUNC( EUSCIA1_IRQHandler, Default_Handler)
66WEAK_ALIAS_FUNC( EUSCIA2_IRQHandler, Default_Handler)
67WEAK_ALIAS_FUNC( EUSCIA3_IRQHandler, Default_Handler)
68WEAK_ALIAS_FUNC( EUSCIB0_IRQHandler, Default_Handler)
69WEAK_ALIAS_FUNC( EUSCIB1_IRQHandler, Default_Handler)
70WEAK_ALIAS_FUNC( EUSCIB2_IRQHandler, Default_Handler)
71WEAK_ALIAS_FUNC( EUSCIB3_IRQHandler, Default_Handler)
72WEAK_ALIAS_FUNC( ADC14_IRQHandler, Default_Handler)
73WEAK_ALIAS_FUNC( T32_INT1_IRQHandler,Default_Handler)
74WEAK_ALIAS_FUNC( T32_INT2_IRQHandler,Default_Handler)
75WEAK_ALIAS_FUNC( T32_INTC_IRQHandler,Default_Handler)
76WEAK_ALIAS_FUNC( AES256_IRQHandler, Default_Handler)
77WEAK_ALIAS_FUNC( RTC_C_IRQHandler, Default_Handler)
78WEAK_ALIAS_FUNC( DMA_ERR_IRQHandler, Default_Handler)
79WEAK_ALIAS_FUNC( DMA_INT3_IRQHandler,Default_Handler)
80WEAK_ALIAS_FUNC( DMA_INT2_IRQHandler,Default_Handler)
81WEAK_ALIAS_FUNC( DMA_INT1_IRQHandler,Default_Handler)
82WEAK_ALIAS_FUNC( DMA_INT0_IRQHandler,Default_Handler)
83WEAK_ALIAS_FUNC( PORT1_IRQHandler, Default_Handler)
84WEAK_ALIAS_FUNC( PORT2_IRQHandler, Default_Handler)
85WEAK_ALIAS_FUNC( PORT3_IRQHandler, Default_Handler)
86WEAK_ALIAS_FUNC( PORT4_IRQHandler, Default_Handler)
87WEAK_ALIAS_FUNC( PORT5_IRQHandler, Default_Handler)
88WEAK_ALIAS_FUNC( PORT6_IRQHandler, Default_Handler)
89
90/* Interrupt vector table. Note that the proper constructs must be placed on this to */
91/* ensure that it ends up at physical address 0x0000.0000 or at the start of */
92/* the program if located at a start address other than 0. */
93void (*const isr_vector[])(void) __attribute__ ((section (".intvecs"), used)) = {
94 (pFunc)&__StackTop,
95 /* The initial stack pointer */
96 Reset_Handler, /* The reset handler */
97 NMI_Handler, /* The NMI handler */
98 HardFault_Handler, /* The hard fault handler */
99 MemManage_Handler, /* The MPU fault handler */
100 BusFault_Handler, /* The bus fault handler */
101 UsageFault_Handler, /* The usage fault handler */
102 0, /* Reserved */
103 0, /* Reserved */
104 0, /* Reserved */
105 0, /* Reserved */
106 SVC_Handler, /* SVCall handler */
107 DebugMon_Handler, /* Debug monitor handler */
108 0, /* Reserved */
109 PendSV_Handler, /* The PendSV handler */
110 SysTick_Handler, /* The SysTick handler */
111
112 PSS_IRQHandler, /* PSS Interrupt */
113 CS_IRQHandler, /* CS Interrupt */
114 PCM_IRQHandler, /* PCM Interrupt */
115 WDT_A_IRQHandler, /* WDT_A Interrupt */
116 FPU_IRQHandler, /* FPU Interrupt */
117 FLCTL_IRQHandler, /* Flash Controller Interrupt*/
118 COMP_E0_IRQHandler, /* COMP_E0 Interrupt */
119 COMP_E1_IRQHandler, /* COMP_E1 Interrupt */
120 TA0_0_IRQHandler, /* TA0_0 Interrupt */
121 TA0_N_IRQHandler, /* TA0_N Interrupt */
122 TA1_0_IRQHandler, /* TA1_0 Interrupt */
123 TA1_N_IRQHandler, /* TA1_N Interrupt */
124 TA2_0_IRQHandler, /* TA2_0 Interrupt */
125 TA2_N_IRQHandler, /* TA2_N Interrupt */
126 TA3_0_IRQHandler, /* TA3_0 Interrupt */
127 TA3_N_IRQHandler, /* TA3_N Interrupt */
128 EUSCIA0_IRQHandler, /* EUSCIA0 Interrupt */
129 EUSCIA1_IRQHandler, /* EUSCIA1 Interrupt */
130 EUSCIA2_IRQHandler, /* EUSCIA2 Interrupt */
131 EUSCIA3_IRQHandler, /* EUSCIA3 Interrupt */
132 EUSCIB0_IRQHandler, /* EUSCIB0 Interrupt */
133 EUSCIB1_IRQHandler, /* EUSCIB1 Interrupt */
134 EUSCIB2_IRQHandler, /* EUSCIB2 Interrupt */
135 EUSCIB3_IRQHandler, /* EUSCIB3 Interrupt */
136 ADC14_IRQHandler, /* ADC14 Interrupt */
137 T32_INT1_IRQHandler, /* T32_INT1 Interrupt */
138 T32_INT2_IRQHandler, /* T32_INT2 Interrupt */
139 T32_INTC_IRQHandler, /* T32_INTC Interrupt */
140 AES256_IRQHandler, /* AES256 Interrupt */
141 RTC_C_IRQHandler, /* RTC_C Interrupt */
142 DMA_ERR_IRQHandler, /* DMA_ERR Interrupt */
143 DMA_INT3_IRQHandler, /* DMA_INT3 Interrupt */
144 DMA_INT2_IRQHandler, /* DMA_INT2 Interrupt */
145 DMA_INT1_IRQHandler, /* DMA_INT1 Interrupt */
146 DMA_INT0_IRQHandler, /* DMA_INT0 Interrupt */
147 PORT1_IRQHandler, /* Port1 Interrupt */
148 PORT2_IRQHandler, /* Port2 Interrupt */
149 PORT3_IRQHandler, /* Port3 Interrupt */
150 PORT4_IRQHandler, /* Port4 Interrupt */
151 PORT5_IRQHandler, /* Port5 Interrupt */
152 PORT6_IRQHandler /* Port6 Interrupt */
153};
154
155/* Forward declaration of the default fault handlers. */
156/* This is the code that gets called when the processor first starts execution */
157/* following a reset event. Only the absolutely necessary set is performed, */
158/* after which the application supplied entry() routine is called. Any fancy */
159/* actions (such as making decisions based on the reset cause register, and */
160/* resetting the bits in that register) are left solely in the hands of the */
161/* application. */
162void Reset_Handler(void) {
163 // Call system initialization routine. Remember that
164 // data and bss sections are NOT yet initialized, but
165 // copied AFTER this call!
166 SystemInit();
167
168 // Let CMSIS code do the initialization of the C++
169 // runtime and jump to main
171}
172
173// This is the code that gets called when the processor receives an unexpected
174// interrupt. This simply enters an infinite loop, preserving the system state
175// for examination by a debugger.
176void Default_Handler(void) {
177 // Enter an infinite loop.
178 while (1) { }
179}
180
181// Dummy Posix File IO functions
182// to suppress linker warnings
183WEAK_ALIAS_INT_FUNC( _read, return_0 );
184WEAK_ALIAS_INT_FUNC( _write, return_0 );
185WEAK_ALIAS_INT_FUNC( _open, return_0 );
186WEAK_ALIAS_INT_FUNC( _close, return_0 );
187WEAK_ALIAS_INT_FUNC( _link, return_0 );
188WEAK_ALIAS_INT_FUNC( _unlink, return_0 );
189WEAK_ALIAS_INT_FUNC( _stat, return_0 );
190WEAK_ALIAS_INT_FUNC( _fstat, return_0 );
191WEAK_ALIAS_INT_FUNC( _lseek, return_0 );
192WEAK_ALIAS_INT_FUNC( _isatty, return_0 );
193WEAK_ALIAS_INT_FUNC( _kill, return_0 );
194WEAK_ALIAS_INT_FUNC( _getpid, return_0 );
195
196int return_0() {
197 return 0;
198}
199
200#ifdef __cplusplus
201}
202#endif
__STATIC_FORCEINLINE __NO_RETURN void __cmsis_start(void)
Initializes data and bss sections.
Definition cmsis_gcc.h:137
void __attribute__((noreturn))(*rom_reset_usb_boot_fn)(uint32_t
Reboot the device into BOOTSEL mode.
Definition bootrom.h:66
CMSIS Cortex-M4F Device Peripheral Access Layer Header File for MSP432P401R.