##// END OF EJS Templates
Added ARM CMSIS for fast math and circle drawing function for ili9328 driver.
Added ARM CMSIS for fast math and circle drawing function for ili9328 driver.

File last commit:

r18:bd9ab647f70a default
r41:27c5438a4566 dev_alexis
Show More
startup_LPC17xx.c
299 lines | 14.5 KiB | text/x-c | CLexer
/****************************************************************************//**
* @file : startup_LPC17xx.c
* @brief : CMSIS Cortex-M3 Core Device Startup File
* @version : V1.01
* @date : 4. Feb. 2009
*
*----------------------------------------------------------------------------
*
* Copyright (C) 2009 ARM Limited. All rights reserved.
*
* ARM Limited (ARM) is supplying this software for use with Cortex-Mx
* processor based microcontrollers. This file can be freely distributed
* within development tools that are supporting such ARM based processors.
*
* THIS SOFTWARE IS PROVIDED "AS IS". NO WARRANTIES, WHETHER EXPRESS, IMPLIED
* OR STATUTORY, INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE.
* ARM SHALL NOT, IN ANY CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR
* CONSEQUENTIAL DAMAGES, FOR ANY REASON WHATSOEVER.
*
******************************************************************************/
// Mod by nio for the .fastcode part
#include "LPC17xx.h"
#define WEAK __attribute__ ((weak))
//*****************************************************************************
//
// Forward declaration of the default fault handlers.
//
//*****************************************************************************
/* System exception vector handler */
void WEAK Reset_Handler(void); /* Reset Handler */
void WEAK NMI_Handler(void); /* NMI Handler */
void WEAK HardFault_Handler(void); /* Hard Fault Handler */
void WEAK MemManage_Handler(void); /* MPU Fault Handler */
void WEAK BusFault_Handler(void); /* Bus Fault Handler */
void WEAK UsageFault_Handler(void); /* Usage Fault Handler */
void WEAK SVC_Handler(void); /* SVCall Handler */
void WEAK DebugMon_Handler(void); /* Debug Monitor Handler */
void WEAK PendSV_Handler(void); /* PendSV Handler */
void WEAK SysTick_Handler(void); /* SysTick Handler */
/* External interrupt vector handler */
void WEAK WDT_IRQHandler(void); /* Watchdog Timer */
void WEAK TIMER0_IRQHandler(void); /* Timer0 */
void WEAK TIMER1_IRQHandler(void); /* Timer1 */
void WEAK TIMER2_IRQHandler(void); /* Timer2 */
void WEAK TIMER3_IRQHandler(void); /* Timer3 */
void WEAK UART0_IRQHandler(void); /* UART0 */
void WEAK UART1_IRQHandler(void); /* UART1 */
void WEAK UART2_IRQHandler(void); /* UART2 */
void WEAK UART3_IRQHandler(void); /* UART3 */
void WEAK PWM1_IRQHandler(void); /* PWM1 */
void WEAK I2C0_IRQHandler(void); /* I2C0 */
void WEAK I2C1_IRQHandler(void); /* I2C1 */
void WEAK I2C2_IRQHandler(void); /* I2C2 */
void WEAK SPI_IRQHandler(void); /* SPI */
void WEAK SSP0_IRQHandler(void); /* SSP0 */
void WEAK SSP1_IRQHandler(void); /* SSP1 */
void WEAK PLL0_IRQHandler(void); /* PLL0 (Main PLL) */
void WEAK RTC_IRQHandler(void); /* Real Time Clock */
void WEAK EINT0_IRQHandler(void); /* External Interrupt 0 */
void WEAK EINT1_IRQHandler(void); /* External Interrupt 1 */
void WEAK EINT2_IRQHandler(void); /* External Interrupt 2 */
void WEAK EINT3_IRQHandler(void); /* External Interrupt 3 */
void WEAK ADC_IRQHandler(void); /* A/D Converter */
void WEAK BOD_IRQHandler(void); /* Brown Out Detect */
void WEAK USB_IRQHandler(void); /* USB */
void WEAK CAN_IRQHandler(void); /* CAN */
void WEAK DMA_IRQHandler(void); /* GP DMA */
void WEAK I2S_IRQHandler(void); /* I2S */
void WEAK ENET_IRQHandler(void); /* Ethernet */
void WEAK RIT_IRQHandler(void); /* Repetitive Interrupt Timer */
void WEAK MCPWM_IRQHandler(void); /* Motor Control PWM */
void WEAK QEI_IRQHandler(void); /* Quadrature Encoder Interface */
void WEAK PLL1_IRQHandler(void); /* PLL1 (USB PLL) */
/* Exported types --------------------------------------------------------------*/
/* Exported constants --------------------------------------------------------*/
extern unsigned long _etext;
extern unsigned long _sidata; /* start address for the initialization values of the .data section. defined in linker script */
extern unsigned long _sdata; /* start address for the .data section. defined in linker script */
extern unsigned long _edata; /* end address for the .data section. defined in linker script */
extern unsigned long _sitestdata; /* start address for the initialization values of the .data section. defined in linker script */
extern unsigned long _stestdata; /* start address for the .data section. defined in linker script */
extern unsigned long _etestdata;
extern unsigned long _sifastcode; /* start address for the initialization values of the .fastcode section. defined in linker script */
extern unsigned long _sfastcode; /* start address for the .fastcode section. defined in linker script */
extern unsigned long _efastcode; /* end address for the .fastcode section. defined in linker script */
extern unsigned long _sbss; /* start address for the .bss section. defined in linker script */
extern unsigned long _ebss; /* end address for the .bss section. defined in linker script */
extern void _estack; /* init value for the stack pointer. defined in linker script */
extern int bsp_init();
/* Private typedef -----------------------------------------------------------*/
/* function prototypes ------------------------------------------------------*/
void Reset_Handler(void) __attribute__((__interrupt__));
extern int main(void);
/******************************************************************************
*
* The minimal vector table for a Cortex M3. Note that the proper constructs
* must be placed on this to ensure that it ends up at physical address
* 0x0000.0000.
*
******************************************************************************/
#define STACK_SIZE 0x00000800 /*2kO*/
__attribute__ ((section(".stackarea")))
/* static */ unsigned long pulStack[STACK_SIZE];
__attribute__ ((section(".isr_vector")))
void (* const g_pfnVectors[])(void) =
{
/* &_estack, // The initial stack pointer */
(void (*)(void))((unsigned long)pulStack + sizeof(pulStack)), // The initial stack pointer
Reset_Handler, /* Reset Handler */
NMI_Handler, /* NMI Handler */
HardFault_Handler, /* Hard Fault Handler */
MemManage_Handler, /* MPU Fault Handler */
BusFault_Handler, /* Bus Fault Handler */
UsageFault_Handler, /* Usage Fault Handler */
0, /* Reserved */
0, /* Reserved */
0, /* Reserved */
0, /* Reserved */
SVC_Handler, /* SVCall Handler */
DebugMon_Handler, /* Debug Monitor Handler */
0, /* Reserved */
PendSV_Handler, /* PendSV Handler */
SysTick_Handler, /* SysTick Handler */
// External Interrupts
WDT_IRQHandler, /* Watchdog Timer */
TIMER0_IRQHandler, /* Timer0 */
TIMER1_IRQHandler, /* Timer1 */
TIMER2_IRQHandler, /* Timer2 */
TIMER3_IRQHandler, /* Timer3 */
UART0_IRQHandler, /* UART0 */
UART1_IRQHandler, /* UART1 */
UART2_IRQHandler, /* UART2 */
UART3_IRQHandler, /* UART3 */
PWM1_IRQHandler, /* PWM1 */
I2C0_IRQHandler, /* I2C0 */
I2C1_IRQHandler, /* I2C1 */
I2C2_IRQHandler, /* I2C2 */
SPI_IRQHandler, /* SPI */
SSP0_IRQHandler, /* SSP0 */
SSP1_IRQHandler, /* SSP1 */
PLL0_IRQHandler, /* PLL0 (Main PLL) */
RTC_IRQHandler, /* Real Time Clock */
EINT0_IRQHandler, /* External Interrupt 0 */
EINT1_IRQHandler, /* External Interrupt 1 */
EINT2_IRQHandler, /* External Interrupt 2 */
EINT3_IRQHandler, /* External Interrupt 3 */
ADC_IRQHandler, /* A/D Converter */
BOD_IRQHandler, /* Brown Out Detect */
USB_IRQHandler, /* USB */
CAN_IRQHandler, /* CAN */
DMA_IRQHandler, /* GP DMA */
I2S_IRQHandler, /* I2S */
ENET_IRQHandler, /* Ethernet */
RIT_IRQHandler, /* Repetitive Interrupt Timer */
MCPWM_IRQHandler, /* Motor Control PWM */
QEI_IRQHandler, /* Quadrature Encoder Interface */
PLL1_IRQHandler, /* PLL1 (USB PLL) */
};
/*******************************************************************************
* Function Name : Reset_Handler
* Description : This is the code that gets called when the processor first starts execution
* following a reset event. Only the absolutely necessary set is performed,
* after which the application supplied main() routine is called.
* Input :
* Output :
* Return :
*******************************************************************************/
void Reset_Handler(void)
{
SystemInit();
unsigned long *pulDest;
unsigned long *pulSrc;
//
// Copy the data segment initializers from flash to SRAM in ROM mode
//
if (&_sidata != &_sdata) { // only if needed
pulSrc = &_sidata;
for(pulDest = &_sdata; pulDest < &_edata; ) {
*(pulDest++) = *(pulSrc++);
}
}
if (&_sitestdata != &_stestdata) { // only if needed
pulSrc = &_sitestdata;
for(pulDest = &_stestdata; pulDest < &_etestdata; ) {
*(pulDest++) = *(pulSrc++);
}
}
// Copy the .fastcode code from ROM to SRAM
if (&_sifastcode != &_sfastcode) { // only if needed
pulSrc = &_sifastcode;
for(pulDest = &_sfastcode; pulDest < &_efastcode; ) {
*(pulDest++) = *(pulSrc++);
}
}
//
// Zero fill the bss segment.
//
for(pulDest = &_sbss; pulDest < &_ebss; )
{
*(pulDest++) = 0;
}
//
// Call the application's entry point.
//
bsp_init();
main();
}
//*****************************************************************************
//
// Provide weak aliases for each Exception handler to the Default_Handler.
// As they are weak aliases, any function with the same name will override
// this definition.
//
//*****************************************************************************
#pragma weak MemManage_Handler = Default_Handler /* MPU Fault Handler */
#pragma weak BusFault_Handler = Default_Handler /* Bus Fault Handler */
#pragma weak UsageFault_Handler = Default_Handler /* Usage Fault Handler */
#pragma weak SVC_Handler = Default_Handler /* SVCall Handler */
#pragma weak DebugMon_Handler = Default_Handler /* Debug Monitor Handler */
#pragma weak PendSV_Handler = Default_Handler /* PendSV Handler */
#pragma weak SysTick_Handler = Default_Handler /* SysTick Handler */
/* External interrupt vector handler */
#pragma weak WDT_IRQHandler = Default_Handler /* Watchdog Timer */
#pragma weak TIMER0_IRQHandler = Default_Handler /* Timer0 */
#pragma weak TIMER1_IRQHandler = Default_Handler /* Timer1 */
#pragma weak TIMER2_IRQHandler = Default_Handler /* Timer2 */
#pragma weak TIMER3_IRQHandler = Default_Handler /* Timer3 */
#pragma weak UART0_IRQHandler = Default_Handler /* UART0 */
#pragma weak UART1_IRQHandler = Default_Handler /* UART1 */
#pragma weak UART2_IRQHandler = Default_Handler /* UART2 */
#pragma weak UART3_IRQHandler = Default_Handler /* UART3 */
#pragma weak PWM1_IRQHandler = Default_Handler /* PWM1 */
#pragma weak I2C0_IRQHandler = Default_Handler /* I2C0 */
#pragma weak I2C1_IRQHandler = Default_Handler /* I2C1 */
#pragma weak I2C2_IRQHandler = Default_Handler /* I2C2 */
#pragma weak SPI_IRQHandler = Default_Handler /* SPI */
#pragma weak SSP0_IRQHandler = Default_Handler /* SSP0 */
#pragma weak SSP1_IRQHandler = Default_Handler /* SSP1 */
#pragma weak PLL0_IRQHandler = Default_Handler /* PLL0 (Main PLL) */
#pragma weak RTC_IRQHandler = Default_Handler /* Real Time Clock */
#pragma weak EINT0_IRQHandler = Default_Handler /* External Interrupt 0 */
#pragma weak EINT1_IRQHandler = Default_Handler /* External Interrupt 1 */
#pragma weak EINT2_IRQHandler = Default_Handler /* External Interrupt 2 */
#pragma weak EINT3_IRQHandler = Default_Handler /* External Interrupt 3 */
#pragma weak ADC_IRQHandler = Default_Handler /* A/D Converter */
#pragma weak BOD_IRQHandler = Default_Handler /* Brown Out Detect */
#pragma weak USB_IRQHandler = Default_Handler /* USB */
#pragma weak CAN_IRQHandler = Default_Handler /* CAN */
#pragma weak DMA_IRQHandler = Default_Handler /* GP DMA */
#pragma weak I2S_IRQHandler = Default_Handler /* I2S */
#pragma weak ENET_IRQHandler = Default_Handler /* Ethernet */
#pragma weak RIT_IRQHandler = Default_Handler /* Repetitive Interrupt Timer */
#pragma weak MCPWM_IRQHandler = Default_Handler /* Motor Control PWM */
#pragma weak QEI_IRQHandler = Default_Handler /* Quadrature Encoder Interface */
#pragma weak PLL1_IRQHandler = Default_Handler /* PLL1 (USB PLL) */
//*****************************************************************************
//
// This is the code that gets called when the processor receives an unexpected
// interrupt. This simply enters an infinite loop, preserving the system state
// for examination by a debugger.
//
//*****************************************************************************
void Default_Handler(void) {
// Go into an infinite loop.
//
while (1) {
}
}