/*****************************************************************************/ /* startup_LPC17xx.s: Startup file for LPC17xx device series */ /*****************************************************************************/ /* Version: CodeSourcery Sourcery G++ Lite (with CS3) */ /*****************************************************************************/ /* //*** <<< Use Configuration Wizard in Context Menu >>> *** */ .cpu cortex-m3 .syntax unified /* // Stack Configuration // Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> // */ .equ Stack_Size, 0x00000100 .section ".stack", "w" .align 3 .globl __cs3_stack_mem .globl __stack_start .globl __cs3_stack_size __cs3_stack_mem: __stack_start: .if Stack_Size .space Stack_Size .endif .size __cs3_stack_mem, . - __cs3_stack_mem .set __cs3_stack_size, . - __cs3_stack_mem /* // Heap Configuration // Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> // */ .equ Heap_Size, 0x00001000 .section ".heap", "w" .align 3 .globl __cs3_heap_start .globl __cs3_heap_end __cs3_heap_start: .if Heap_Size .space Heap_Size .endif __cs3_heap_end: /* Vector Table */ .section ".cs3.interrupt_vector_mutable" .globl __cs3_interrupt_vector_cortex_m_mutable .type __cs3_interrupt_vector_cortex_m_mutable, %object __cs3_interrupt_vector_cortex_m_mutable: .long __cs3_stack /* Top of Stack */ .long __cs3_reset_cortex_m /* Reset Handler */ .long NMI_Handler /* NMI Handler */ .long HardFault_Handler /* Hard Fault Handler */ .long MemManage_Handler /* MPU Fault Handler */ .long BusFault_Handler /* Bus Fault Handler */ .long UsageFault_Handler /* Usage Fault Handler */ .long 0 /* Reserved */ .long 0 /* Reserved */ .long 0 /* Reserved */ .long 0 /* Reserved */ .long vPortSVCHandler /* SVCall Handler */ .long DebugMon_Handler /* Debug Monitor Handler */ .long 0 /* Reserved */ .long xPortPendSVHandler /* PendSV Handler */ .long xPortSysTickHandler /* SysTick Handler */ /* External Interrupts */ .long WDT_IRQHandler /* 16: Watchdog Timer */ .long TIMER0_IRQHandler /* 17: Timer0 */ .long TIMER1_IRQHandler /* 18: Timer1 */ .long TIMER2_IRQHandler /* 19: Timer2 */ .long TIMER3_IRQHandler /* 20: Timer3 */ .long UART0_IRQHandler /* 21: UART0 */ .long UART1_IRQHandler /* 22: UART1 */ .long UART2_IRQHandler /* 23: UART2 */ .long UART3_IRQHandler /* 24: UART3 */ .long PWM1_IRQHandler /* 25: PWM1 */ .long I2C0_IRQHandler /* 26: I2C0 */ .long I2C1_IRQHandler /* 27: I2C1 */ .long I2C2_IRQHandler /* 28: I2C2 */ .long SPI_IRQHandler /* 29: SPI */ .long SSP0_IRQHandler /* 30: SSP0 */ .long SSP1_IRQHandler /* 31: SSP1 */ .long PLL0_IRQHandler /* 32: PLL0 Lock (Main PLL) */ .long RTC_IRQHandler /* 33: Real Time Clock */ .long EINT0_IRQHandler /* 34: External Interrupt 0 */ .long EINT1_IRQHandler /* 35: External Interrupt 1 */ .long EINT2_IRQHandler /* 36: External Interrupt 2 */ .long EINT3_IRQHandler /* 37: External Interrupt 3 */ .long ADC_IRQHandler /* 38: A/D Converter */ .long BOD_IRQHandler /* 39: Brown-Out Detect */ .long USB_IRQHandler /* 40: USB */ .long CAN_IRQHandler /* 41: CAN */ .long DMA_IRQHandler /* 42: General Purpose DMA */ .long I2S_IRQHandler /* 43: I2S */ .long ENET_IRQHandler /* 44: Ethernet */ .long RIT_IRQHandler /* 45: Repetitive Interrupt Timer */ .long MCPWM_IRQHandler /* 46: Motor Control PWM */ .long QEI_IRQHandler /* 47: Quadrature Encoder Interface */ .long PLL1_IRQHandler /* 48: PLL1 Lock (USB PLL) */ .long USBActivity_IRQHandler /* 49: USB Activity */ .long CANActivity_IRQHandler /* 50: CAN Activity */ .size __cs3_interrupt_vector_cortex_m_mutable, . - __cs3_interrupt_vector_cortex_m_mutable .section ".cs3.interrupt_vector" .globl __cs3_interrupt_vector_cortex_m .type __cs3_interrupt_vector_cortex_m, %object __cs3_interrupt_vector_cortex_m: .long __cs3_stack /* Top of Stack */ .long __cs3_reset_cortex_m /* Reset Handler */ .long NMI_Handler /* NMI Handler */ .long HardFault_Handler /* Hard Fault Handler */ .long MemManage_Handler /* MPU Fault Handler */ .long BusFault_Handler /* Bus Fault Handler */ .long UsageFault_Handler /* Usage Fault Handler */ .long 0 /* Reserved - ROM CRC check ? */ .size __cs3_interrupt_vector_cortex_m, . - __cs3_interrupt_vector_cortex_m .thumb /* Fault handlers wrappers */ .section .handlers,"x",%progbits .thumb_func .type NMI_Handler, %function NMI_Handler: MOV R0, 2 B general_handler .type HardFault_Handler, %function HardFault_Handler: MOV R0, 3 B general_handler .type MemManage_Handler, %function MemManage_Handler: MOV R0, 4 B general_handler .type BusFault_Handler, %function BusFault_Handler: MOV R0, 5 B general_handler .type UsageFault_Handler, %function UsageFault_Handler: MOV R0, 6 .type general_handler, %function general_handler: PUSH {R4-R11} MOV R1, SP MOV R2, LR MOV R4, LR BL general_C_handler AND R0, #7 ORR LR, R4, R0 POP {R4-R11} BX LR /* Reset Handler */ .section .cs3.reset,"x",%progbits .thumb_func .globl __cs3_reset_cortex_m .type __cs3_reset_cortex_m, %function __cs3_reset_cortex_m: .fnstart LDR R0, =__rom_data_begin LDR R1, =__rom_data_end LDR R2, =__ram_data_begin MOV R3, R0 SUBS R4, R1, R0 MOV R1, R3 MOV R0, R2 MOV R2, R4 BL startup_memcpy LDR R0, =__bss_ram_begin MOV R1, #0 LDR R2, =__bss_ram_len BL startup_memset BL lpc17xx_deinit_all BL SystemInit B _start .pool .cantunwind .fnend .size __cs3_reset_cortex_m,.-__cs3_reset_cortex_m .section .handlers,"x",%progbits .weak DebugMon_Handler .type DebugMon_Handler, %function DebugMon_Handler: B . .size DebugMon_Handler, . - DebugMon_Handler /* IRQ Handlers */ .globl Default_Handler .type Default_Handler, %function Default_Handler: B . .size Default_Handler, . - Default_Handler .macro IRQ handler .weak \handler .set \handler, Default_Handler .endm IRQ WDT_IRQHandler IRQ TIMER0_IRQHandler IRQ TIMER1_IRQHandler IRQ TIMER2_IRQHandler IRQ TIMER3_IRQHandler IRQ UART0_IRQHandler IRQ UART1_IRQHandler IRQ UART2_IRQHandler IRQ UART3_IRQHandler IRQ PWM1_IRQHandler IRQ I2C0_IRQHandler IRQ I2C1_IRQHandler IRQ I2C2_IRQHandler IRQ SPI_IRQHandler IRQ SSP0_IRQHandler IRQ SSP1_IRQHandler IRQ PLL0_IRQHandler IRQ RTC_IRQHandler IRQ EINT0_IRQHandler IRQ EINT1_IRQHandler IRQ EINT2_IRQHandler IRQ EINT3_IRQHandler IRQ ADC_IRQHandler IRQ BOD_IRQHandler IRQ USB_IRQHandler IRQ CAN_IRQHandler IRQ DMA_IRQHandler IRQ I2S_IRQHandler IRQ ENET_IRQHandler IRQ RIT_IRQHandler IRQ MCPWM_IRQHandler IRQ QEI_IRQHandler IRQ PLL1_IRQHandler IRQ USBActivity_IRQHandler IRQ CANActivity_IRQHandler .end