; <<< Use Configuration Wizard in Context Menu >>> ;****************************************************************************** ; ; startup_rvmdk.S - Startup code for Stellaris. ; ; Copyright (c) 2006 Luminary Micro, Inc. All rights reserved. ; ; Software License Agreement ; ; Luminary Micro, Inc. (LMI) is supplying this software for use solely and ; exclusively on LMI's Stellaris Family of microcontroller products. ; ; The software is owned by LMI and/or its suppliers, and is protected under ; applicable copyright laws. All rights are reserved. Any use in violation of ; the foregoing restrictions may subject the user to criminal sanctions under ; applicable laws, as well as to civil liability for the breach of the terms ; and conditions of this license. ; ; 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. ; LMI SHALL NOT, IN ANY CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR ; CONSEQUENTIAL DAMAGES, FOR ANY REASON WHATSOEVER. ; ; This is part of revision 816 of the Stellaris Driver Library. ; ;****************************************************************************** ;****************************************************************************** ; ; Stack Configuration ; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> ; ; ;****************************************************************************** Stack EQU 0x00000100 ;****************************************************************************** ; ; Heap Configuration ; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> ; ; ;****************************************************************************** Heap EQU 0x00000000 ;****************************************************************************** ; ; Allocate space for the stack. ; ;****************************************************************************** AREA STACK, NOINIT, READWRITE, ALIGN=3 StackMem SPACE Stack ;****************************************************************************** ; ; Allocate space for the heap. ; ;****************************************************************************** AREA HEAP, NOINIT, READWRITE, ALIGN=3 HeapMem SPACE Heap ;****************************************************************************** ; ; Indicate that the code in this file preserves 8-byte alignment of the stack. ; ;****************************************************************************** PRESERVE8 ;****************************************************************************** ; ; Place code into the reset code section. ; ;****************************************************************************** AREA RESET, CODE, READONLY THUMB ;****************************************************************************** ; ; The vector table. ; ;****************************************************************************** EXPORT __Vectors __Vectors DCD StackMem + Stack ; Top of Stack DCD Reset_Handler ; Reset Handler DCD NmiSR ; NMI Handler DCD FaultISR ; Hard Fault Handler DCD IntDefaultHandler ; MPU Fault Handler DCD IntDefaultHandler ; Bus Fault Handler DCD IntDefaultHandler ; Usage Fault Handler DCD 0 ; Reserved DCD 0 ; Reserved DCD 0 ; Reserved DCD 0 ; Reserved DCD vPortSVCHandler ; SVCall Handler DCD IntDefaultHandler ; Debug Monitor Handler DCD 0 ; Reserved DCD xPortPendSVHandler ; PendSV Handler DCD xPortSysTickHandler ; SysTick Handler DCD IntDefaultHandler ; GPIO Port A DCD IntDefaultHandler ; GPIO Port B DCD vGPIO_ISR ; GPIO Port C DCD IntDefaultHandler ; GPIO Port D DCD IntDefaultHandler ; GPIO Port E DCD vUART_ISR ; UART0 DCD IntDefaultHandler ; UART1 DCD IntDefaultHandler ; SSI DCD IntDefaultHandler ; I2C DCD IntDefaultHandler ; PWM Fault DCD IntDefaultHandler ; PWM Generator 0 DCD IntDefaultHandler ; PWM Generator 1 DCD IntDefaultHandler ; PWM Generator 2 DCD IntDefaultHandler ; Quadrature Encoder DCD IntDefaultHandler ; ADC Sequence 0 DCD IntDefaultHandler ; ADC Sequence 1 DCD IntDefaultHandler ; ADC Sequence 2 DCD IntDefaultHandler ; ADC Sequence 3 DCD IntDefaultHandler ; Watchdog DCD IntDefaultHandler ; Timer 0A DCD IntDefaultHandler ; Timer 0B DCD IntDefaultHandler ; Timer 1A DCD IntDefaultHandler ; Timer 1B DCD IntDefaultHandler ; Timer 2A DCD IntDefaultHandler ; Timer 2B DCD IntDefaultHandler ; Comp 0 DCD IntDefaultHandler ; Comp 1 DCD IntDefaultHandler ; Comp 2 DCD IntDefaultHandler ; System Control DCD IntDefaultHandler ; Flash Control ;****************************************************************************** ; ; This is the code that gets called when the processor first starts execution ; following a reset event. ; ;****************************************************************************** EXPORT Reset_Handler Reset_Handler ; ; Call __main() in the C library, which will call the application ; supplied main(). ; IMPORT __main IMPORT vGPIO_ISR IMPORT vUART_ISR IMPORT xPortPendSVHandler IMPORT xPortSysTickHandler IMPORT vPortSVCHandler LDR R0, =__main BX R0 ;****************************************************************************** ; ; This is the code that gets called when the processor receives a NMI. This ; simply enters an infinite loop, preserving the system state for examination ; by a debugger. ; ;****************************************************************************** NmiSR B NmiSR ;****************************************************************************** ; ; This is the code that gets called when the processor receives a fault ; interrupt. This simply enters an infinite loop, preserving the system state ; for examination by a debugger. ; ;****************************************************************************** FaultISR B FaultISR ;****************************************************************************** ; ; 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. ; ;****************************************************************************** IntDefaultHandler B IntDefaultHandler ;****************************************************************************** ; ; Make sure the end of this section is aligned. ; ;****************************************************************************** ALIGN ;****************************************************************************** ; ; Some code in the normal code section for initializing the heap and stack. ; ;****************************************************************************** AREA |.text|, CODE, READONLY ;****************************************************************************** ; ; The function expected of the C library startup code for defining the stack ; and heap memory locations. ; ;****************************************************************************** IMPORT __use_two_region_memory EXPORT __user_initial_stackheap __user_initial_stackheap LDR R0, =HeapMem LDR R1, =(StackMem + Stack) LDR R2, =(HeapMem + Heap) LDR R3, =StackMem BX LR ;****************************************************************************** ; ; Make sure the end of this section is aligned. ; ;****************************************************************************** ALIGN ; Note: ; Using READWRITE places Section .RTOSHeap in Region ER_RW. ; Using NOINIT places Section .RTOSHeap in Region ER_ZI,which means ; "ZEROINITIALIZE" (sic), and which is the last region in memory. Then ; we need to make this section the last section, which is somewhat tricky, ; because we cannot use the sectionname, but need to use a defined symbol: ; Linker option: "--last xHeap" EXPORT xHeap AREA RTOSHeap, DATA, NOINIT xHeap ;****************************************************************************** ; ; Tell the assembler that we're done. ; ;****************************************************************************** END