📄 startup_ewarm.c
字号:
//*****************************************************************************//// startup_ewarm.c - Startup code for use with IAR's Embedded Workbench.//// Copyright (c) 2007 Luminary Micro, Inc. All rights reserved.// Luminary Micro Confidential - For Use Under NDA Only////*****************************************************************************//*****************************************************************************//// Enable the IAR extensions for this source file.////*****************************************************************************#pragma language=extended//*****************************************************************************//// Forward declaration of the default fault handlers.////*****************************************************************************void ResetISR(void);//*****************************************************************************//// External declarations for the interrupt handlers used by the application.////*****************************************************************************extern void IntDefaultHandler(void);extern void ADC0IntHandler(void);extern void ADC1IntHandler(void);extern void ADC2IntHandler(void);extern void ADC3IntHandler(void);extern void CANIntHandler(void);extern void EthernetIntHandler(void);extern void GPIOBIntHandler(void);extern void GPIOCIntHandler(void);extern void FaultISR(void);extern void NmiSR(void);extern void PWM0IntHandler(void);extern void MainWaveformTick(void);extern void MainMillisecondTick(void);extern void QEIIntHandler(void);extern void SysTickIntHandler(void);extern void Timer0AIntHandler(void);extern void Timer1AIntHandler(void);extern void UART0IntHandler(void);extern void WatchdogIntHandler(void);//*****************************************************************************//// The entry point for the application.////*****************************************************************************extern int main(void);//*****************************************************************************//// Reserve space for the system stack.////*****************************************************************************static unsigned long pulStack[1024];//*****************************************************************************//// 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.////*****************************************************************************typedef union{ 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.////*****************************************************************************__root const uVectorEntry g_pfnVectors[] @ "INTVEC" ={ { .ulPtr = (unsigned long)pulStack + sizeof(pulStack) }, // The initial stack pointer ResetISR, // The reset handler NmiSR, // The NMI handler FaultISR, // The hard fault handler IntDefaultHandler, // The MPU fault handler IntDefaultHandler, // The bus fault handler IntDefaultHandler, // The usage fault handler 0, // Reserved 0, // Reserved 0, // Reserved 0, // Reserved IntDefaultHandler, // SVCall handler IntDefaultHandler, // Debug monitor handler 0, // Reserved IntDefaultHandler, // The PendSV handler SysTickIntHandler, // The SysTick handler IntDefaultHandler, // GPIO Port A GPIOBIntHandler, // GPIO Port B GPIOCIntHandler, // GPIO Port C IntDefaultHandler, // GPIO Port D IntDefaultHandler, // GPIO Port E UART0IntHandler, // UART0 Rx and Tx IntDefaultHandler, // UART1 Rx and Tx IntDefaultHandler, // SSI Rx and Tx IntDefaultHandler, // I2C Master and Slave IntDefaultHandler, // PWM Fault PWM0IntHandler, // PWM Generator 0 MainWaveformTick, // PWM Generator 1 MainMillisecondTick, // PWM Generator 2 QEIIntHandler, // Quadrature Encoder ADC0IntHandler, // ADC Sequence 0 ADC1IntHandler, // ADC Sequence 1 ADC2IntHandler, // ADC Sequence 2 ADC3IntHandler, // ADC Sequence 3 WatchdogIntHandler, // Watchdog timer Timer0AIntHandler, // Timer 0 subtimer A IntDefaultHandler, // Timer 0 subtimer B Timer1AIntHandler, // Timer 1 subtimer A IntDefaultHandler, // Timer 1 subtimer B IntDefaultHandler, // Timer 2 subtimer A IntDefaultHandler, // Timer 2 subtimer B IntDefaultHandler, // Analog Comparator 0 IntDefaultHandler, // Analog Comparator 1 IntDefaultHandler, // Analog Comparator 2 IntDefaultHandler, // System Control (PLL, OSC, BO) IntDefaultHandler, // FLASH Control IntDefaultHandler, // GPIO Port F IntDefaultHandler, // GPIO Port G IntDefaultHandler, // GPIO Port H IntDefaultHandler, // UART2 Rx and Tx IntDefaultHandler, // SSI1 Rx and Tx IntDefaultHandler, // Timer 3 subtimer A IntDefaultHandler, // Timer 3 subtimer B IntDefaultHandler, // I2C1 Master and Slave IntDefaultHandler, // Quadrature Encoder 1 CANIntHandler, // CAN0 IntDefaultHandler, // CAN1 IntDefaultHandler, // CAN2 EthernetIntHandler, // Ethernet IntDefaultHandler // Hibernate};//*****************************************************************************//// The following are constructs created by the linker, indicating where the// the "data" and "bss" segments reside in memory. The initializers for the// for the "data" segment resides immediately following the "text" segment.////*****************************************************************************#pragma segment="DATA_ID"#pragma segment="DATA_I"#pragma segment="DATA_Z"//*****************************************************************************//// 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 entry() routine is called. Any fancy// actions (such as making decisions based on the reset cause register, and// resetting the bits in that register) are left solely in the hands of the// application.////*****************************************************************************voidResetISR(void){ unsigned long *pulSrc, *pulDest, *pulEnd; // // Copy the data segment initializers from flash to SRAM. // pulSrc = __segment_begin("DATA_ID"); pulDest = __segment_begin("DATA_I"); pulEnd = __segment_end("DATA_I"); while(pulDest < pulEnd) { *pulDest++ = *pulSrc++; } // // Zero fill the bss segment. // pulDest = __segment_begin("DATA_Z"); pulEnd = __segment_end("DATA_Z"); while(pulDest < pulEnd) { *pulDest++ = 0; } // // Call the application's entry point. // main();}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -