mbed official / mbed-dev

Dependents:   Nucleo_Hello_Encoder BLE_iBeaconScan AM1805_DEMO DISCO-F429ZI_ExportTemplate1 ... more

Committer:
<>
Date:
Fri Sep 16 16:24:25 2016 +0100
Revision:
147:30b64687e01f
Parent:
144:ef7eb2e8f9f7
This updates the lib to the mbed lib v126

Who changed what in which revision?

UserRevisionLine numberNew contents of line
<> 144:ef7eb2e8f9f7 1 //*****************************************************************************
<> 144:ef7eb2e8f9f7 2 // LPC82x Microcontroller Startup code for use with LPCXpresso IDE
<> 144:ef7eb2e8f9f7 3 //
<> 144:ef7eb2e8f9f7 4 // Version : 140901
<> 144:ef7eb2e8f9f7 5 //*****************************************************************************
<> 144:ef7eb2e8f9f7 6 //
<> 144:ef7eb2e8f9f7 7 // Copyright(C) NXP Semiconductors, 2014
<> 144:ef7eb2e8f9f7 8 // All rights reserved.
<> 144:ef7eb2e8f9f7 9 //
<> 144:ef7eb2e8f9f7 10 // Software that is described herein is for illustrative purposes only
<> 144:ef7eb2e8f9f7 11 // which provides customers with programming information regarding the
<> 144:ef7eb2e8f9f7 12 // LPC products. This software is supplied "AS IS" without any warranties of
<> 144:ef7eb2e8f9f7 13 // any kind, and NXP Semiconductors and its licensor disclaim any and
<> 144:ef7eb2e8f9f7 14 // all warranties, express or implied, including all implied warranties of
<> 144:ef7eb2e8f9f7 15 // merchantability, fitness for a particular purpose and non-infringement of
<> 144:ef7eb2e8f9f7 16 // intellectual property rights. NXP Semiconductors assumes no responsibility
<> 144:ef7eb2e8f9f7 17 // or liability for the use of the software, conveys no license or rights under any
<> 144:ef7eb2e8f9f7 18 // patent, copyright, mask work right, or any other intellectual property rights in
<> 144:ef7eb2e8f9f7 19 // or to any products. NXP Semiconductors reserves the right to make changes
<> 144:ef7eb2e8f9f7 20 // in the software without notification. NXP Semiconductors also makes no
<> 144:ef7eb2e8f9f7 21 // representation or warranty that such application will be suitable for the
<> 144:ef7eb2e8f9f7 22 // specified use without further testing or modification.
<> 144:ef7eb2e8f9f7 23 //
<> 144:ef7eb2e8f9f7 24 // Permission to use, copy, modify, and distribute this software and its
<> 144:ef7eb2e8f9f7 25 // documentation is hereby granted, under NXP Semiconductors' and its
<> 144:ef7eb2e8f9f7 26 // licensor's relevant copyrights in the software, without fee, provided that it
<> 144:ef7eb2e8f9f7 27 // is used in conjunction with NXP Semiconductors microcontrollers. This
<> 144:ef7eb2e8f9f7 28 // copyright, permission, and disclaimer notice must appear in all copies of
<> 144:ef7eb2e8f9f7 29 // this code.
<> 144:ef7eb2e8f9f7 30 //*****************************************************************************
<> 144:ef7eb2e8f9f7 31
<> 144:ef7eb2e8f9f7 32 #if defined (__cplusplus)
<> 144:ef7eb2e8f9f7 33 #ifdef __REDLIB__
<> 144:ef7eb2e8f9f7 34 #error Redlib does not support C++
<> 144:ef7eb2e8f9f7 35 #else
<> 144:ef7eb2e8f9f7 36 //*****************************************************************************
<> 144:ef7eb2e8f9f7 37 //
<> 144:ef7eb2e8f9f7 38 // The entry point for the C++ library startup
<> 144:ef7eb2e8f9f7 39 //
<> 144:ef7eb2e8f9f7 40 //*****************************************************************************
<> 144:ef7eb2e8f9f7 41 extern "C" {
<> 144:ef7eb2e8f9f7 42 extern void __libc_init_array(void);
<> 144:ef7eb2e8f9f7 43 }
<> 144:ef7eb2e8f9f7 44 #endif
<> 144:ef7eb2e8f9f7 45 #endif
<> 144:ef7eb2e8f9f7 46
<> 144:ef7eb2e8f9f7 47 #define WEAK __attribute__ ((weak))
<> 144:ef7eb2e8f9f7 48 #define ALIAS(f) __attribute__ ((weak, alias (#f)))
<> 144:ef7eb2e8f9f7 49
<> 144:ef7eb2e8f9f7 50 //*****************************************************************************
<> 144:ef7eb2e8f9f7 51 #if defined (__cplusplus)
<> 144:ef7eb2e8f9f7 52 extern "C" {
<> 144:ef7eb2e8f9f7 53 #endif
<> 144:ef7eb2e8f9f7 54
<> 144:ef7eb2e8f9f7 55 //*****************************************************************************
<> 144:ef7eb2e8f9f7 56 #if defined (__USE_CMSIS) || defined (__USE_LPCOPEN)
<> 144:ef7eb2e8f9f7 57 // Declaration of external SystemInit function
<> 144:ef7eb2e8f9f7 58 extern void SystemInit(void);
<> 144:ef7eb2e8f9f7 59 #endif
<> 144:ef7eb2e8f9f7 60
<> 144:ef7eb2e8f9f7 61 // Patch the AEABI integer divide functions to use MCU's romdivide library
<> 144:ef7eb2e8f9f7 62 #ifdef __USE_ROMDIVIDE
<> 144:ef7eb2e8f9f7 63 // Location in memory that holds the address of the ROM Driver table
<> 144:ef7eb2e8f9f7 64 #define PTR_ROM_DRIVER_TABLE ((unsigned int *)(0x1FFF1FF8))
<> 144:ef7eb2e8f9f7 65 // Variables to store addresses of idiv and udiv functions within MCU ROM
<> 144:ef7eb2e8f9f7 66 unsigned int *pDivRom_idiv;
<> 144:ef7eb2e8f9f7 67 unsigned int *pDivRom_uidiv;
<> 144:ef7eb2e8f9f7 68 #endif
<> 144:ef7eb2e8f9f7 69
<> 144:ef7eb2e8f9f7 70 //*****************************************************************************
<> 144:ef7eb2e8f9f7 71 //
<> 144:ef7eb2e8f9f7 72 // Forward declaration of the default handlers. These are aliased.
<> 144:ef7eb2e8f9f7 73 // When the application defines a handler (with the same name), this will
<> 144:ef7eb2e8f9f7 74 // automatically take precedence over these weak definitions
<> 144:ef7eb2e8f9f7 75 //
<> 144:ef7eb2e8f9f7 76 //*****************************************************************************
<> 144:ef7eb2e8f9f7 77 void ResetISR(void);
<> 144:ef7eb2e8f9f7 78 WEAK void NMI_Handler(void);
<> 144:ef7eb2e8f9f7 79 WEAK void HardFault_Handler(void);
<> 144:ef7eb2e8f9f7 80 WEAK void SVC_Handler(void);
<> 144:ef7eb2e8f9f7 81 WEAK void PendSV_Handler(void);
<> 144:ef7eb2e8f9f7 82 WEAK void SysTick_Handler(void);
<> 144:ef7eb2e8f9f7 83 WEAK void IntDefaultHandler(void);
<> 144:ef7eb2e8f9f7 84
<> 144:ef7eb2e8f9f7 85 //*****************************************************************************
<> 144:ef7eb2e8f9f7 86 //
<> 144:ef7eb2e8f9f7 87 // Forward declaration of the specific IRQ handlers. These are aliased
<> 144:ef7eb2e8f9f7 88 // to the IntDefaultHandler, which is a 'forever' loop. When the application
<> 144:ef7eb2e8f9f7 89 // defines a handler (with the same name), this will automatically take
<> 144:ef7eb2e8f9f7 90 // precedence over these weak definitions
<> 144:ef7eb2e8f9f7 91 //
<> 144:ef7eb2e8f9f7 92 //*****************************************************************************
<> 144:ef7eb2e8f9f7 93 void SPI0_IRQHandler(void) ALIAS(IntDefaultHandler);
<> 144:ef7eb2e8f9f7 94 void SPI1_IRQHandler(void) ALIAS(IntDefaultHandler);
<> 144:ef7eb2e8f9f7 95 void UART0_IRQHandler(void) ALIAS(IntDefaultHandler);
<> 144:ef7eb2e8f9f7 96 void UART1_IRQHandler(void) ALIAS(IntDefaultHandler);
<> 144:ef7eb2e8f9f7 97 void UART2_IRQHandler(void) ALIAS(IntDefaultHandler);
<> 144:ef7eb2e8f9f7 98 void I2C1_IRQHandler(void) ALIAS(IntDefaultHandler);
<> 144:ef7eb2e8f9f7 99 void I2C0_IRQHandler(void) ALIAS(IntDefaultHandler);
<> 144:ef7eb2e8f9f7 100 void SCT_IRQHandler(void) ALIAS(IntDefaultHandler);
<> 144:ef7eb2e8f9f7 101 void MRT_IRQHandler(void) ALIAS(IntDefaultHandler);
<> 144:ef7eb2e8f9f7 102 void CMP_IRQHandler(void) ALIAS(IntDefaultHandler);
<> 144:ef7eb2e8f9f7 103 void WDT_IRQHandler(void) ALIAS(IntDefaultHandler);
<> 144:ef7eb2e8f9f7 104 void BOD_IRQHandler(void) ALIAS(IntDefaultHandler);
<> 144:ef7eb2e8f9f7 105 void FLASH_IRQHandler(void) ALIAS(IntDefaultHandler);
<> 144:ef7eb2e8f9f7 106 void WKT_IRQHandler(void) ALIAS(IntDefaultHandler);
<> 144:ef7eb2e8f9f7 107 void ADC_SEQA_IRQHandler(void) ALIAS(IntDefaultHandler);
<> 144:ef7eb2e8f9f7 108 void ADC_SEQB_IRQHandler(void) ALIAS(IntDefaultHandler);
<> 144:ef7eb2e8f9f7 109 void ADC_THCMP_IRQHandler(void) ALIAS(IntDefaultHandler);
<> 144:ef7eb2e8f9f7 110 void ADC_OVR_IRQHandler(void) ALIAS(IntDefaultHandler);
<> 144:ef7eb2e8f9f7 111 void DMA_IRQHandler(void) ALIAS(IntDefaultHandler);
<> 144:ef7eb2e8f9f7 112 void I2C2_IRQHandler(void) ALIAS(IntDefaultHandler);
<> 144:ef7eb2e8f9f7 113 void I2C3_IRQHandler(void) ALIAS(IntDefaultHandler);
<> 144:ef7eb2e8f9f7 114 void PIN_INT0_IRQHandler(void) ALIAS(IntDefaultHandler);
<> 144:ef7eb2e8f9f7 115 void PIN_INT1_IRQHandler(void) ALIAS(IntDefaultHandler);
<> 144:ef7eb2e8f9f7 116 void PIN_INT2_IRQHandler(void) ALIAS(IntDefaultHandler);
<> 144:ef7eb2e8f9f7 117 void PIN_INT3_IRQHandler(void) ALIAS(IntDefaultHandler);
<> 144:ef7eb2e8f9f7 118 void PIN_INT4_IRQHandler(void) ALIAS(IntDefaultHandler);
<> 144:ef7eb2e8f9f7 119 void PIN_INT5_IRQHandler(void) ALIAS(IntDefaultHandler);
<> 144:ef7eb2e8f9f7 120 void PIN_INT6_IRQHandler(void) ALIAS(IntDefaultHandler);
<> 144:ef7eb2e8f9f7 121 void PIN_INT7_IRQHandler(void) ALIAS(IntDefaultHandler);
<> 144:ef7eb2e8f9f7 122 //*****************************************************************************
<> 144:ef7eb2e8f9f7 123 //
<> 144:ef7eb2e8f9f7 124 // The entry point for the application.
<> 144:ef7eb2e8f9f7 125 // __main() is the entry point for Redlib based applications
<> 144:ef7eb2e8f9f7 126 // main() is the entry point for Newlib based applications
<> 144:ef7eb2e8f9f7 127 //
<> 144:ef7eb2e8f9f7 128 //*****************************************************************************
<> 144:ef7eb2e8f9f7 129 #if defined (__REDLIB__)
<> 144:ef7eb2e8f9f7 130 extern void __main(void);
<> 144:ef7eb2e8f9f7 131 #else
<> 144:ef7eb2e8f9f7 132 extern int main(void);
<> 144:ef7eb2e8f9f7 133 #endif
<> 144:ef7eb2e8f9f7 134 //*****************************************************************************
<> 144:ef7eb2e8f9f7 135 //
<> 144:ef7eb2e8f9f7 136 // External declaration for the pointer to the stack top from the Linker Script
<> 144:ef7eb2e8f9f7 137 //
<> 144:ef7eb2e8f9f7 138 //*****************************************************************************
<> 144:ef7eb2e8f9f7 139 extern void _vStackTop(void);
<> 144:ef7eb2e8f9f7 140
<> 144:ef7eb2e8f9f7 141 //*****************************************************************************
<> 144:ef7eb2e8f9f7 142 #if defined (__cplusplus)
<> 144:ef7eb2e8f9f7 143 } // extern "C"
<> 144:ef7eb2e8f9f7 144 #endif
<> 144:ef7eb2e8f9f7 145 //*****************************************************************************
<> 144:ef7eb2e8f9f7 146 //
<> 144:ef7eb2e8f9f7 147 // The vector table.
<> 144:ef7eb2e8f9f7 148 // This relies on the linker script to place at correct location in memory.
<> 144:ef7eb2e8f9f7 149 //
<> 144:ef7eb2e8f9f7 150 //*****************************************************************************
<> 144:ef7eb2e8f9f7 151 extern void (* const g_pfnVectors[])(void);
<> 144:ef7eb2e8f9f7 152 __attribute__ ((section(".isr_vector")))
<> 144:ef7eb2e8f9f7 153 void (* const g_pfnVectors[])(void) = {
<> 144:ef7eb2e8f9f7 154 // Core Level - CM0plus
<> 144:ef7eb2e8f9f7 155 &_vStackTop, // The initial stack pointer
<> 144:ef7eb2e8f9f7 156 ResetISR, // The reset handler
<> 144:ef7eb2e8f9f7 157 NMI_Handler, // The NMI handler
<> 144:ef7eb2e8f9f7 158 HardFault_Handler, // The hard fault handler
<> 144:ef7eb2e8f9f7 159 0, // Reserved
<> 144:ef7eb2e8f9f7 160 0, // Reserved
<> 144:ef7eb2e8f9f7 161 0, // Reserved
<> 144:ef7eb2e8f9f7 162 0, // Reserved
<> 144:ef7eb2e8f9f7 163 0, // Reserved
<> 144:ef7eb2e8f9f7 164 0, // Reserved
<> 144:ef7eb2e8f9f7 165 0, // Reserved
<> 144:ef7eb2e8f9f7 166 SVC_Handler, // SVCall handler
<> 144:ef7eb2e8f9f7 167 0, // Reserved
<> 144:ef7eb2e8f9f7 168 0, // Reserved
<> 144:ef7eb2e8f9f7 169 PendSV_Handler, // The PendSV handler
<> 144:ef7eb2e8f9f7 170 SysTick_Handler, // The SysTick handler
<> 144:ef7eb2e8f9f7 171
<> 144:ef7eb2e8f9f7 172 // Chip Level - LPC82x
<> 144:ef7eb2e8f9f7 173 SPI0_IRQHandler, // SPI0 controller
<> 144:ef7eb2e8f9f7 174 SPI1_IRQHandler, // SPI1 controller
<> 144:ef7eb2e8f9f7 175 0, // Reserved
<> 144:ef7eb2e8f9f7 176 UART0_IRQHandler, // UART0
<> 144:ef7eb2e8f9f7 177 UART1_IRQHandler, // UART1
<> 144:ef7eb2e8f9f7 178 UART2_IRQHandler, // UART2
<> 144:ef7eb2e8f9f7 179 0, // Reserved
<> 144:ef7eb2e8f9f7 180 I2C1_IRQHandler, // I2C1 controller
<> 144:ef7eb2e8f9f7 181 I2C0_IRQHandler, // I2C0 controller
<> 144:ef7eb2e8f9f7 182 SCT_IRQHandler, // Smart Counter Timer
<> 144:ef7eb2e8f9f7 183 MRT_IRQHandler, // Multi-Rate Timer
<> 144:ef7eb2e8f9f7 184 CMP_IRQHandler, // Comparator
<> 144:ef7eb2e8f9f7 185 WDT_IRQHandler, // Watchdog
<> 144:ef7eb2e8f9f7 186 BOD_IRQHandler, // Brown Out Detect
<> 144:ef7eb2e8f9f7 187 FLASH_IRQHandler, // Flash Interrupt
<> 144:ef7eb2e8f9f7 188 WKT_IRQHandler, // Wakeup timer
<> 144:ef7eb2e8f9f7 189 ADC_SEQA_IRQHandler, // ADC sequence A completion
<> 144:ef7eb2e8f9f7 190 ADC_SEQB_IRQHandler, // ADC sequence B completion
<> 144:ef7eb2e8f9f7 191 ADC_THCMP_IRQHandler, // ADC threshold compare
<> 144:ef7eb2e8f9f7 192 ADC_OVR_IRQHandler, // ADC overrun
<> 144:ef7eb2e8f9f7 193 DMA_IRQHandler, // DMA
<> 144:ef7eb2e8f9f7 194 I2C2_IRQHandler, // I2C2 controller
<> 144:ef7eb2e8f9f7 195 I2C3_IRQHandler, // I2C3 controller
<> 144:ef7eb2e8f9f7 196 0, // Reserved
<> 144:ef7eb2e8f9f7 197 PIN_INT0_IRQHandler, // PIO INT0
<> 144:ef7eb2e8f9f7 198 PIN_INT1_IRQHandler, // PIO INT1
<> 144:ef7eb2e8f9f7 199 PIN_INT2_IRQHandler, // PIO INT2
<> 144:ef7eb2e8f9f7 200 PIN_INT3_IRQHandler, // PIO INT3
<> 144:ef7eb2e8f9f7 201 PIN_INT4_IRQHandler, // PIO INT4
<> 144:ef7eb2e8f9f7 202 PIN_INT5_IRQHandler, // PIO INT5
<> 144:ef7eb2e8f9f7 203 PIN_INT6_IRQHandler, // PIO INT6
<> 144:ef7eb2e8f9f7 204 PIN_INT7_IRQHandler, // PIO INT7
<> 144:ef7eb2e8f9f7 205 }; /* End of g_pfnVectors */
<> 144:ef7eb2e8f9f7 206
<> 144:ef7eb2e8f9f7 207 //*****************************************************************************
<> 144:ef7eb2e8f9f7 208 // Functions to carry out the initialization of RW and BSS data sections. These
<> 144:ef7eb2e8f9f7 209 // are written as separate functions rather than being inlined within the
<> 144:ef7eb2e8f9f7 210 // ResetISR() function in order to cope with MCUs with multiple banks of
<> 144:ef7eb2e8f9f7 211 // memory.
<> 144:ef7eb2e8f9f7 212 //*****************************************************************************
<> 144:ef7eb2e8f9f7 213 __attribute__ ((section(".after_vectors")))
<> 144:ef7eb2e8f9f7 214 void data_init(unsigned int romstart, unsigned int start, unsigned int len) {
<> 144:ef7eb2e8f9f7 215 unsigned int *pulDest = (unsigned int*) start;
<> 144:ef7eb2e8f9f7 216 unsigned int *pulSrc = (unsigned int*) romstart;
<> 144:ef7eb2e8f9f7 217 unsigned int loop;
<> 144:ef7eb2e8f9f7 218 for (loop = 0; loop < len; loop = loop + 4)
<> 144:ef7eb2e8f9f7 219 *pulDest++ = *pulSrc++;
<> 144:ef7eb2e8f9f7 220 }
<> 144:ef7eb2e8f9f7 221
<> 144:ef7eb2e8f9f7 222 __attribute__ ((section(".after_vectors")))
<> 144:ef7eb2e8f9f7 223 void bss_init(unsigned int start, unsigned int len) {
<> 144:ef7eb2e8f9f7 224 unsigned int *pulDest = (unsigned int*) start;
<> 144:ef7eb2e8f9f7 225 unsigned int loop;
<> 144:ef7eb2e8f9f7 226 for (loop = 0; loop < len; loop = loop + 4)
<> 144:ef7eb2e8f9f7 227 *pulDest++ = 0;
<> 144:ef7eb2e8f9f7 228 }
<> 144:ef7eb2e8f9f7 229
<> 144:ef7eb2e8f9f7 230 //*****************************************************************************
<> 144:ef7eb2e8f9f7 231 // The following symbols are constructs generated by the linker, indicating
<> 144:ef7eb2e8f9f7 232 // the location of various points in the "Global Section Table". This table is
<> 144:ef7eb2e8f9f7 233 // created by the linker via the Code Red managed linker script mechanism. It
<> 144:ef7eb2e8f9f7 234 // contains the load address, execution address and length of each RW data
<> 144:ef7eb2e8f9f7 235 // section and the execution and length of each BSS (zero initialized) section.
<> 144:ef7eb2e8f9f7 236 //*****************************************************************************
<> 144:ef7eb2e8f9f7 237 extern unsigned int __data_section_table;
<> 144:ef7eb2e8f9f7 238 extern unsigned int __data_section_table_end;
<> 144:ef7eb2e8f9f7 239 extern unsigned int __bss_section_table;
<> 144:ef7eb2e8f9f7 240 extern unsigned int __bss_section_table_end;
<> 144:ef7eb2e8f9f7 241
<> 144:ef7eb2e8f9f7 242
<> 144:ef7eb2e8f9f7 243 //*****************************************************************************
<> 144:ef7eb2e8f9f7 244 // Reset entry point for your code.
<> 144:ef7eb2e8f9f7 245 // Sets up a simple runtime environment and initializes the C/C++
<> 144:ef7eb2e8f9f7 246 // library.
<> 144:ef7eb2e8f9f7 247 //*****************************************************************************
<> 144:ef7eb2e8f9f7 248 __attribute__ ((section(".after_vectors")))
<> 144:ef7eb2e8f9f7 249 void
<> 144:ef7eb2e8f9f7 250 ResetISR(void) {
<> 144:ef7eb2e8f9f7 251
<> 144:ef7eb2e8f9f7 252 //
<> 144:ef7eb2e8f9f7 253 // Copy the data sections from flash to SRAM.
<> 144:ef7eb2e8f9f7 254 //
<> 144:ef7eb2e8f9f7 255 unsigned int LoadAddr, ExeAddr, SectionLen;
<> 144:ef7eb2e8f9f7 256 unsigned int *SectionTableAddr;
<> 144:ef7eb2e8f9f7 257
<> 144:ef7eb2e8f9f7 258 // Load base address of Global Section Table
<> 144:ef7eb2e8f9f7 259 SectionTableAddr = &__data_section_table;
<> 144:ef7eb2e8f9f7 260
<> 144:ef7eb2e8f9f7 261 // Copy the data sections from flash to SRAM.
<> 144:ef7eb2e8f9f7 262 while (SectionTableAddr < &__data_section_table_end) {
<> 144:ef7eb2e8f9f7 263 LoadAddr = *SectionTableAddr++;
<> 144:ef7eb2e8f9f7 264 ExeAddr = *SectionTableAddr++;
<> 144:ef7eb2e8f9f7 265 SectionLen = *SectionTableAddr++;
<> 144:ef7eb2e8f9f7 266 data_init(LoadAddr, ExeAddr, SectionLen);
<> 144:ef7eb2e8f9f7 267 }
<> 144:ef7eb2e8f9f7 268 // At this point, SectionTableAddr = &__bss_section_table;
<> 144:ef7eb2e8f9f7 269 // Zero fill the bss segment
<> 144:ef7eb2e8f9f7 270 while (SectionTableAddr < &__bss_section_table_end) {
<> 144:ef7eb2e8f9f7 271 ExeAddr = *SectionTableAddr++;
<> 144:ef7eb2e8f9f7 272 SectionLen = *SectionTableAddr++;
<> 144:ef7eb2e8f9f7 273 bss_init(ExeAddr, SectionLen);
<> 144:ef7eb2e8f9f7 274 }
<> 144:ef7eb2e8f9f7 275
<> 144:ef7eb2e8f9f7 276 // Patch the AEABI integer divide functions to use MCU's romdivide library
<> 144:ef7eb2e8f9f7 277 #ifdef __USE_ROMDIVIDE
<> 144:ef7eb2e8f9f7 278 // Get address of Integer division routines function table in ROM
<> 144:ef7eb2e8f9f7 279 unsigned int *div_ptr = (unsigned int *)((unsigned int *)*(PTR_ROM_DRIVER_TABLE))[4];
<> 144:ef7eb2e8f9f7 280 // Get addresses of integer divide routines in ROM
<> 144:ef7eb2e8f9f7 281 // These address are then used by the code in aeabi_romdiv_patch.s
<> 144:ef7eb2e8f9f7 282 pDivRom_idiv = (unsigned int *)div_ptr[0];
<> 144:ef7eb2e8f9f7 283 pDivRom_uidiv = (unsigned int *)div_ptr[1];
<> 144:ef7eb2e8f9f7 284 #endif
<> 144:ef7eb2e8f9f7 285
<> 144:ef7eb2e8f9f7 286 #if defined (__USE_CMSIS) || defined (__USE_LPCOPEN)
<> 144:ef7eb2e8f9f7 287 SystemInit();
<> 144:ef7eb2e8f9f7 288 #endif
<> 144:ef7eb2e8f9f7 289
<> 144:ef7eb2e8f9f7 290 #if defined (__cplusplus)
<> 144:ef7eb2e8f9f7 291 //
<> 144:ef7eb2e8f9f7 292 // Call C++ library initialisation
<> 144:ef7eb2e8f9f7 293 //
<> 144:ef7eb2e8f9f7 294 __libc_init_array();
<> 144:ef7eb2e8f9f7 295 #endif
<> 144:ef7eb2e8f9f7 296
<> 144:ef7eb2e8f9f7 297 #if defined (__REDLIB__)
<> 144:ef7eb2e8f9f7 298 // Call the Redlib library, which in turn calls main()
<> 144:ef7eb2e8f9f7 299 __main() ;
<> 144:ef7eb2e8f9f7 300 #else
<> 144:ef7eb2e8f9f7 301 main();
<> 144:ef7eb2e8f9f7 302 #endif
<> 144:ef7eb2e8f9f7 303
<> 144:ef7eb2e8f9f7 304 //
<> 144:ef7eb2e8f9f7 305 // main() shouldn't return, but if it does, we'll just enter an infinite loop
<> 144:ef7eb2e8f9f7 306 //
<> 144:ef7eb2e8f9f7 307 while (1) {
<> 144:ef7eb2e8f9f7 308 ;
<> 144:ef7eb2e8f9f7 309 }
<> 144:ef7eb2e8f9f7 310 }
<> 144:ef7eb2e8f9f7 311
<> 144:ef7eb2e8f9f7 312 //*****************************************************************************
<> 144:ef7eb2e8f9f7 313 // Default exception handlers. Override the ones here by defining your own
<> 144:ef7eb2e8f9f7 314 // handler routines in your application code.
<> 144:ef7eb2e8f9f7 315 //*****************************************************************************
<> 144:ef7eb2e8f9f7 316 __attribute__ ((section(".after_vectors")))
<> 144:ef7eb2e8f9f7 317 void NMI_Handler(void)
<> 144:ef7eb2e8f9f7 318 { while(1) {}
<> 144:ef7eb2e8f9f7 319 }
<> 144:ef7eb2e8f9f7 320
<> 144:ef7eb2e8f9f7 321 __attribute__ ((section(".after_vectors")))
<> 144:ef7eb2e8f9f7 322 void HardFault_Handler(void)
<> 144:ef7eb2e8f9f7 323 { while(1) {}
<> 144:ef7eb2e8f9f7 324 }
<> 144:ef7eb2e8f9f7 325
<> 144:ef7eb2e8f9f7 326 __attribute__ ((section(".after_vectors")))
<> 144:ef7eb2e8f9f7 327 void SVC_Handler(void)
<> 144:ef7eb2e8f9f7 328 { while(1) {}
<> 144:ef7eb2e8f9f7 329 }
<> 144:ef7eb2e8f9f7 330
<> 144:ef7eb2e8f9f7 331 __attribute__ ((section(".after_vectors")))
<> 144:ef7eb2e8f9f7 332 void PendSV_Handler(void)
<> 144:ef7eb2e8f9f7 333 { while(1) {}
<> 144:ef7eb2e8f9f7 334 }
<> 144:ef7eb2e8f9f7 335
<> 144:ef7eb2e8f9f7 336 __attribute__ ((section(".after_vectors")))
<> 144:ef7eb2e8f9f7 337 void SysTick_Handler(void)
<> 144:ef7eb2e8f9f7 338 { while(1) {}
<> 144:ef7eb2e8f9f7 339 }
<> 144:ef7eb2e8f9f7 340
<> 144:ef7eb2e8f9f7 341 //*****************************************************************************
<> 144:ef7eb2e8f9f7 342 //
<> 144:ef7eb2e8f9f7 343 // Processor ends up here if an unexpected interrupt occurs or a specific
<> 144:ef7eb2e8f9f7 344 // handler is not present in the application code.
<> 144:ef7eb2e8f9f7 345 //
<> 144:ef7eb2e8f9f7 346 //*****************************************************************************
<> 144:ef7eb2e8f9f7 347 __attribute__ ((section(".after_vectors")))
<> 144:ef7eb2e8f9f7 348 void IntDefaultHandler(void)
<> 144:ef7eb2e8f9f7 349 { while(1) {}
<> 144:ef7eb2e8f9f7 350 }
<> 144:ef7eb2e8f9f7 351