fix LPC812 PWM

Dependents:   IR_LED_Send

Fork of mbed-dev by mbed official

Committer:
bogdanm
Date:
Thu Oct 01 15:25:22 2015 +0300
Revision:
0:9b334a45a8ff
Initial commit on mbed-dev

Replaces mbed-src (now inactive)

Who changed what in which revision?

UserRevisionLine numberNew contents of line
bogdanm 0:9b334a45a8ff 1 //*****************************************************************************
bogdanm 0:9b334a45a8ff 2 // +--+
bogdanm 0:9b334a45a8ff 3 // | ++----+
bogdanm 0:9b334a45a8ff 4 // +-++ |
bogdanm 0:9b334a45a8ff 5 // | |
bogdanm 0:9b334a45a8ff 6 // +-+--+ |
bogdanm 0:9b334a45a8ff 7 // | +--+--+
bogdanm 0:9b334a45a8ff 8 // +----+ Copyright (c) 2012 Code Red Technologies Ltd.
bogdanm 0:9b334a45a8ff 9 //
bogdanm 0:9b334a45a8ff 10 // LPC407x_8x Microcontroller Startup code for use with Red Suite
bogdanm 0:9b334a45a8ff 11 //
bogdanm 0:9b334a45a8ff 12 // Version : 120624
bogdanm 0:9b334a45a8ff 13 //
bogdanm 0:9b334a45a8ff 14 // Software License Agreement
bogdanm 0:9b334a45a8ff 15 //
bogdanm 0:9b334a45a8ff 16 // The software is owned by Code Red Technologies and/or its suppliers, and is
bogdanm 0:9b334a45a8ff 17 // protected under applicable copyright laws. All rights are reserved. Any
bogdanm 0:9b334a45a8ff 18 // use in violation of the foregoing restrictions may subject the user to criminal
bogdanm 0:9b334a45a8ff 19 // sanctions under applicable laws, as well as to civil liability for the breach
bogdanm 0:9b334a45a8ff 20 // of the terms and conditions of this license.
bogdanm 0:9b334a45a8ff 21 //
bogdanm 0:9b334a45a8ff 22 // THIS SOFTWARE IS PROVIDED "AS IS". NO WARRANTIES, WHETHER EXPRESS, IMPLIED
bogdanm 0:9b334a45a8ff 23 // OR STATUTORY, INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF
bogdanm 0:9b334a45a8ff 24 // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE.
bogdanm 0:9b334a45a8ff 25 // USE OF THIS SOFTWARE FOR COMMERCIAL DEVELOPMENT AND/OR EDUCATION IS SUBJECT
bogdanm 0:9b334a45a8ff 26 // TO A CURRENT END USER LICENSE AGREEMENT (COMMERCIAL OR EDUCATIONAL) WITH
bogdanm 0:9b334a45a8ff 27 // CODE RED TECHNOLOGIES LTD.
bogdanm 0:9b334a45a8ff 28 //
bogdanm 0:9b334a45a8ff 29 //*****************************************************************************
bogdanm 0:9b334a45a8ff 30 #if defined (__cplusplus)
bogdanm 0:9b334a45a8ff 31 #ifdef __REDLIB__
bogdanm 0:9b334a45a8ff 32 #error Redlib does not support C++
bogdanm 0:9b334a45a8ff 33 #else
bogdanm 0:9b334a45a8ff 34 //*****************************************************************************
bogdanm 0:9b334a45a8ff 35 //
bogdanm 0:9b334a45a8ff 36 // The entry point for the C++ library startup
bogdanm 0:9b334a45a8ff 37 //
bogdanm 0:9b334a45a8ff 38 //*****************************************************************************
bogdanm 0:9b334a45a8ff 39 extern "C" {
bogdanm 0:9b334a45a8ff 40 extern void __libc_init_array(void);
bogdanm 0:9b334a45a8ff 41 }
bogdanm 0:9b334a45a8ff 42 #endif
bogdanm 0:9b334a45a8ff 43 #endif
bogdanm 0:9b334a45a8ff 44
bogdanm 0:9b334a45a8ff 45 #define WEAK __attribute__ ((weak))
bogdanm 0:9b334a45a8ff 46 #define ALIAS(f) __attribute__ ((weak, alias (#f)))
bogdanm 0:9b334a45a8ff 47
bogdanm 0:9b334a45a8ff 48 //#if defined (__USE_CMSIS)
bogdanm 0:9b334a45a8ff 49 #include "LPC407x_8x_177x_8x.h"
bogdanm 0:9b334a45a8ff 50 //#endif
bogdanm 0:9b334a45a8ff 51
bogdanm 0:9b334a45a8ff 52 //*****************************************************************************
bogdanm 0:9b334a45a8ff 53 #if defined (__cplusplus)
bogdanm 0:9b334a45a8ff 54 extern "C" {
bogdanm 0:9b334a45a8ff 55 #endif
bogdanm 0:9b334a45a8ff 56
bogdanm 0:9b334a45a8ff 57 //*****************************************************************************
bogdanm 0:9b334a45a8ff 58 //
bogdanm 0:9b334a45a8ff 59 // Forward declaration of the default handlers. These are aliased.
bogdanm 0:9b334a45a8ff 60 // When the application defines a handler (with the same name), this will
bogdanm 0:9b334a45a8ff 61 // automatically take precedence over these weak definitions
bogdanm 0:9b334a45a8ff 62 //
bogdanm 0:9b334a45a8ff 63 //*****************************************************************************
bogdanm 0:9b334a45a8ff 64 void ResetISR(void);
bogdanm 0:9b334a45a8ff 65 WEAK void NMI_Handler(void);
bogdanm 0:9b334a45a8ff 66 WEAK void HardFault_Handler(void);
bogdanm 0:9b334a45a8ff 67 WEAK void MemManage_Handler(void);
bogdanm 0:9b334a45a8ff 68 WEAK void BusFault_Handler(void);
bogdanm 0:9b334a45a8ff 69 WEAK void UsageFault_Handler(void);
bogdanm 0:9b334a45a8ff 70 WEAK void SVC_Handler(void);
bogdanm 0:9b334a45a8ff 71 WEAK void DebugMon_Handler(void);
bogdanm 0:9b334a45a8ff 72 WEAK void PendSV_Handler(void);
bogdanm 0:9b334a45a8ff 73 WEAK void SysTick_Handler(void);
bogdanm 0:9b334a45a8ff 74 WEAK void IntDefaultHandler(void);
bogdanm 0:9b334a45a8ff 75
bogdanm 0:9b334a45a8ff 76 //*****************************************************************************
bogdanm 0:9b334a45a8ff 77 //
bogdanm 0:9b334a45a8ff 78 // Forward declaration of the specific IRQ handlers. These are aliased
bogdanm 0:9b334a45a8ff 79 // to the IntDefaultHandler, which is a 'forever' loop. When the application
bogdanm 0:9b334a45a8ff 80 // defines a handler (with the same name), this will automatically take
bogdanm 0:9b334a45a8ff 81 // precedence over these weak definitions
bogdanm 0:9b334a45a8ff 82 //
bogdanm 0:9b334a45a8ff 83 //*****************************************************************************
bogdanm 0:9b334a45a8ff 84 void WDT_IRQHandler(void) ALIAS(IntDefaultHandler);
bogdanm 0:9b334a45a8ff 85 void TIMER0_IRQHandler(void) ALIAS(IntDefaultHandler);
bogdanm 0:9b334a45a8ff 86 void TIMER1_IRQHandler(void) ALIAS(IntDefaultHandler);
bogdanm 0:9b334a45a8ff 87 void TIMER2_IRQHandler(void) ALIAS(IntDefaultHandler);
bogdanm 0:9b334a45a8ff 88 void TIMER3_IRQHandler(void) ALIAS(IntDefaultHandler);
bogdanm 0:9b334a45a8ff 89 void UART0_IRQHandler(void) ALIAS(IntDefaultHandler);
bogdanm 0:9b334a45a8ff 90 void UART1_IRQHandler(void) ALIAS(IntDefaultHandler);
bogdanm 0:9b334a45a8ff 91 void UART2_IRQHandler(void) ALIAS(IntDefaultHandler);
bogdanm 0:9b334a45a8ff 92 void UART3_IRQHandler(void) ALIAS(IntDefaultHandler);
bogdanm 0:9b334a45a8ff 93 void PWM1_IRQHandler(void) ALIAS(IntDefaultHandler);
bogdanm 0:9b334a45a8ff 94 void I2C0_IRQHandler(void) ALIAS(IntDefaultHandler);
bogdanm 0:9b334a45a8ff 95 void I2C1_IRQHandler(void) ALIAS(IntDefaultHandler);
bogdanm 0:9b334a45a8ff 96 void I2C2_IRQHandler(void) ALIAS(IntDefaultHandler);
bogdanm 0:9b334a45a8ff 97 void SPI_IRQHandler(void) ALIAS(IntDefaultHandler);
bogdanm 0:9b334a45a8ff 98 void SSP0_IRQHandler(void) ALIAS(IntDefaultHandler);
bogdanm 0:9b334a45a8ff 99 void SSP1_IRQHandler(void) ALIAS(IntDefaultHandler);
bogdanm 0:9b334a45a8ff 100 void PLL0_IRQHandler(void) ALIAS(IntDefaultHandler);
bogdanm 0:9b334a45a8ff 101 void RTC_IRQHandler(void) ALIAS(IntDefaultHandler);
bogdanm 0:9b334a45a8ff 102 void EINT0_IRQHandler(void) ALIAS(IntDefaultHandler);
bogdanm 0:9b334a45a8ff 103 void EINT1_IRQHandler(void) ALIAS(IntDefaultHandler);
bogdanm 0:9b334a45a8ff 104 void EINT2_IRQHandler(void) ALIAS(IntDefaultHandler);
bogdanm 0:9b334a45a8ff 105 void EINT3_IRQHandler(void) ALIAS(IntDefaultHandler);
bogdanm 0:9b334a45a8ff 106 void ADC_IRQHandler(void) ALIAS(IntDefaultHandler);
bogdanm 0:9b334a45a8ff 107 void BOD_IRQHandler(void) ALIAS(IntDefaultHandler);
bogdanm 0:9b334a45a8ff 108 void USB_IRQHandler(void) ALIAS(IntDefaultHandler);
bogdanm 0:9b334a45a8ff 109 void CAN_IRQHandler(void) ALIAS(IntDefaultHandler);
bogdanm 0:9b334a45a8ff 110 void DMA_IRQHandler(void) ALIAS(IntDefaultHandler);
bogdanm 0:9b334a45a8ff 111 void I2S_IRQHandler(void) ALIAS(IntDefaultHandler);
bogdanm 0:9b334a45a8ff 112 void ENET_IRQHandler(void) ALIAS(IntDefaultHandler);
bogdanm 0:9b334a45a8ff 113 void RIT_IRQHandler(void) ALIAS(IntDefaultHandler);
bogdanm 0:9b334a45a8ff 114 void MCPWM_IRQHandler(void) ALIAS(IntDefaultHandler);
bogdanm 0:9b334a45a8ff 115 void QEI_IRQHandler(void) ALIAS(IntDefaultHandler);
bogdanm 0:9b334a45a8ff 116 void PLL1_IRQHandler(void) ALIAS(IntDefaultHandler);
bogdanm 0:9b334a45a8ff 117 void USBActivity_IRQHandler(void) ALIAS(IntDefaultHandler);
bogdanm 0:9b334a45a8ff 118 void CANActivity_IRQHandler(void) ALIAS(IntDefaultHandler);
bogdanm 0:9b334a45a8ff 119 void MCI_IRQHandler(void) ALIAS(IntDefaultHandler);
bogdanm 0:9b334a45a8ff 120 void UART4_IRQHandler(void) ALIAS(IntDefaultHandler);
bogdanm 0:9b334a45a8ff 121 void SSP2_IRQHandler(void) ALIAS(IntDefaultHandler);
bogdanm 0:9b334a45a8ff 122 void LCD_IRQHandler(void) ALIAS(IntDefaultHandler);
bogdanm 0:9b334a45a8ff 123 void GPIO_IRQHandler(void) ALIAS(IntDefaultHandler);
bogdanm 0:9b334a45a8ff 124 void PWM0_IRQHandler(void) ALIAS(IntDefaultHandler);
bogdanm 0:9b334a45a8ff 125 void EEPROM_IRQHandler(void) ALIAS(IntDefaultHandler);
bogdanm 0:9b334a45a8ff 126
bogdanm 0:9b334a45a8ff 127 //*****************************************************************************
bogdanm 0:9b334a45a8ff 128 //
bogdanm 0:9b334a45a8ff 129 // The entry point for the application.
bogdanm 0:9b334a45a8ff 130 // __main() is the entry point for Redlib based applications
bogdanm 0:9b334a45a8ff 131 // main() is the entry point for Newlib based applications
bogdanm 0:9b334a45a8ff 132 //
bogdanm 0:9b334a45a8ff 133 //*****************************************************************************
bogdanm 0:9b334a45a8ff 134 #if defined (__REDLIB__)
bogdanm 0:9b334a45a8ff 135 extern void __main(void);
bogdanm 0:9b334a45a8ff 136 #endif
bogdanm 0:9b334a45a8ff 137 extern int main(void);
bogdanm 0:9b334a45a8ff 138 //*****************************************************************************
bogdanm 0:9b334a45a8ff 139 //
bogdanm 0:9b334a45a8ff 140 // External declaration for the pointer to the stack top from the Linker Script
bogdanm 0:9b334a45a8ff 141 //
bogdanm 0:9b334a45a8ff 142 //*****************************************************************************
bogdanm 0:9b334a45a8ff 143 extern void _vStackTop(void);
bogdanm 0:9b334a45a8ff 144
bogdanm 0:9b334a45a8ff 145 //*****************************************************************************
bogdanm 0:9b334a45a8ff 146 #if defined (__cplusplus)
bogdanm 0:9b334a45a8ff 147 } // extern "C"
bogdanm 0:9b334a45a8ff 148 #endif
bogdanm 0:9b334a45a8ff 149 //*****************************************************************************
bogdanm 0:9b334a45a8ff 150 //
bogdanm 0:9b334a45a8ff 151 // The vector table.
bogdanm 0:9b334a45a8ff 152 // This relies on the linker script to place at correct location in memory.
bogdanm 0:9b334a45a8ff 153 //
bogdanm 0:9b334a45a8ff 154 //*****************************************************************************
bogdanm 0:9b334a45a8ff 155 extern void (* const g_pfnVectors[])(void);
bogdanm 0:9b334a45a8ff 156 __attribute__ ((section(".isr_vector")))
bogdanm 0:9b334a45a8ff 157 void (* const g_pfnVectors[])(void) = {
bogdanm 0:9b334a45a8ff 158 // Core Level - CM3
bogdanm 0:9b334a45a8ff 159 &_vStackTop, // The initial stack pointer
bogdanm 0:9b334a45a8ff 160 ResetISR, // The reset handler
bogdanm 0:9b334a45a8ff 161 NMI_Handler, // The NMI handler
bogdanm 0:9b334a45a8ff 162 HardFault_Handler, // The hard fault handler
bogdanm 0:9b334a45a8ff 163 MemManage_Handler, // The MPU fault handler
bogdanm 0:9b334a45a8ff 164 BusFault_Handler, // The bus fault handler
bogdanm 0:9b334a45a8ff 165 UsageFault_Handler, // The usage fault handler
bogdanm 0:9b334a45a8ff 166 0, // Reserved
bogdanm 0:9b334a45a8ff 167 0, // Reserved
bogdanm 0:9b334a45a8ff 168 0, // Reserved
bogdanm 0:9b334a45a8ff 169 0, // Reserved
bogdanm 0:9b334a45a8ff 170 SVC_Handler, // SVCall handler
bogdanm 0:9b334a45a8ff 171 DebugMon_Handler, // Debug monitor handler
bogdanm 0:9b334a45a8ff 172 0, // Reserved
bogdanm 0:9b334a45a8ff 173 PendSV_Handler, // The PendSV handler
bogdanm 0:9b334a45a8ff 174 SysTick_Handler, // The SysTick handler
bogdanm 0:9b334a45a8ff 175
bogdanm 0:9b334a45a8ff 176 // Chip Level - LPC17
bogdanm 0:9b334a45a8ff 177 WDT_IRQHandler, // 16, 0x40 - WDT
bogdanm 0:9b334a45a8ff 178 TIMER0_IRQHandler, // 17, 0x44 - TIMER0
bogdanm 0:9b334a45a8ff 179 TIMER1_IRQHandler, // 18, 0x48 - TIMER1
bogdanm 0:9b334a45a8ff 180 TIMER2_IRQHandler, // 19, 0x4c - TIMER2
bogdanm 0:9b334a45a8ff 181 TIMER3_IRQHandler, // 20, 0x50 - TIMER3
bogdanm 0:9b334a45a8ff 182 UART0_IRQHandler, // 21, 0x54 - UART0
bogdanm 0:9b334a45a8ff 183 UART1_IRQHandler, // 22, 0x58 - UART1
bogdanm 0:9b334a45a8ff 184 UART2_IRQHandler, // 23, 0x5c - UART2
bogdanm 0:9b334a45a8ff 185 UART3_IRQHandler, // 24, 0x60 - UART3
bogdanm 0:9b334a45a8ff 186 PWM1_IRQHandler, // 25, 0x64 - PWM1
bogdanm 0:9b334a45a8ff 187 I2C0_IRQHandler, // 26, 0x68 - I2C0
bogdanm 0:9b334a45a8ff 188 I2C1_IRQHandler, // 27, 0x6c - I2C1
bogdanm 0:9b334a45a8ff 189 I2C2_IRQHandler, // 28, 0x70 - I2C2
bogdanm 0:9b334a45a8ff 190 IntDefaultHandler, // 29, Not used
bogdanm 0:9b334a45a8ff 191 SSP0_IRQHandler, // 30, 0x78 - SSP0
bogdanm 0:9b334a45a8ff 192 SSP1_IRQHandler, // 31, 0x7c - SSP1
bogdanm 0:9b334a45a8ff 193 PLL0_IRQHandler, // 32, 0x80 - PLL0 (Main PLL)
bogdanm 0:9b334a45a8ff 194 RTC_IRQHandler, // 33, 0x84 - RTC
bogdanm 0:9b334a45a8ff 195 EINT0_IRQHandler, // 34, 0x88 - EINT0
bogdanm 0:9b334a45a8ff 196 EINT1_IRQHandler, // 35, 0x8c - EINT1
bogdanm 0:9b334a45a8ff 197 EINT2_IRQHandler, // 36, 0x90 - EINT2
bogdanm 0:9b334a45a8ff 198 EINT3_IRQHandler, // 37, 0x94 - EINT3
bogdanm 0:9b334a45a8ff 199 ADC_IRQHandler, // 38, 0x98 - ADC
bogdanm 0:9b334a45a8ff 200 BOD_IRQHandler, // 39, 0x9c - BOD
bogdanm 0:9b334a45a8ff 201 USB_IRQHandler, // 40, 0xA0 - USB
bogdanm 0:9b334a45a8ff 202 CAN_IRQHandler, // 41, 0xa4 - CAN
bogdanm 0:9b334a45a8ff 203 DMA_IRQHandler, // 42, 0xa8 - GP DMA
bogdanm 0:9b334a45a8ff 204 I2S_IRQHandler, // 43, 0xac - I2S
bogdanm 0:9b334a45a8ff 205 ENET_IRQHandler, // 44, 0xb0 - Ethernet
bogdanm 0:9b334a45a8ff 206 MCI_IRQHandler, // 45, 0xb4 - SD/MMC card I/F
bogdanm 0:9b334a45a8ff 207 MCPWM_IRQHandler, // 46, 0xb8 - Motor Control PWM
bogdanm 0:9b334a45a8ff 208 QEI_IRQHandler, // 47, 0xbc - Quadrature Encoder
bogdanm 0:9b334a45a8ff 209 PLL1_IRQHandler, // 48, 0xc0 - PLL1 (USB PLL)
bogdanm 0:9b334a45a8ff 210 USBActivity_IRQHandler, // 49, 0xc4 - USB Activity interrupt to wakeup
bogdanm 0:9b334a45a8ff 211 CANActivity_IRQHandler, // 50, 0xc8 - CAN Activity interrupt to wakeup
bogdanm 0:9b334a45a8ff 212 UART4_IRQHandler, // 51, 0xcc - UART4
bogdanm 0:9b334a45a8ff 213
bogdanm 0:9b334a45a8ff 214 SSP2_IRQHandler, // 52, 0xd0 - SSP2
bogdanm 0:9b334a45a8ff 215 LCD_IRQHandler, // 53, 0xd4 - LCD
bogdanm 0:9b334a45a8ff 216 GPIO_IRQHandler, // 54, 0xd8 - GPIO
bogdanm 0:9b334a45a8ff 217 PWM0_IRQHandler, // 55, 0xdc - PWM0
bogdanm 0:9b334a45a8ff 218 EEPROM_IRQHandler, // 56, 0xe0 - EEPROM
bogdanm 0:9b334a45a8ff 219
bogdanm 0:9b334a45a8ff 220 };
bogdanm 0:9b334a45a8ff 221
bogdanm 0:9b334a45a8ff 222 //*****************************************************************************
bogdanm 0:9b334a45a8ff 223 // Functions to carry out the initialization of RW and BSS data sections. These
bogdanm 0:9b334a45a8ff 224 // are written as separate functions rather than being inlined within the
bogdanm 0:9b334a45a8ff 225 // ResetISR() function in order to cope with MCUs with multiple banks of
bogdanm 0:9b334a45a8ff 226 // memory.
bogdanm 0:9b334a45a8ff 227 //*****************************************************************************
bogdanm 0:9b334a45a8ff 228 __attribute__ ((section(".after_vectors")))
bogdanm 0:9b334a45a8ff 229 void data_init(unsigned int romstart, unsigned int start, unsigned int len) {
bogdanm 0:9b334a45a8ff 230 unsigned int *pulDest = (unsigned int*) start;
bogdanm 0:9b334a45a8ff 231 unsigned int *pulSrc = (unsigned int*) romstart;
bogdanm 0:9b334a45a8ff 232 unsigned int loop;
bogdanm 0:9b334a45a8ff 233 for (loop = 0; loop < len; loop = loop + 4)
bogdanm 0:9b334a45a8ff 234 *pulDest++ = *pulSrc++;
bogdanm 0:9b334a45a8ff 235 }
bogdanm 0:9b334a45a8ff 236
bogdanm 0:9b334a45a8ff 237 __attribute__ ((section(".after_vectors")))
bogdanm 0:9b334a45a8ff 238 void bss_init(unsigned int start, unsigned int len) {
bogdanm 0:9b334a45a8ff 239 unsigned int *pulDest = (unsigned int*) start;
bogdanm 0:9b334a45a8ff 240 unsigned int loop;
bogdanm 0:9b334a45a8ff 241 for (loop = 0; loop < len; loop = loop + 4)
bogdanm 0:9b334a45a8ff 242 *pulDest++ = 0;
bogdanm 0:9b334a45a8ff 243 }
bogdanm 0:9b334a45a8ff 244
bogdanm 0:9b334a45a8ff 245 //*****************************************************************************
bogdanm 0:9b334a45a8ff 246 // The following symbols are constructs generated by the linker, indicating
bogdanm 0:9b334a45a8ff 247 // the location of various points in the "Global Section Table". This table is
bogdanm 0:9b334a45a8ff 248 // created by the linker via the Code Red managed linker script mechanism. It
bogdanm 0:9b334a45a8ff 249 // contains the load address, execution address and length of each RW data
bogdanm 0:9b334a45a8ff 250 // section and the execution and length of each BSS (zero initialized) section.
bogdanm 0:9b334a45a8ff 251 //*****************************************************************************
bogdanm 0:9b334a45a8ff 252 extern unsigned int __data_section_table;
bogdanm 0:9b334a45a8ff 253 extern unsigned int __data_section_table_end;
bogdanm 0:9b334a45a8ff 254 extern unsigned int __bss_section_table;
bogdanm 0:9b334a45a8ff 255 extern unsigned int __bss_section_table_end;
bogdanm 0:9b334a45a8ff 256
bogdanm 0:9b334a45a8ff 257 //*****************************************************************************
bogdanm 0:9b334a45a8ff 258 // Reset entry point for your code.
bogdanm 0:9b334a45a8ff 259 // Sets up a simple runtime environment and initializes the C/C++
bogdanm 0:9b334a45a8ff 260 // library.
bogdanm 0:9b334a45a8ff 261 //*****************************************************************************
bogdanm 0:9b334a45a8ff 262
bogdanm 0:9b334a45a8ff 263 extern "C" void software_init_hook(void) __attribute__((weak));
bogdanm 0:9b334a45a8ff 264
bogdanm 0:9b334a45a8ff 265 __attribute__ ((section(".after_vectors")))
bogdanm 0:9b334a45a8ff 266 void
bogdanm 0:9b334a45a8ff 267 ResetISR(void) {
bogdanm 0:9b334a45a8ff 268
bogdanm 0:9b334a45a8ff 269 //
bogdanm 0:9b334a45a8ff 270 // Copy the data sections from flash to SRAM.
bogdanm 0:9b334a45a8ff 271 //
bogdanm 0:9b334a45a8ff 272 unsigned int LoadAddr, ExeAddr, SectionLen;
bogdanm 0:9b334a45a8ff 273 unsigned int *SectionTableAddr;
bogdanm 0:9b334a45a8ff 274
bogdanm 0:9b334a45a8ff 275 // Load base address of Global Section Table
bogdanm 0:9b334a45a8ff 276 SectionTableAddr = &__data_section_table;
bogdanm 0:9b334a45a8ff 277
bogdanm 0:9b334a45a8ff 278 // Copy the data sections from flash to SRAM.
bogdanm 0:9b334a45a8ff 279 while (SectionTableAddr < &__data_section_table_end) {
bogdanm 0:9b334a45a8ff 280 LoadAddr = *SectionTableAddr++;
bogdanm 0:9b334a45a8ff 281 ExeAddr = *SectionTableAddr++;
bogdanm 0:9b334a45a8ff 282 SectionLen = *SectionTableAddr++;
bogdanm 0:9b334a45a8ff 283 data_init(LoadAddr, ExeAddr, SectionLen);
bogdanm 0:9b334a45a8ff 284 }
bogdanm 0:9b334a45a8ff 285 // At this point, SectionTableAddr = &__bss_section_table;
bogdanm 0:9b334a45a8ff 286 // Zero fill the bss segment
bogdanm 0:9b334a45a8ff 287 while (SectionTableAddr < &__bss_section_table_end) {
bogdanm 0:9b334a45a8ff 288 ExeAddr = *SectionTableAddr++;
bogdanm 0:9b334a45a8ff 289 SectionLen = *SectionTableAddr++;
bogdanm 0:9b334a45a8ff 290 bss_init(ExeAddr, SectionLen);
bogdanm 0:9b334a45a8ff 291 }
bogdanm 0:9b334a45a8ff 292
bogdanm 0:9b334a45a8ff 293 #if defined (__VFP_FP__) && !defined (__SOFTFP__)
bogdanm 0:9b334a45a8ff 294 /*
bogdanm 0:9b334a45a8ff 295 * Code to enable the Cortex-M4 FPU only included
bogdanm 0:9b334a45a8ff 296 * if appropriate build options have been selected.
bogdanm 0:9b334a45a8ff 297 * Code taken from Section 7.1, Cortex-M4 TRM (DDI0439C)
bogdanm 0:9b334a45a8ff 298 */
bogdanm 0:9b334a45a8ff 299 // Read CPACR (located at address 0xE000ED88)
bogdanm 0:9b334a45a8ff 300 // Set bits 20-23 to enable CP10 and CP11 coprocessors
bogdanm 0:9b334a45a8ff 301 // Write back the modified value to the CPACR
bogdanm 0:9b334a45a8ff 302 asm volatile ("LDR.W R0, =0xE000ED88\n\t"
bogdanm 0:9b334a45a8ff 303 "LDR R1, [R0]\n\t"
bogdanm 0:9b334a45a8ff 304 "ORR R1, R1, #(0xF << 20)\n\t"
bogdanm 0:9b334a45a8ff 305 "STR R1, [R0]");
bogdanm 0:9b334a45a8ff 306 #endif // (__VFP_FP__) && !(__SOFTFP__)
bogdanm 0:9b334a45a8ff 307
bogdanm 0:9b334a45a8ff 308 // Check to see if we are running the code from a non-zero
bogdanm 0:9b334a45a8ff 309 // address (eg RAM, external flash), in which case we need
bogdanm 0:9b334a45a8ff 310 // to modify the VTOR register to tell the CPU that the
bogdanm 0:9b334a45a8ff 311 // vector table is located at a non-0x0 address.
bogdanm 0:9b334a45a8ff 312
bogdanm 0:9b334a45a8ff 313 // Note that we do not use the CMSIS register access mechanism,
bogdanm 0:9b334a45a8ff 314 // as there is no guarantee that the project has been configured
bogdanm 0:9b334a45a8ff 315 // to use CMSIS.
bogdanm 0:9b334a45a8ff 316 unsigned int * pSCB_VTOR = (unsigned int *) 0xE000ED08;
bogdanm 0:9b334a45a8ff 317 if ((unsigned int *)g_pfnVectors!=(unsigned int *) 0x00000000) {
bogdanm 0:9b334a45a8ff 318 // CMSIS : SCB->VTOR = <address of vector table>
bogdanm 0:9b334a45a8ff 319 *pSCB_VTOR = (unsigned int)g_pfnVectors;
bogdanm 0:9b334a45a8ff 320 }
bogdanm 0:9b334a45a8ff 321
bogdanm 0:9b334a45a8ff 322 //#ifdef __USE_CMSIS
bogdanm 0:9b334a45a8ff 323 SystemInit();
bogdanm 0:9b334a45a8ff 324 //#endif
bogdanm 0:9b334a45a8ff 325 if (software_init_hook) // give control to the RTOS
bogdanm 0:9b334a45a8ff 326 software_init_hook(); // this will also call __libc_init_array
bogdanm 0:9b334a45a8ff 327 else {
bogdanm 0:9b334a45a8ff 328 #if defined (__cplusplus)
bogdanm 0:9b334a45a8ff 329 //
bogdanm 0:9b334a45a8ff 330 // Call C++ library initialisation
bogdanm 0:9b334a45a8ff 331 //
bogdanm 0:9b334a45a8ff 332 __libc_init_array();
bogdanm 0:9b334a45a8ff 333 #endif
bogdanm 0:9b334a45a8ff 334
bogdanm 0:9b334a45a8ff 335 #if defined (__REDLIB__)
bogdanm 0:9b334a45a8ff 336 // Call the Redlib library, which in turn calls main()
bogdanm 0:9b334a45a8ff 337 __main() ;
bogdanm 0:9b334a45a8ff 338 #else
bogdanm 0:9b334a45a8ff 339 main();
bogdanm 0:9b334a45a8ff 340 #endif
bogdanm 0:9b334a45a8ff 341 }
bogdanm 0:9b334a45a8ff 342 //
bogdanm 0:9b334a45a8ff 343 // main() shouldn't return, but if it does, we'll just enter an infinite loop
bogdanm 0:9b334a45a8ff 344 //
bogdanm 0:9b334a45a8ff 345 while (1) {
bogdanm 0:9b334a45a8ff 346 ;
bogdanm 0:9b334a45a8ff 347 }
bogdanm 0:9b334a45a8ff 348 }
bogdanm 0:9b334a45a8ff 349
bogdanm 0:9b334a45a8ff 350 //*****************************************************************************
bogdanm 0:9b334a45a8ff 351 // Default exception handlers. Override the ones here by defining your own
bogdanm 0:9b334a45a8ff 352 // handler routines in your application code.
bogdanm 0:9b334a45a8ff 353 //*****************************************************************************
bogdanm 0:9b334a45a8ff 354 __attribute__ ((section(".after_vectors")))
bogdanm 0:9b334a45a8ff 355 void NMI_Handler(void)
bogdanm 0:9b334a45a8ff 356 {
bogdanm 0:9b334a45a8ff 357 while(1)
bogdanm 0:9b334a45a8ff 358 {
bogdanm 0:9b334a45a8ff 359 }
bogdanm 0:9b334a45a8ff 360 }
bogdanm 0:9b334a45a8ff 361 __attribute__ ((section(".after_vectors")))
bogdanm 0:9b334a45a8ff 362 void HardFault_Handler(void)
bogdanm 0:9b334a45a8ff 363 {
bogdanm 0:9b334a45a8ff 364 while(1)
bogdanm 0:9b334a45a8ff 365 {
bogdanm 0:9b334a45a8ff 366 }
bogdanm 0:9b334a45a8ff 367 }
bogdanm 0:9b334a45a8ff 368 __attribute__ ((section(".after_vectors")))
bogdanm 0:9b334a45a8ff 369 void MemManage_Handler(void)
bogdanm 0:9b334a45a8ff 370 {
bogdanm 0:9b334a45a8ff 371 while(1)
bogdanm 0:9b334a45a8ff 372 {
bogdanm 0:9b334a45a8ff 373 }
bogdanm 0:9b334a45a8ff 374 }
bogdanm 0:9b334a45a8ff 375 __attribute__ ((section(".after_vectors")))
bogdanm 0:9b334a45a8ff 376 void BusFault_Handler(void)
bogdanm 0:9b334a45a8ff 377 {
bogdanm 0:9b334a45a8ff 378 while(1)
bogdanm 0:9b334a45a8ff 379 {
bogdanm 0:9b334a45a8ff 380 }
bogdanm 0:9b334a45a8ff 381 }
bogdanm 0:9b334a45a8ff 382 __attribute__ ((section(".after_vectors")))
bogdanm 0:9b334a45a8ff 383 void UsageFault_Handler(void)
bogdanm 0:9b334a45a8ff 384 {
bogdanm 0:9b334a45a8ff 385 while(1)
bogdanm 0:9b334a45a8ff 386 {
bogdanm 0:9b334a45a8ff 387 }
bogdanm 0:9b334a45a8ff 388 }
bogdanm 0:9b334a45a8ff 389 __attribute__ ((section(".after_vectors")))
bogdanm 0:9b334a45a8ff 390 void SVC_Handler(void)
bogdanm 0:9b334a45a8ff 391 {
bogdanm 0:9b334a45a8ff 392 while(1)
bogdanm 0:9b334a45a8ff 393 {
bogdanm 0:9b334a45a8ff 394 }
bogdanm 0:9b334a45a8ff 395 }
bogdanm 0:9b334a45a8ff 396 __attribute__ ((section(".after_vectors")))
bogdanm 0:9b334a45a8ff 397 void DebugMon_Handler(void)
bogdanm 0:9b334a45a8ff 398 {
bogdanm 0:9b334a45a8ff 399 while(1)
bogdanm 0:9b334a45a8ff 400 {
bogdanm 0:9b334a45a8ff 401 }
bogdanm 0:9b334a45a8ff 402 }
bogdanm 0:9b334a45a8ff 403 __attribute__ ((section(".after_vectors")))
bogdanm 0:9b334a45a8ff 404 void PendSV_Handler(void)
bogdanm 0:9b334a45a8ff 405 {
bogdanm 0:9b334a45a8ff 406 while(1)
bogdanm 0:9b334a45a8ff 407 {
bogdanm 0:9b334a45a8ff 408 }
bogdanm 0:9b334a45a8ff 409 }
bogdanm 0:9b334a45a8ff 410 __attribute__ ((section(".after_vectors")))
bogdanm 0:9b334a45a8ff 411 void SysTick_Handler(void)
bogdanm 0:9b334a45a8ff 412 {
bogdanm 0:9b334a45a8ff 413 while(1)
bogdanm 0:9b334a45a8ff 414 {
bogdanm 0:9b334a45a8ff 415 }
bogdanm 0:9b334a45a8ff 416 }
bogdanm 0:9b334a45a8ff 417
bogdanm 0:9b334a45a8ff 418 //*****************************************************************************
bogdanm 0:9b334a45a8ff 419 //
bogdanm 0:9b334a45a8ff 420 // Processor ends up here if an unexpected interrupt occurs or a specific
bogdanm 0:9b334a45a8ff 421 // handler is not present in the application code.
bogdanm 0:9b334a45a8ff 422 //
bogdanm 0:9b334a45a8ff 423 //*****************************************************************************
bogdanm 0:9b334a45a8ff 424 __attribute__ ((section(".after_vectors")))
bogdanm 0:9b334a45a8ff 425 void IntDefaultHandler(void)
bogdanm 0:9b334a45a8ff 426 {
bogdanm 0:9b334a45a8ff 427 while(1)
bogdanm 0:9b334a45a8ff 428 {
bogdanm 0:9b334a45a8ff 429 }
bogdanm 0:9b334a45a8ff 430 }
bogdanm 0:9b334a45a8ff 431
bogdanm 0:9b334a45a8ff 432 #include <stdlib.h>
bogdanm 0:9b334a45a8ff 433
bogdanm 0:9b334a45a8ff 434 void *operator new(size_t size) {return malloc(size);}
bogdanm 0:9b334a45a8ff 435 void *operator new[](size_t size){return malloc(size);}
bogdanm 0:9b334a45a8ff 436
bogdanm 0:9b334a45a8ff 437 void operator delete(void *p) {free(p);}
bogdanm 0:9b334a45a8ff 438 void operator delete[](void *p) {free(p);}