225 lines
9.8 KiB
C
Raw Normal View History

2012-08-14 18:07:04 -04:00
//*****************************************************************************
2013-10-10 19:59:51 -04:00
// Added STACK_SIZE macro and calls to assert_failed()
// Quantum Leaps on 25-Sep-2013
2012-08-14 18:07:04 -04:00
// www.state-machine.com
//*****************************************************************************
//*****************************************************************************
//
// startup_ewarm.c - Startup code for use with IAR's Embedded Workbench,
// version 5.
//
// Copyright (c) 2009 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 microcontroller products.
//
// The software is owned by LMI and/or its suppliers, and is protected under
// applicable copyright laws. All rights are reserved. You may not combine
// this software with "viral" open-source software in order to form a larger
// program. 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 32 of the Stellaris CMSIS Package.
//
//*****************************************************************************
//*****************************************************************************
//
// Enable the IAR extensions for this source file.
//
//*****************************************************************************
#pragma language=extended
//*****************************************************************************
//
// Forward declaration of the default fault handlers.
//
//*****************************************************************************
void NMI_Handler(void);
void HardFault_Handler(void);
__weak void MemManage_Handler(void);
__weak void BusFault_Handler(void);
__weak void UsageFault_Handler(void);
__weak void HardFault_Handler(void);
__weak void SVC_Handler(void);
__weak void DebugMon_Handler(void);
__weak void PendSV_Handler(void);
__weak void SysTick_Handler(void);
__weak void GPIOPortA_IRQHandler(void);
__weak void GPIOPortB_IRQHandler(void);
__weak void GPIOPortC_IRQHandler(void);
__weak void GPIOPortD_IRQHandler(void);
__weak void GPIOPortE_IRQHandler(void);
__weak void UART0_IRQHandler(void);
__weak void UART1_IRQHandler(void);
__weak void SSI0_IRQHandler(void);
__weak void I2C0_IRQHandler(void);
__weak void PWMFault_IRQHandler(void);
__weak void PWMGen0_IRQHandler(void);
__weak void PWMGen1_IRQHandler(void);
__weak void PWMGen2_IRQHandler(void);
__weak void QEI0_IRQHandler(void);
__weak void ADCSeq0_IRQHandler(void);
__weak void ADCSeq1_IRQHandler(void);
__weak void ADCSeq2_IRQHandler(void);
__weak void ADCSeq3_IRQHandler(void);
__weak void Watchdog_IRQHandler(void);
__weak void Timer0A_IRQHandler(void);
__weak void Timer0B_IRQHandler(void);
__weak void Timer1A_IRQHandler(void);
__weak void Timer1B_IRQHandler(void);
__weak void Timer2A_IRQHandler(void);
__weak void Timer2B_IRQHandler(void);
__weak void Comp0_IRQHandler(void);
__weak void Comp1_IRQHandler(void);
__weak void Comp2_IRQHandler(void);
__weak void SysCtrl_IRQHandler(void);
__weak void FlashCtrl_IRQHandler(void);
__weak void GPIOPortF_IRQHandler(void);
__weak void GPIOPortG_IRQHandler(void);
__weak void GPIOPortH_IRQHandler(void);
__weak void UART2_IRQHandler(void);
__weak void SSI1_IRQHandler(void);
__weak void Timer3A_IRQHandler(void);
__weak void Timer3B_IRQHandler(void);
__weak void I2C1_IRQHandler(void);
__weak void QEI1_IRQHandler(void);
__weak void CAN0_IRQHandler(void);
__weak void CAN1_IRQHandler(void);
__weak void CAN2_IRQHandler(void);
__weak void Ethernet_IRQHandler(void);
__weak void Hibernate_IRQHandler(void);
//*****************************************************************************
//
// The entry point for the application startup code.
//
//*****************************************************************************
extern void __iar_program_start(void);
//*****************************************************************************
//
// Reserve space for the system stack.
//
//*****************************************************************************
static unsigned long pulStack[STACK_SIZE/sizeof(unsigned long)] @ ".noinit";
//*****************************************************************************
//
// A union that describes the entries of the vector table. The union is needed
// since the first entry is the stack pointer and the remainder are function
// pointers.
//
//*****************************************************************************
2013-10-10 19:59:51 -04:00
typedef union {
2012-08-14 18:07:04 -04:00
void (*pfnHandler)(void);
unsigned long ulPtr;
}
uVectorEntry;
//*****************************************************************************
//
// The vector table. Note that the proper constructs must be placed on this to
// ensure that it ends up at physical address 0x0000.0000.
//
//*****************************************************************************
2013-10-10 19:59:51 -04:00
__root const uVectorEntry __vector_table[] @ ".intvec" = {
2012-08-14 18:07:04 -04:00
{ .ulPtr = (unsigned long)pulStack + sizeof(pulStack) },
// The initial stack pointer
__iar_program_start, // The reset handler
NMI_Handler, // The NMI handler
HardFault_Handler, // The hard fault handler
MemManage_Handler, // The MPU fault handler
BusFault_Handler, // The bus fault handler
UsageFault_Handler, // The usage fault handler
0, // Reserved
0, // Reserved
0, // Reserved
0, // Reserved
SVC_Handler, // SVCall handler
DebugMon_Handler, // Debug monitor handler
0, // Reserved
PendSV_Handler, // The PendSV handler
SysTick_Handler, // The SysTick handler
//
// External Interrupts
//
GPIOPortA_IRQHandler, // GPIO Port A
GPIOPortB_IRQHandler, // GPIO Port B
GPIOPortC_IRQHandler, // GPIO Port C
GPIOPortD_IRQHandler, // GPIO Port D
GPIOPortE_IRQHandler, // GPIO Port E
UART0_IRQHandler, // UART0 Rx and Tx
UART1_IRQHandler, // UART1 Rx and Tx
SSI0_IRQHandler, // SSI0 Rx and Tx
I2C0_IRQHandler, // I2C0 Master and Slave
PWMFault_IRQHandler, // PWM Fault
PWMGen0_IRQHandler, // PWM Generator 0
PWMGen1_IRQHandler, // PWM Generator 1
PWMGen2_IRQHandler, // PWM Generator 2
QEI0_IRQHandler, // Quadrature Encoder 0
ADCSeq0_IRQHandler, // ADC Sequence 0
ADCSeq1_IRQHandler, // ADC Sequence 1
ADCSeq2_IRQHandler, // ADC Sequence 2
ADCSeq3_IRQHandler, // ADC Sequence 3
Watchdog_IRQHandler, // Watchdog timer
Timer0A_IRQHandler, // Timer 0 subtimer A
Timer0B_IRQHandler, // Timer 0 subtimer B
Timer1A_IRQHandler, // Timer 1 subtimer A
Timer1B_IRQHandler, // Timer 1 subtimer B
Timer2A_IRQHandler, // Timer 2 subtimer A
Timer2B_IRQHandler, // Timer 2 subtimer B
Comp0_IRQHandler, // Analog Comparator 0
Comp1_IRQHandler, // Analog Comparator 1
Comp2_IRQHandler, // Analog Comparator 2
SysCtrl_IRQHandler, // System Control (PLL, OSC, BO)
FlashCtrl_IRQHandler, // FLASH Control
GPIOPortF_IRQHandler, // GPIO Port F
GPIOPortG_IRQHandler, // GPIO Port G
GPIOPortH_IRQHandler, // GPIO Port H
UART2_IRQHandler, // UART2 Rx and Tx
SSI1_IRQHandler, // SSI1 Rx and Tx
Timer3A_IRQHandler, // Timer 3 subtimer A
Timer3B_IRQHandler, // Timer 3 subtimer B
I2C1_IRQHandler, // I2C1 Master and Slave
QEI1_IRQHandler, // Quadrature Encoder 1
CAN0_IRQHandler, // CAN0
CAN1_IRQHandler, // CAN1
CAN2_IRQHandler, // CAN2
Ethernet_IRQHandler, // Ethernet
Hibernate_IRQHandler // Hibernate
};
/* function prototypes -----------------------------------------------------*/
2013-10-10 19:59:51 -04:00
extern void assert_failed (char const *file, int line);
2012-08-14 18:07:04 -04:00
/****************************************************************************/
2013-10-10 19:59:51 -04:00
void NMI_Handler(void) {
assert_failed("NMI_Handler", __LINE__);
// assert_failed() should not return, but just in case it does
// enter an infinite loop.
while (1) {
2012-08-14 18:07:04 -04:00
}
}
/****************************************************************************/
2013-10-10 19:59:51 -04:00
void HardFault_Handler(void) {
assert_failed("HardFault_Handler", __LINE__);
// assert_failed() should not return, but just in case it does
// enter an infinite loop.
while (1) {
2012-08-14 18:07:04 -04:00
}
}