Merge pull request #300 from nongxiaoming/master
[bsp] add the linker script file.
This commit is contained in:
commit
0bc57e9b82
|
@ -128,10 +128,6 @@ __Vectors DCD __initial_sp ; 0 Top of Stack
|
||||||
DCD QEI_IRQHandler ; 68 QEI
|
DCD QEI_IRQHandler ; 68 QEI
|
||||||
|
|
||||||
|
|
||||||
IF :LNOT::DEF:NO_CRP
|
|
||||||
AREA |.ARM.__at_0x02FC|, CODE, READONLY
|
|
||||||
CRP_Key DCD 0xFFFFFFFF
|
|
||||||
ENDIF
|
|
||||||
|
|
||||||
AREA |.text|, CODE, READONLY
|
AREA |.text|, CODE, READONLY
|
||||||
|
|
||||||
|
@ -327,13 +323,5 @@ __user_initial_stackheap
|
||||||
|
|
||||||
ENDIF
|
ENDIF
|
||||||
|
|
||||||
AREA |.text|,CODE, READONLY
|
|
||||||
getPC PROC
|
|
||||||
EXPORT getPC
|
|
||||||
|
|
||||||
MOV R0,LR
|
|
||||||
BX LR
|
|
||||||
|
|
||||||
ENDP
|
|
||||||
|
|
||||||
END
|
END
|
||||||
|
|
|
@ -1,502 +0,0 @@
|
||||||
//*****************************************************************************
|
|
||||||
// LPC43xx (Cortex-M4) Microcontroller Startup code for use with LPCXpresso IDE
|
|
||||||
//
|
|
||||||
// Version : 140113
|
|
||||||
//*****************************************************************************
|
|
||||||
//
|
|
||||||
// Copyright(C) NXP Semiconductors, 2013-2014
|
|
||||||
// All rights reserved.
|
|
||||||
//
|
|
||||||
// Software that is described herein is for illustrative purposes only
|
|
||||||
// which provides customers with programming information regarding the
|
|
||||||
// LPC products. This software is supplied "AS IS" without any warranties of
|
|
||||||
// any kind, and NXP Semiconductors and its licensor disclaim any and
|
|
||||||
// all warranties, express or implied, including all implied warranties of
|
|
||||||
// merchantability, fitness for a particular purpose and non-infringement of
|
|
||||||
// intellectual property rights. NXP Semiconductors assumes no responsibility
|
|
||||||
// or liability for the use of the software, conveys no license or rights under any
|
|
||||||
// patent, copyright, mask work right, or any other intellectual property rights in
|
|
||||||
// or to any products. NXP Semiconductors reserves the right to make changes
|
|
||||||
// in the software without notification. NXP Semiconductors also makes no
|
|
||||||
// representation or warranty that such application will be suitable for the
|
|
||||||
// specified use without further testing or modification.
|
|
||||||
//
|
|
||||||
// Permission to use, copy, modify, and distribute this software and its
|
|
||||||
// documentation is hereby granted, under NXP Semiconductors' and its
|
|
||||||
// licensor's relevant copyrights in the software, without fee, provided that it
|
|
||||||
// is used in conjunction with NXP Semiconductors microcontrollers. This
|
|
||||||
// copyright, permission, and disclaimer notice must appear in all copies of
|
|
||||||
// this code.
|
|
||||||
//*****************************************************************************
|
|
||||||
|
|
||||||
#if defined (__cplusplus)
|
|
||||||
#ifdef __REDLIB__
|
|
||||||
#error Redlib does not support C++
|
|
||||||
#else
|
|
||||||
//*****************************************************************************
|
|
||||||
//
|
|
||||||
// The entry point for the C++ library startup
|
|
||||||
//
|
|
||||||
//*****************************************************************************
|
|
||||||
extern "C" {
|
|
||||||
extern void __libc_init_array(void);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#define WEAK __attribute__ ((weak))
|
|
||||||
#define ALIAS(f) __attribute__ ((weak, alias (#f)))
|
|
||||||
|
|
||||||
//*****************************************************************************
|
|
||||||
#if defined (__cplusplus)
|
|
||||||
extern "C" {
|
|
||||||
#endif
|
|
||||||
|
|
||||||
//*****************************************************************************
|
|
||||||
#if defined (__USE_CMSIS) || defined (__USE_LPCOPEN)
|
|
||||||
// Declaration of external SystemInit function
|
|
||||||
extern void SystemInit(void);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
//*****************************************************************************
|
|
||||||
//
|
|
||||||
// Forward declaration of the default handlers. These are aliased.
|
|
||||||
// When the application defines a handler (with the same name), this will
|
|
||||||
// automatically take precedence over these weak definitions
|
|
||||||
//
|
|
||||||
//*****************************************************************************
|
|
||||||
void ResetISR(void);
|
|
||||||
WEAK void NMI_Handler(void);
|
|
||||||
WEAK void HardFault_Handler(void);
|
|
||||||
WEAK void MemManage_Handler(void);
|
|
||||||
WEAK void BusFault_Handler(void);
|
|
||||||
WEAK void UsageFault_Handler(void);
|
|
||||||
WEAK void SVC_Handler(void);
|
|
||||||
WEAK void DebugMon_Handler(void);
|
|
||||||
WEAK void PendSV_Handler(void);
|
|
||||||
WEAK void SysTick_Handler(void);
|
|
||||||
WEAK void IntDefaultHandler(void);
|
|
||||||
|
|
||||||
//*****************************************************************************
|
|
||||||
//
|
|
||||||
// Forward declaration of the specific IRQ handlers. These are aliased
|
|
||||||
// to the IntDefaultHandler, which is a 'forever' loop. When the application
|
|
||||||
// defines a handler (with the same name), this will automatically take
|
|
||||||
// precedence over these weak definitions
|
|
||||||
//
|
|
||||||
//*****************************************************************************
|
|
||||||
void DAC_IRQHandler(void) ALIAS(IntDefaultHandler);
|
|
||||||
#if defined (__USE_LPCOPEN)
|
|
||||||
void M0APP_IRQHandler(void) ALIAS(IntDefaultHandler);
|
|
||||||
#else
|
|
||||||
void M0CORE_IRQHandler(void) ALIAS(IntDefaultHandler);
|
|
||||||
#endif
|
|
||||||
void DMA_IRQHandler(void) ALIAS(IntDefaultHandler);
|
|
||||||
void FLASH_EEPROM_IRQHandler(void) ALIAS(IntDefaultHandler);
|
|
||||||
void ETH_IRQHandler(void) ALIAS(IntDefaultHandler);
|
|
||||||
void SDIO_IRQHandler(void) ALIAS(IntDefaultHandler);
|
|
||||||
void LCD_IRQHandler(void) ALIAS(IntDefaultHandler);
|
|
||||||
void USB0_IRQHandler(void) ALIAS(IntDefaultHandler);
|
|
||||||
void USB1_IRQHandler(void) ALIAS(IntDefaultHandler);
|
|
||||||
void SCT_IRQHandler(void) ALIAS(IntDefaultHandler);
|
|
||||||
void RIT_IRQHandler(void) ALIAS(IntDefaultHandler);
|
|
||||||
void TIMER0_IRQHandler(void) ALIAS(IntDefaultHandler);
|
|
||||||
void TIMER1_IRQHandler(void) ALIAS(IntDefaultHandler);
|
|
||||||
void TIMER2_IRQHandler(void) ALIAS(IntDefaultHandler);
|
|
||||||
void TIMER3_IRQHandler(void) ALIAS(IntDefaultHandler);
|
|
||||||
void MCPWM_IRQHandler(void) ALIAS(IntDefaultHandler);
|
|
||||||
void ADC0_IRQHandler(void) ALIAS(IntDefaultHandler);
|
|
||||||
void I2C0_IRQHandler(void) ALIAS(IntDefaultHandler);
|
|
||||||
void SPI_IRQHandler(void) ALIAS(IntDefaultHandler);
|
|
||||||
void I2C1_IRQHandler(void) ALIAS(IntDefaultHandler);
|
|
||||||
void ADC1_IRQHandler(void) ALIAS(IntDefaultHandler);
|
|
||||||
void SSP0_IRQHandler(void) ALIAS(IntDefaultHandler);
|
|
||||||
void SSP1_IRQHandler(void) ALIAS(IntDefaultHandler);
|
|
||||||
void UART0_IRQHandler(void) ALIAS(IntDefaultHandler);
|
|
||||||
void UART1_IRQHandler(void) ALIAS(IntDefaultHandler);
|
|
||||||
void UART2_IRQHandler(void) ALIAS(IntDefaultHandler);
|
|
||||||
void UART3_IRQHandler(void) ALIAS(IntDefaultHandler);
|
|
||||||
void I2S0_IRQHandler(void) ALIAS(IntDefaultHandler);
|
|
||||||
void I2S1_IRQHandler(void) ALIAS(IntDefaultHandler);
|
|
||||||
void SPIFI_IRQHandler(void) ALIAS(IntDefaultHandler);
|
|
||||||
void SGPIO_IRQHandler(void) ALIAS(IntDefaultHandler);
|
|
||||||
void GPIO0_IRQHandler(void) ALIAS(IntDefaultHandler);
|
|
||||||
void GPIO1_IRQHandler(void) ALIAS(IntDefaultHandler);
|
|
||||||
void GPIO2_IRQHandler(void) ALIAS(IntDefaultHandler);
|
|
||||||
void GPIO3_IRQHandler(void) ALIAS(IntDefaultHandler);
|
|
||||||
void GPIO4_IRQHandler(void) ALIAS(IntDefaultHandler);
|
|
||||||
void GPIO5_IRQHandler(void) ALIAS(IntDefaultHandler);
|
|
||||||
void GPIO6_IRQHandler(void) ALIAS(IntDefaultHandler);
|
|
||||||
void GPIO7_IRQHandler(void) ALIAS(IntDefaultHandler);
|
|
||||||
void GINT0_IRQHandler(void) ALIAS(IntDefaultHandler);
|
|
||||||
void GINT1_IRQHandler(void) ALIAS(IntDefaultHandler);
|
|
||||||
void EVRT_IRQHandler(void) ALIAS(IntDefaultHandler);
|
|
||||||
void CAN1_IRQHandler(void) ALIAS(IntDefaultHandler);
|
|
||||||
#if defined (__USE_LPCOPEN)
|
|
||||||
void ADCHS_IRQHandler(void) ALIAS(IntDefaultHandler);
|
|
||||||
#else
|
|
||||||
void VADC_IRQHandler(void) ALIAS(IntDefaultHandler);
|
|
||||||
#endif
|
|
||||||
void ATIMER_IRQHandler(void) ALIAS(IntDefaultHandler);
|
|
||||||
void RTC_IRQHandler(void) ALIAS(IntDefaultHandler);
|
|
||||||
void WDT_IRQHandler(void) ALIAS(IntDefaultHandler);
|
|
||||||
void M0SUB_IRQHandler(void) ALIAS(IntDefaultHandler);
|
|
||||||
void CAN0_IRQHandler(void) ALIAS(IntDefaultHandler);
|
|
||||||
void QEI_IRQHandler(void) ALIAS(IntDefaultHandler);
|
|
||||||
|
|
||||||
//*****************************************************************************
|
|
||||||
//
|
|
||||||
// The entry point for the application.
|
|
||||||
// __main() is the entry point for Redlib based applications
|
|
||||||
// main() is the entry point for Newlib based applications
|
|
||||||
//
|
|
||||||
//*****************************************************************************
|
|
||||||
#if defined (__REDLIB__)
|
|
||||||
extern void __main(void);
|
|
||||||
#endif
|
|
||||||
extern int main(void);
|
|
||||||
//*****************************************************************************
|
|
||||||
//
|
|
||||||
// External declaration for the pointer to the stack top from the Linker Script
|
|
||||||
//
|
|
||||||
//*****************************************************************************
|
|
||||||
extern void _vStackTop(void);
|
|
||||||
|
|
||||||
//*****************************************************************************
|
|
||||||
#if defined (__cplusplus)
|
|
||||||
} // extern "C"
|
|
||||||
#endif
|
|
||||||
//*****************************************************************************
|
|
||||||
//
|
|
||||||
// The vector table.
|
|
||||||
// This relies on the linker script to place at correct location in memory.
|
|
||||||
//
|
|
||||||
//*****************************************************************************
|
|
||||||
extern void (* const g_pfnVectors[])(void);
|
|
||||||
__attribute__ ((section(".isr_vector")))
|
|
||||||
void (* const g_pfnVectors[])(void) = {
|
|
||||||
// Core Level - CM4
|
|
||||||
&_vStackTop, // The initial stack pointer
|
|
||||||
ResetISR, // 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
|
|
||||||
|
|
||||||
// Chip Level - LPC43 (M4)
|
|
||||||
DAC_IRQHandler, // 16
|
|
||||||
#if defined (__USE_LPCOPEN)
|
|
||||||
M0APP_IRQHandler, // 17 CortexM4/M0 (LPC43XX ONLY)
|
|
||||||
#else
|
|
||||||
M0CORE_IRQHandler, // 17
|
|
||||||
#endif
|
|
||||||
DMA_IRQHandler, // 18
|
|
||||||
0, // 19
|
|
||||||
FLASH_EEPROM_IRQHandler, // 20 ORed flash Bank A, flash Bank B, EEPROM interrupts
|
|
||||||
ETH_IRQHandler, // 21
|
|
||||||
SDIO_IRQHandler, // 22
|
|
||||||
LCD_IRQHandler, // 23
|
|
||||||
USB0_IRQHandler, // 24
|
|
||||||
USB1_IRQHandler, // 25
|
|
||||||
SCT_IRQHandler, // 26
|
|
||||||
RIT_IRQHandler, // 27
|
|
||||||
TIMER0_IRQHandler, // 28
|
|
||||||
TIMER1_IRQHandler, // 29
|
|
||||||
TIMER2_IRQHandler, // 30
|
|
||||||
TIMER3_IRQHandler, // 31
|
|
||||||
MCPWM_IRQHandler, // 32
|
|
||||||
ADC0_IRQHandler, // 33
|
|
||||||
I2C0_IRQHandler, // 34
|
|
||||||
I2C1_IRQHandler, // 35
|
|
||||||
SPI_IRQHandler, // 36
|
|
||||||
ADC1_IRQHandler, // 37
|
|
||||||
SSP0_IRQHandler, // 38
|
|
||||||
SSP1_IRQHandler, // 39
|
|
||||||
UART0_IRQHandler, // 40
|
|
||||||
UART1_IRQHandler, // 41
|
|
||||||
UART2_IRQHandler, // 42
|
|
||||||
UART3_IRQHandler, // 43
|
|
||||||
I2S0_IRQHandler, // 44
|
|
||||||
I2S1_IRQHandler, // 45
|
|
||||||
SPIFI_IRQHandler, // 46
|
|
||||||
SGPIO_IRQHandler, // 47
|
|
||||||
GPIO0_IRQHandler, // 48
|
|
||||||
GPIO1_IRQHandler, // 49
|
|
||||||
GPIO2_IRQHandler, // 50
|
|
||||||
GPIO3_IRQHandler, // 51
|
|
||||||
GPIO4_IRQHandler, // 52
|
|
||||||
GPIO5_IRQHandler, // 53
|
|
||||||
GPIO6_IRQHandler, // 54
|
|
||||||
GPIO7_IRQHandler, // 55
|
|
||||||
GINT0_IRQHandler, // 56
|
|
||||||
GINT1_IRQHandler, // 57
|
|
||||||
EVRT_IRQHandler, // 58
|
|
||||||
CAN1_IRQHandler, // 59
|
|
||||||
0, // 60
|
|
||||||
#if defined (__USE_LPCOPEN)
|
|
||||||
ADCHS_IRQHandler, // 61 ADCHS combined interrupt
|
|
||||||
#else
|
|
||||||
VADC_IRQHandler, // 61
|
|
||||||
#endif
|
|
||||||
ATIMER_IRQHandler, // 62
|
|
||||||
RTC_IRQHandler, // 63
|
|
||||||
0, // 64
|
|
||||||
WDT_IRQHandler, // 65
|
|
||||||
M0SUB_IRQHandler, // 66
|
|
||||||
CAN0_IRQHandler, // 67
|
|
||||||
QEI_IRQHandler, // 68
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
//*****************************************************************************
|
|
||||||
// Functions to carry out the initialization of RW and BSS data sections. These
|
|
||||||
// are written as separate functions rather than being inlined within the
|
|
||||||
// ResetISR() function in order to cope with MCUs with multiple banks of
|
|
||||||
// memory.
|
|
||||||
//*****************************************************************************
|
|
||||||
__attribute__((section(".after_vectors"
|
|
||||||
)))
|
|
||||||
void data_init(unsigned int romstart, unsigned int start, unsigned int len) {
|
|
||||||
unsigned int *pulDest = (unsigned int*) start;
|
|
||||||
unsigned int *pulSrc = (unsigned int*) romstart;
|
|
||||||
unsigned int loop;
|
|
||||||
for (loop = 0; loop < len; loop = loop + 4)
|
|
||||||
*pulDest++ = *pulSrc++;
|
|
||||||
}
|
|
||||||
|
|
||||||
__attribute__ ((section(".after_vectors")))
|
|
||||||
void bss_init(unsigned int start, unsigned int len) {
|
|
||||||
unsigned int *pulDest = (unsigned int*) start;
|
|
||||||
unsigned int loop;
|
|
||||||
for (loop = 0; loop < len; loop = loop + 4)
|
|
||||||
*pulDest++ = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
//*****************************************************************************
|
|
||||||
// The following symbols are constructs generated by the linker, indicating
|
|
||||||
// the location of various points in the "Global Section Table". This table is
|
|
||||||
// created by the linker via the Code Red managed linker script mechanism. It
|
|
||||||
// contains the load address, execution address and length of each RW data
|
|
||||||
// section and the execution and length of each BSS (zero initialized) section.
|
|
||||||
//*****************************************************************************
|
|
||||||
extern unsigned int __data_section_table;
|
|
||||||
extern unsigned int __data_section_table_end;
|
|
||||||
extern unsigned int __bss_section_table;
|
|
||||||
extern unsigned int __bss_section_table_end;
|
|
||||||
|
|
||||||
//*****************************************************************************
|
|
||||||
// Reset entry point for your code.
|
|
||||||
// Sets up a simple runtime environment and initializes the C/C++
|
|
||||||
// library.
|
|
||||||
//
|
|
||||||
//*****************************************************************************
|
|
||||||
void ResetISR(void) {
|
|
||||||
|
|
||||||
// *************************************************************
|
|
||||||
// The following conditional block of code manually resets as
|
|
||||||
// much of the peripheral set of the LPC43 as possible. This is
|
|
||||||
// done because the LPC43 does not provide a means of triggering
|
|
||||||
// a full system reset under debugger control, which can cause
|
|
||||||
// problems in certain circumstances when debugging.
|
|
||||||
//
|
|
||||||
// You can prevent this code block being included if you require
|
|
||||||
// (for example when creating a final executable which you will
|
|
||||||
// not debug) by setting the define 'DONT_RESET_ON_RESTART'.
|
|
||||||
//
|
|
||||||
#ifndef DONT_RESET_ON_RESTART
|
|
||||||
|
|
||||||
// Disable interrupts
|
|
||||||
__asm volatile ("cpsid i");
|
|
||||||
// equivalent to CMSIS '__disable_irq()' function
|
|
||||||
|
|
||||||
unsigned int *RESET_CONTROL = (unsigned int *) 0x40053100;
|
|
||||||
// LPC_RGU->RESET_CTRL0 @ 0x40053100
|
|
||||||
// LPC_RGU->RESET_CTRL1 @ 0x40053104
|
|
||||||
// Note that we do not use the CMSIS register access mechanism,
|
|
||||||
// as there is no guarantee that the project has been configured
|
|
||||||
// to use CMSIS.
|
|
||||||
|
|
||||||
// Write to LPC_RGU->RESET_CTRL0
|
|
||||||
*(RESET_CONTROL + 0) = 0x10DF1000;
|
|
||||||
// GPIO_RST|AES_RST|ETHERNET_RST|SDIO_RST|DMA_RST|
|
|
||||||
// USB1_RST|USB0_RST|LCD_RST|M0_SUB_RST
|
|
||||||
|
|
||||||
// Write to LPC_RGU->RESET_CTRL1
|
|
||||||
*(RESET_CONTROL + 1) = 0x01DFF7FF;
|
|
||||||
// M0APP_RST|CAN0_RST|CAN1_RST|I2S_RST|SSP1_RST|SSP0_RST|
|
|
||||||
// I2C1_RST|I2C0_RST|UART3_RST|UART1_RST|UART1_RST|UART0_RST|
|
|
||||||
// DAC_RST|ADC1_RST|ADC0_RST|QEI_RST|MOTOCONPWM_RST|SCT_RST|
|
|
||||||
// RITIMER_RST|TIMER3_RST|TIMER2_RST|TIMER1_RST|TIMER0_RST
|
|
||||||
|
|
||||||
// Clear all pending interrupts in the NVIC
|
|
||||||
volatile unsigned int *NVIC_ICPR = (unsigned int *) 0xE000E280;
|
|
||||||
unsigned int irqpendloop;
|
|
||||||
for (irqpendloop = 0; irqpendloop < 8; irqpendloop++) {
|
|
||||||
*(NVIC_ICPR + irqpendloop) = 0xFFFFFFFF;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Reenable interrupts
|
|
||||||
__asm volatile ("cpsie i");
|
|
||||||
// equivalent to CMSIS '__enable_irq()' function
|
|
||||||
|
|
||||||
#endif // ifndef DONT_RESET_ON_RESTART
|
|
||||||
// *************************************************************
|
|
||||||
|
|
||||||
#if defined (__USE_LPCOPEN)
|
|
||||||
SystemInit();
|
|
||||||
#endif
|
|
||||||
|
|
||||||
//
|
|
||||||
// Copy the data sections from flash to SRAM.
|
|
||||||
//
|
|
||||||
unsigned int LoadAddr, ExeAddr, SectionLen;
|
|
||||||
unsigned int *SectionTableAddr;
|
|
||||||
|
|
||||||
// Load base address of Global Section Table
|
|
||||||
SectionTableAddr = &__data_section_table;
|
|
||||||
|
|
||||||
// Copy the data sections from flash to SRAM.
|
|
||||||
while (SectionTableAddr < &__data_section_table_end) {
|
|
||||||
LoadAddr = *SectionTableAddr++;
|
|
||||||
ExeAddr = *SectionTableAddr++;
|
|
||||||
SectionLen = *SectionTableAddr++;
|
|
||||||
data_init(LoadAddr, ExeAddr, SectionLen);
|
|
||||||
}
|
|
||||||
// At this point, SectionTableAddr = &__bss_section_table;
|
|
||||||
// Zero fill the bss segment
|
|
||||||
while (SectionTableAddr < &__bss_section_table_end) {
|
|
||||||
ExeAddr = *SectionTableAddr++;
|
|
||||||
SectionLen = *SectionTableAddr++;
|
|
||||||
bss_init(ExeAddr, SectionLen);
|
|
||||||
}
|
|
||||||
|
|
||||||
#if !defined (__USE_LPCOPEN)
|
|
||||||
// LPCOpen init code deals with FP and VTOR initialisation
|
|
||||||
#if defined (__VFP_FP__) && !defined (__SOFTFP__)
|
|
||||||
/*
|
|
||||||
* Code to enable the Cortex-M4 FPU only included
|
|
||||||
* if appropriate build options have been selected.
|
|
||||||
* Code taken from Section 7.1, Cortex-M4 TRM (DDI0439C)
|
|
||||||
*/
|
|
||||||
// CPACR is located at address 0xE000ED88
|
|
||||||
asm("LDR.W R0, =0xE000ED88");
|
|
||||||
// Read CPACR
|
|
||||||
asm("LDR R1, [R0]");
|
|
||||||
// Set bits 20-23 to enable CP10 and CP11 coprocessors
|
|
||||||
asm(" ORR R1, R1, #(0xF << 20)");
|
|
||||||
// Write back the modified value to the CPACR
|
|
||||||
asm("STR R1, [R0]");
|
|
||||||
#endif // (__VFP_FP__) && !(__SOFTFP__)
|
|
||||||
// ******************************
|
|
||||||
// Check to see if we are running the code from a non-zero
|
|
||||||
// address (eg RAM, external flash), in which case we need
|
|
||||||
// to modify the VTOR register to tell the CPU that the
|
|
||||||
// vector table is located at a non-0x0 address.
|
|
||||||
|
|
||||||
// Note that we do not use the CMSIS register access mechanism,
|
|
||||||
// as there is no guarantee that the project has been configured
|
|
||||||
// to use CMSIS.
|
|
||||||
unsigned int * pSCB_VTOR = (unsigned int *) 0xE000ED08;
|
|
||||||
if ((unsigned int *) g_pfnVectors != (unsigned int *) 0x00000000) {
|
|
||||||
// CMSIS : SCB->VTOR = <address of vector table>
|
|
||||||
*pSCB_VTOR = (unsigned int) g_pfnVectors;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if defined (__USE_CMSIS)
|
|
||||||
SystemInit();
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if defined (__cplusplus)
|
|
||||||
//
|
|
||||||
// Call C++ library initialisation
|
|
||||||
//
|
|
||||||
__libc_init_array();
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if defined (__REDLIB__)
|
|
||||||
// Call the Redlib library, which in turn calls main()
|
|
||||||
__main();
|
|
||||||
#else
|
|
||||||
main();
|
|
||||||
#endif
|
|
||||||
|
|
||||||
//
|
|
||||||
// main() shouldn't return, but if it does, we'll just enter an infinite loop
|
|
||||||
//
|
|
||||||
while (1) {
|
|
||||||
;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//*****************************************************************************
|
|
||||||
// Default exception handlers. Override the ones here by defining your own
|
|
||||||
// handler routines in your application code.
|
|
||||||
//*****************************************************************************
|
|
||||||
__attribute__ ((section(".after_vectors")))
|
|
||||||
void NMI_Handler(void) {
|
|
||||||
while (1) {
|
|
||||||
}
|
|
||||||
}
|
|
||||||
__attribute__ ((section(".after_vectors")))
|
|
||||||
void HardFault_Handler(void) {
|
|
||||||
while (1) {
|
|
||||||
}
|
|
||||||
}
|
|
||||||
__attribute__ ((section(".after_vectors")))
|
|
||||||
void MemManage_Handler(void) {
|
|
||||||
while (1) {
|
|
||||||
}
|
|
||||||
}
|
|
||||||
__attribute__ ((section(".after_vectors")))
|
|
||||||
void BusFault_Handler(void) {
|
|
||||||
while (1) {
|
|
||||||
}
|
|
||||||
}
|
|
||||||
__attribute__ ((section(".after_vectors")))
|
|
||||||
void UsageFault_Handler(void) {
|
|
||||||
while (1) {
|
|
||||||
}
|
|
||||||
}
|
|
||||||
__attribute__ ((section(".after_vectors")))
|
|
||||||
void SVC_Handler(void) {
|
|
||||||
while (1) {
|
|
||||||
}
|
|
||||||
}
|
|
||||||
__attribute__ ((section(".after_vectors")))
|
|
||||||
void DebugMon_Handler(void) {
|
|
||||||
while (1) {
|
|
||||||
}
|
|
||||||
}
|
|
||||||
__attribute__ ((section(".after_vectors")))
|
|
||||||
void PendSV_Handler(void) {
|
|
||||||
while (1) {
|
|
||||||
}
|
|
||||||
}
|
|
||||||
__attribute__ ((section(".after_vectors")))
|
|
||||||
void SysTick_Handler(void) {
|
|
||||||
while (1) {
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//*****************************************************************************
|
|
||||||
//
|
|
||||||
// Processor ends up here if an unexpected interrupt occurs or a specific
|
|
||||||
// handler is not present in the application code.
|
|
||||||
//
|
|
||||||
//*****************************************************************************
|
|
||||||
__attribute__ ((section(".after_vectors")))
|
|
||||||
void IntDefaultHandler(void) {
|
|
||||||
while (1) {
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,463 +0,0 @@
|
||||||
//*****************************************************************************
|
|
||||||
// LPC43xx (Cortex M0 SUB) Startup code for use with LPCXpresso IDE
|
|
||||||
//
|
|
||||||
// Version : 131115
|
|
||||||
//*****************************************************************************
|
|
||||||
//
|
|
||||||
// Copyright(C) NXP Semiconductors, 2013
|
|
||||||
// All rights reserved.
|
|
||||||
//
|
|
||||||
// Software that is described herein is for illustrative purposes only
|
|
||||||
// which provides customers with programming information regarding the
|
|
||||||
// LPC products. This software is supplied "AS IS" without any warranties of
|
|
||||||
// any kind, and NXP Semiconductors and its licensor disclaim any and
|
|
||||||
// all warranties, express or implied, including all implied warranties of
|
|
||||||
// merchantability, fitness for a particular purpose and non-infringement of
|
|
||||||
// intellectual property rights. NXP Semiconductors assumes no responsibility
|
|
||||||
// or liability for the use of the software, conveys no license or rights under any
|
|
||||||
// patent, copyright, mask work right, or any other intellectual property rights in
|
|
||||||
// or to any products. NXP Semiconductors reserves the right to make changes
|
|
||||||
// in the software without notification. NXP Semiconductors also makes no
|
|
||||||
// representation or warranty that such application will be suitable for the
|
|
||||||
// specified use without further testing or modification.
|
|
||||||
//
|
|
||||||
// Permission to use, copy, modify, and distribute this software and its
|
|
||||||
// documentation is hereby granted, under NXP Semiconductors' and its
|
|
||||||
// licensor's relevant copyrights in the software, without fee, provided that it
|
|
||||||
// is used in conjunction with NXP Semiconductors microcontrollers. This
|
|
||||||
// copyright, permission, and disclaimer notice must appear in all copies of
|
|
||||||
// this code.
|
|
||||||
//*****************************************************************************
|
|
||||||
|
|
||||||
#if defined (__cplusplus)
|
|
||||||
#ifdef __REDLIB__
|
|
||||||
#error Redlib does not support C++
|
|
||||||
#else
|
|
||||||
//*****************************************************************************
|
|
||||||
//
|
|
||||||
// The entry point for the C++ library startup
|
|
||||||
//
|
|
||||||
//*****************************************************************************
|
|
||||||
extern "C" {
|
|
||||||
extern void __libc_init_array(void);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#define WEAK __attribute__ ((weak))
|
|
||||||
#define ALIAS(f) __attribute__ ((weak, alias (#f)))
|
|
||||||
|
|
||||||
#if defined (__USE_CMSIS) || defined (__USE_LPCOPEN)
|
|
||||||
void SystemInit(void);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
//*****************************************************************************
|
|
||||||
#if defined (__cplusplus)
|
|
||||||
extern "C" {
|
|
||||||
#endif
|
|
||||||
|
|
||||||
//*****************************************************************************
|
|
||||||
//
|
|
||||||
// Forward declaration of the default handlers. These are aliased.
|
|
||||||
// When the application defines a handler (with the same name), this will
|
|
||||||
// automatically take precedence over these weak definitions
|
|
||||||
//
|
|
||||||
//*****************************************************************************
|
|
||||||
void ResetISR(void);
|
|
||||||
#if defined (__USE_LPCOPEN)
|
|
||||||
WEAK void NMI_Handler(void);
|
|
||||||
WEAK void HardFault_Handler(void);
|
|
||||||
WEAK void SVC_Handler(void);
|
|
||||||
WEAK void PendSV_Handler(void);
|
|
||||||
WEAK void SysTick_Handler(void);
|
|
||||||
WEAK void IntDefaultHandler(void);
|
|
||||||
#else
|
|
||||||
WEAK void M0S_NMI_Handler(void);
|
|
||||||
WEAK void M0S_HardFault_Handler (void);
|
|
||||||
WEAK void M0S_SVC_Handler(void);
|
|
||||||
WEAK void M0S_PendSV_Handler(void);
|
|
||||||
WEAK void M0S_SysTick_Handler(void);
|
|
||||||
WEAK void M0S_IntDefaultHandler(void);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
//*****************************************************************************
|
|
||||||
//
|
|
||||||
// Forward declaration of the specific IRQ handlers. These are aliased
|
|
||||||
// to the IntDefaultHandler, which is a 'forever' loop. When the application
|
|
||||||
// defines a handler (with the same name), this will automatically take
|
|
||||||
// precedence over these weak definitions
|
|
||||||
//
|
|
||||||
//*****************************************************************************
|
|
||||||
#if defined (__USE_LPCOPEN)
|
|
||||||
void DAC_IRQHandler(void) ALIAS(IntDefaultHandler);
|
|
||||||
void M4_IRQHandler(void) ALIAS(IntDefaultHandler);
|
|
||||||
void DMA_IRQHandler(void) ALIAS(IntDefaultHandler);
|
|
||||||
void SGPIO_INPUT_IRQHandler(void) ALIAS(IntDefaultHandler);
|
|
||||||
void SGPIO_MATCH_IRQHandler(void) ALIAS(IntDefaultHandler);
|
|
||||||
void SGPIO_SHIFT_IRQHandler(void) ALIAS(IntDefaultHandler);
|
|
||||||
void SGPIO_POS_IRQHandler(void) ALIAS(IntDefaultHandler);
|
|
||||||
void USB0_IRQHandler(void) ALIAS(IntDefaultHandler);
|
|
||||||
void USB1_IRQHandler(void) ALIAS(IntDefaultHandler);
|
|
||||||
void SCT_IRQHandler(void) ALIAS(IntDefaultHandler);
|
|
||||||
void RIT_IRQHandler(void) ALIAS(IntDefaultHandler);
|
|
||||||
void GINT1_IRQHandler(void) ALIAS(IntDefaultHandler);
|
|
||||||
void TIMER1_IRQHandler(void) ALIAS(IntDefaultHandler);
|
|
||||||
void TIMER2_IRQHandler(void) ALIAS(IntDefaultHandler);
|
|
||||||
void GPIO5_IRQHandler(void) ALIAS(IntDefaultHandler);
|
|
||||||
void ADC0_IRQHandler(void) ALIAS(IntDefaultHandler);
|
|
||||||
void MCPWM_IRQHandler(void) ALIAS(IntDefaultHandler);
|
|
||||||
void I2C0_IRQHandler(void) ALIAS(IntDefaultHandler);
|
|
||||||
void I2C1_IRQHandler(void) ALIAS(IntDefaultHandler);
|
|
||||||
void SPI_IRQHandler(void) ALIAS(IntDefaultHandler);
|
|
||||||
void ADC1_IRQHandler(void) ALIAS(IntDefaultHandler);
|
|
||||||
void SSP0_SSP1_IRQHandler(void) ALIAS(IntDefaultHandler);
|
|
||||||
void EVRT_IRQHandler(void) ALIAS(IntDefaultHandler);
|
|
||||||
void UART0_IRQHandler(void) ALIAS(IntDefaultHandler);
|
|
||||||
void UART1_IRQHandler(void) ALIAS(IntDefaultHandler);
|
|
||||||
void UART2_CAN1_IRQHandler(void) ALIAS(IntDefaultHandler);
|
|
||||||
void UART3_IRQHandler(void) ALIAS(IntDefaultHandler);
|
|
||||||
void I2S0_I2S1_QEI_IRQHandler(void) ALIAS(IntDefaultHandler);
|
|
||||||
void CAN0_IRQHandler(void) ALIAS(IntDefaultHandler);
|
|
||||||
void SPIFI_ADCHS_IRQHandler(void) ALIAS(IntDefaultHandler);
|
|
||||||
void M0APP_IRQHandler(void) ALIAS(IntDefaultHandler);
|
|
||||||
#else
|
|
||||||
void M0S_DAC_IRQHandler(void) ALIAS(M0S_IntDefaultHandler);
|
|
||||||
void M0S_M4CORE_IRQHandler(void) ALIAS(M0S_IntDefaultHandler);
|
|
||||||
void M0S_DMA_IRQHandler(void) ALIAS(M0S_IntDefaultHandler);
|
|
||||||
void M0S_SGPIO_INPUT_IRQHandler(void) ALIAS(M0S_IntDefaultHandler);
|
|
||||||
void M0S_SGPIO_MATCH_IRQHandler(void) ALIAS(M0S_IntDefaultHandler);
|
|
||||||
void M0S_SGPIO_SHIFT_IRQHandler(void) ALIAS(M0S_IntDefaultHandler);
|
|
||||||
void M0S_SGPIO_POS_IRQHandler(void) ALIAS(M0S_IntDefaultHandler);
|
|
||||||
void M0S_USB0_IRQHandler(void) ALIAS(M0S_IntDefaultHandler);
|
|
||||||
void M0S_USB1_IRQHandler(void) ALIAS(M0S_IntDefaultHandler);
|
|
||||||
void M0S_SCT_IRQHandler(void) ALIAS(M0S_IntDefaultHandler);
|
|
||||||
void M0S_RITIMER_IRQHandler(void) ALIAS(M0S_IntDefaultHandler);
|
|
||||||
void M0S_GINT1_IRQHandler(void) ALIAS(M0S_IntDefaultHandler);
|
|
||||||
void M0S_TIMER1_IRQHandler(void) ALIAS(M0S_IntDefaultHandler);
|
|
||||||
void M0S_TIMER2_IRQHandler(void) ALIAS(M0S_IntDefaultHandler);
|
|
||||||
void M0S_PIN_INT5_IRQHandler(void) ALIAS(M0S_IntDefaultHandler);
|
|
||||||
void M0S_ADC0_IRQHandler(void) ALIAS(M0S_IntDefaultHandler);
|
|
||||||
void M0S_MCPWM_IRQHandler(void) ALIAS(M0S_IntDefaultHandler);
|
|
||||||
void M0S_I2C0_IRQHandler(void) ALIAS(M0S_IntDefaultHandler);
|
|
||||||
void M0S_I2C1_IRQHandler(void) ALIAS(M0S_IntDefaultHandler);
|
|
||||||
void M0S_SPI_IRQHandler(void) ALIAS(M0S_IntDefaultHandler);
|
|
||||||
void M0S_ADC1_IRQHandler(void) ALIAS(M0S_IntDefaultHandler);
|
|
||||||
void M0S_SSP0_OR_SSP1_IRQHandler(void) ALIAS(M0S_IntDefaultHandler);
|
|
||||||
void M0S_EVENTROUTER_IRQHandler(void) ALIAS(M0S_IntDefaultHandler);
|
|
||||||
void M0S_USART0_IRQHandler(void) ALIAS(M0S_IntDefaultHandler);
|
|
||||||
void M0S_UART1_IRQHandler(void) ALIAS(M0S_IntDefaultHandler);
|
|
||||||
void M0S_USART2_OR_C_CAN1_IRQHandler(void) ALIAS(M0S_IntDefaultHandler);
|
|
||||||
void M0S_USART3_IRQHandler(void) ALIAS(M0S_IntDefaultHandler);
|
|
||||||
void M0S_I2C0_OR_I2C1_OR_I2S1_OR_QEI_IRQHandler(void) ALIAS(M0S_IntDefaultHandler);
|
|
||||||
void M0S_C_CAN0_IRQHandler(void) ALIAS(M0S_IntDefaultHandler);
|
|
||||||
void M0S_SPIFI_OR_VADC_IRQHandler(void) ALIAS(M0S_IntDefaultHandler);
|
|
||||||
void M0S_M0APP_IRQHandler(void) ALIAS(M0S_IntDefaultHandler);
|
|
||||||
#endif
|
|
||||||
//*****************************************************************************
|
|
||||||
//
|
|
||||||
// The entry point for the application.
|
|
||||||
// __main() is the entry point for Redlib based applications
|
|
||||||
// main() is the entry point for Newlib based applications
|
|
||||||
//
|
|
||||||
//*****************************************************************************
|
|
||||||
#if defined (__REDLIB__)
|
|
||||||
extern void __main(void);
|
|
||||||
#endif
|
|
||||||
extern int main(void);
|
|
||||||
//*****************************************************************************
|
|
||||||
//
|
|
||||||
// External declaration for the pointer to the stack top from the Linker Script
|
|
||||||
//
|
|
||||||
//*****************************************************************************
|
|
||||||
extern void _vStackTop(void);
|
|
||||||
|
|
||||||
//*****************************************************************************
|
|
||||||
#if defined (__cplusplus)
|
|
||||||
} // extern "C"
|
|
||||||
#endif
|
|
||||||
//*****************************************************************************
|
|
||||||
//
|
|
||||||
// The vector table.
|
|
||||||
// This relies on the linker script to place at correct location in memory.
|
|
||||||
//
|
|
||||||
//*****************************************************************************
|
|
||||||
extern void (* const g_pfnVectors[])(void);
|
|
||||||
__attribute__ ((section(".isr_vector")))
|
|
||||||
void (* const g_pfnVectors[])(void) = {
|
|
||||||
|
|
||||||
#if defined (__USE_LPCOPEN)
|
|
||||||
// Core Level - CM0
|
|
||||||
&_vStackTop, // The initial stack pointer
|
|
||||||
ResetISR, // 1 The reset handler
|
|
||||||
NMI_Handler, // The NMI handler
|
|
||||||
HardFault_Handler, // The hard fault handler
|
|
||||||
0, // 4 Reserved
|
|
||||||
0, // 5 Reserved
|
|
||||||
0, // 6 Reserved
|
|
||||||
0, // 7 Reserved
|
|
||||||
0, // 8 Reserved
|
|
||||||
0, // 9 Reserved
|
|
||||||
0, // 10 Reserved
|
|
||||||
SVC_Handler, // SVCall handler
|
|
||||||
0, // Reserved
|
|
||||||
0, // Reserved
|
|
||||||
PendSV_Handler, // The PendSV handler
|
|
||||||
SysTick_Handler, // The SysTick handler
|
|
||||||
|
|
||||||
// Chip Level - 43xx M0SUB core
|
|
||||||
DAC_IRQHandler, // 16
|
|
||||||
M4_IRQHandler, // 17 Interrupt from M4 Core
|
|
||||||
DMA_IRQHandler, // 18 General Purpose DMA
|
|
||||||
0, // 19 Reserved
|
|
||||||
SGPIO_INPUT_IRQHandler, // 20
|
|
||||||
SGPIO_MATCH_IRQHandler, // 21
|
|
||||||
SGPIO_SHIFT_IRQHandler, // 22
|
|
||||||
SGPIO_POS_IRQHandler, // 23
|
|
||||||
USB0_IRQHandler, // 24 USB0
|
|
||||||
USB1_IRQHandler, // 25 USB1
|
|
||||||
SCT_IRQHandler , // 26 State Configurable Timer
|
|
||||||
RIT_IRQHandler, // 27 Repetitive Interrupt Timer
|
|
||||||
GINT1_IRQHandler, // 28 GINT1
|
|
||||||
TIMER1_IRQHandler, // 29 Timer1
|
|
||||||
TIMER2_IRQHandler, // 30 Timer2
|
|
||||||
GPIO5_IRQHandler, // 31
|
|
||||||
MCPWM_IRQHandler, // 32 Motor Control PWM
|
|
||||||
ADC0_IRQHandler, // 33 ADC0
|
|
||||||
I2C0_IRQHandler, // 34
|
|
||||||
I2C1_IRQHandler, // 35
|
|
||||||
SPI_IRQHandler, // 36
|
|
||||||
ADC1_IRQHandler, // 37
|
|
||||||
SSP0_SSP1_IRQHandler, // 38
|
|
||||||
EVRT_IRQHandler, // 39 Event Router
|
|
||||||
UART0_IRQHandler, // 41 USART0
|
|
||||||
UART1_IRQHandler, // 41 UART1
|
|
||||||
UART2_CAN1_IRQHandler, // 42 USART2 or C CAN1
|
|
||||||
UART3_IRQHandler, // 43 USART3
|
|
||||||
I2S0_I2S1_QEI_IRQHandler, // 35 I2C0 or I2C1 or I2S1 or QEI
|
|
||||||
CAN0_IRQHandler, // 45 C CAN0
|
|
||||||
SPIFI_ADCHS_IRQHandler, // 46
|
|
||||||
M0APP_IRQHandler, // 47 Interrupt from M0APP
|
|
||||||
};
|
|
||||||
#else
|
|
||||||
// Core Level - CM0
|
|
||||||
&_vStackTop, // The initial stack pointer
|
|
||||||
ResetISR, // 1 The reset handler
|
|
||||||
M0S_NMI_Handler, // 2 The NMI handler
|
|
||||||
M0S_HardFault_Handler, // 3 The hard fault handler
|
|
||||||
0, // 4 Reserved
|
|
||||||
0, // 5 Reserved
|
|
||||||
0, // 6 Reserved
|
|
||||||
0, // 7 Reserved
|
|
||||||
0, // 8 Reserved
|
|
||||||
0, // 9 Reserved
|
|
||||||
0, // 10 Reserved
|
|
||||||
M0S_SVC_Handler, // 11 SVCall handler
|
|
||||||
M0S_DebugMon_Handler, // 12 Debug monitor handler
|
|
||||||
0, // 13 Reserved
|
|
||||||
M0S_PendSV_Handler, // 14 The PendSV handler
|
|
||||||
M0S_SysTick_Handler, // 15 The SysTick handler
|
|
||||||
|
|
||||||
// Chip Level - LPC43 (CM0 SUB)
|
|
||||||
M0S_DAC_IRQHandler, // 16
|
|
||||||
M0S_M4CORE_IRQHandler, // 17 Interrupt from M4 Core
|
|
||||||
M0S_DMA_IRQHandler, // 18 General Purpose DMA
|
|
||||||
0, // 19 Reserved
|
|
||||||
M0S_SGPIO_INPUT_IRQHandler, // 20
|
|
||||||
M0S_SGPIO_MATCH_IRQHandler, // 21
|
|
||||||
M0S_SGPIO_SHIFT_IRQHandler, // 22
|
|
||||||
M0S_SGPIO_POS_IRQHandler, // 23
|
|
||||||
M0S_USB0_IRQHandler, // 24 USB0
|
|
||||||
M0S_USB1_IRQHandler, // 25 USB1
|
|
||||||
M0S_SCT_IRQHandler , // 26 State Configurable Timer
|
|
||||||
M0S_RITIMER_IRQHandler, // 27 Repetitive Interrupt Timer
|
|
||||||
M0S_GINT1_IRQHandler, // 28 GINT1
|
|
||||||
M0S_TIMER1_IRQHandler, // 29 Timer1
|
|
||||||
M0S_TIMER2_IRQHandler, // 30 Timer2
|
|
||||||
M0S_PIN_INT5_IRQHandler, // 31
|
|
||||||
M0S_MCPWM_IRQHandler, // 32 Motor Control PWM
|
|
||||||
M0S_ADC0_IRQHandler, // 33 ADC0
|
|
||||||
M0S_I2C0_IRQHandler, // 34
|
|
||||||
M0S_I2C1_IRQHandler, // 35
|
|
||||||
M0S_SPI_IRQHandler, // 36
|
|
||||||
M0S_ADC1_IRQHandler, // 37
|
|
||||||
M0S_SSP0_OR_SSP1_IRQHandler, // 38
|
|
||||||
M0S_EVENTROUTER_IRQHandler, // 39 Event Router
|
|
||||||
M0S_USART0_IRQHandler, // 41 USART0
|
|
||||||
M0S_UART1_IRQHandler, // 41 UART1
|
|
||||||
M0S_USART2_OR_C_CAN1_IRQHandler, // 42 USART2 or C CAN1
|
|
||||||
M0S_USART3_IRQHandler, // 43 USART3
|
|
||||||
M0S_I2C0_OR_I2C1_OR_I2S1_OR_QEI_IRQHandler,
|
|
||||||
// 35 I2C0 or I2C1 or I2S1 or QEI
|
|
||||||
M0S_C_CAN0_IRQHandler, // 45 C CAN0
|
|
||||||
M0S_SPIFI_OR_VADC_IRQHandler, // 46
|
|
||||||
M0S_M0APP_IRQHandler, // 47 Interrupt from M0APP
|
|
||||||
};
|
|
||||||
#endif
|
|
||||||
//*****************************************************************************
|
|
||||||
// Functions to carry out the initialization of RW and BSS data sections. These
|
|
||||||
// are written as separate functions rather than being inlined within the
|
|
||||||
// ResetISR() function in order to cope with MCUs with multiple banks of
|
|
||||||
// memory.
|
|
||||||
//*****************************************************************************
|
|
||||||
__attribute__ ((section(".after_vectors")))
|
|
||||||
void data_init(unsigned int romstart, unsigned int start, unsigned int len) {
|
|
||||||
unsigned int *pulDest = (unsigned int*) start;
|
|
||||||
unsigned int *pulSrc = (unsigned int*) romstart;
|
|
||||||
unsigned int loop;
|
|
||||||
for (loop = 0; loop < len; loop = loop + 4)
|
|
||||||
*pulDest++ = *pulSrc++;
|
|
||||||
}
|
|
||||||
|
|
||||||
__attribute__ ((section(".after_vectors")))
|
|
||||||
void bss_init(unsigned int start, unsigned int len) {
|
|
||||||
unsigned int *pulDest = (unsigned int*) start;
|
|
||||||
unsigned int loop;
|
|
||||||
for (loop = 0; loop < len; loop = loop + 4)
|
|
||||||
*pulDest++ = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
//*****************************************************************************
|
|
||||||
// The following symbols are constructs generated by the linker, indicating
|
|
||||||
// the location of various points in the "Global Section Table". This table is
|
|
||||||
// created by the linker via the Code Red managed linker script mechanism. It
|
|
||||||
// contains the load address, execution address and length of each RW data
|
|
||||||
// section and the execution and length of each BSS (zero initialized) section.
|
|
||||||
//*****************************************************************************
|
|
||||||
extern unsigned int __data_section_table;
|
|
||||||
extern unsigned int __data_section_table_end;
|
|
||||||
extern unsigned int __bss_section_table;
|
|
||||||
extern unsigned int __bss_section_table_end;
|
|
||||||
|
|
||||||
//*****************************************************************************
|
|
||||||
// Reset entry point for your code.
|
|
||||||
// Sets up a simple runtime environment and initializes the C/C++
|
|
||||||
// library.
|
|
||||||
//
|
|
||||||
//*****************************************************************************
|
|
||||||
void
|
|
||||||
ResetISR(void) {
|
|
||||||
|
|
||||||
// ******************************
|
|
||||||
// Modify CREG->M0SUBMEMMAP so that M0 looks in correct place
|
|
||||||
// for its vector table when an exception is triggered.
|
|
||||||
// Note that we do not use the CMSIS register access mechanism,
|
|
||||||
// as there is no guarantee that the project has been configured
|
|
||||||
// to use CMSIS.
|
|
||||||
unsigned int *pCREG_M0SUBMEMMAP = (unsigned int *) 0x40043308;
|
|
||||||
// CMSIS : CREG->M0SUBMEMMAP = <address of vector table>
|
|
||||||
*pCREG_M0SUBMEMMAP = (unsigned int)g_pfnVectors;
|
|
||||||
|
|
||||||
//
|
|
||||||
// Copy the data sections from flash to SRAM.
|
|
||||||
//
|
|
||||||
unsigned int LoadAddr, ExeAddr, SectionLen;
|
|
||||||
unsigned int *SectionTableAddr;
|
|
||||||
|
|
||||||
// Load base address of Global Section Table
|
|
||||||
SectionTableAddr = &__data_section_table;
|
|
||||||
|
|
||||||
// Copy the data sections from flash to SRAM.
|
|
||||||
while (SectionTableAddr < &__data_section_table_end) {
|
|
||||||
LoadAddr = *SectionTableAddr++;
|
|
||||||
ExeAddr = *SectionTableAddr++;
|
|
||||||
SectionLen = *SectionTableAddr++;
|
|
||||||
data_init(LoadAddr, ExeAddr, SectionLen);
|
|
||||||
}
|
|
||||||
// At this point, SectionTableAddr = &__bss_section_table;
|
|
||||||
// Zero fill the bss segment
|
|
||||||
while (SectionTableAddr < &__bss_section_table_end) {
|
|
||||||
ExeAddr = *SectionTableAddr++;
|
|
||||||
SectionLen = *SectionTableAddr++;
|
|
||||||
bss_init(ExeAddr, SectionLen);
|
|
||||||
}
|
|
||||||
|
|
||||||
// **********************************************************
|
|
||||||
// No need to call SystemInit() here, as master CM4 cpu will
|
|
||||||
// have done the main system set up before enabling CM0.
|
|
||||||
// **********************************************************
|
|
||||||
|
|
||||||
#if defined (__cplusplus)
|
|
||||||
//
|
|
||||||
// Call C++ library initialisation
|
|
||||||
//
|
|
||||||
__libc_init_array();
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if defined (__REDLIB__)
|
|
||||||
// Call the Redlib library, which in turn calls main()
|
|
||||||
__main() ;
|
|
||||||
#else
|
|
||||||
main();
|
|
||||||
#endif
|
|
||||||
|
|
||||||
//
|
|
||||||
// main() shouldn't return, but if it does, we'll just enter an infinite loop
|
|
||||||
//
|
|
||||||
while (1) {
|
|
||||||
;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//*****************************************************************************
|
|
||||||
// Default exception handlers. Override the ones here by defining your own
|
|
||||||
// handler routines in your application code.
|
|
||||||
//*****************************************************************************
|
|
||||||
__attribute__ ((section(".after_vectors")))
|
|
||||||
#if defined (__USE_LPCOPEN)
|
|
||||||
void NMI_Handler(void)
|
|
||||||
#else
|
|
||||||
void M0S_NMI_Handler(void)
|
|
||||||
#endif
|
|
||||||
{ while(1) { }
|
|
||||||
}
|
|
||||||
|
|
||||||
__attribute__ ((section(".after_vectors")))
|
|
||||||
#if defined (__USE_LPCOPEN)
|
|
||||||
void HardFault_Handler(void)
|
|
||||||
#else
|
|
||||||
void M0S_HardFault_Handler(void)
|
|
||||||
#endif
|
|
||||||
{ while(1) { }
|
|
||||||
}
|
|
||||||
|
|
||||||
__attribute__ ((section(".after_vectors")))
|
|
||||||
#if defined (__USE_LPCOPEN)
|
|
||||||
void SVC_Handler(void)
|
|
||||||
#else
|
|
||||||
void M0S_SVC_Handler(void)
|
|
||||||
#endif
|
|
||||||
{ while(1) { }
|
|
||||||
}
|
|
||||||
|
|
||||||
__attribute__ ((section(".after_vectors")))
|
|
||||||
#if defined (__USE_LPCOPEN)
|
|
||||||
void PendSV_Handler(void)
|
|
||||||
#else
|
|
||||||
void M0S_PendSV_Handler(void)
|
|
||||||
#endif
|
|
||||||
{ while(1) { }
|
|
||||||
}
|
|
||||||
|
|
||||||
__attribute__ ((section(".after_vectors")))
|
|
||||||
#if defined (__USE_LPCOPEN)
|
|
||||||
void SysTick_Handler(void)
|
|
||||||
#else
|
|
||||||
void M0S_SysTick_Handler(void)
|
|
||||||
#endif
|
|
||||||
{ while(1) { }
|
|
||||||
}
|
|
||||||
|
|
||||||
//*****************************************************************************
|
|
||||||
//
|
|
||||||
// Processor ends up here if an unexpected interrupt occurs or a specific
|
|
||||||
// handler is not present in the application code.
|
|
||||||
//
|
|
||||||
//*****************************************************************************
|
|
||||||
__attribute__ ((section(".after_vectors")))
|
|
||||||
#if defined (__USE_LPCOPEN)
|
|
||||||
void IntDefaultHandler(void)
|
|
||||||
#else
|
|
||||||
void M0S_IntDefaultHandler(void)
|
|
||||||
#endif
|
|
||||||
{ while(1) { }
|
|
||||||
}
|
|
|
@ -0,0 +1,266 @@
|
||||||
|
/*****************************************************************************/
|
||||||
|
/* startup_LPC43xx.s: Startup file for LPC43xx device series */
|
||||||
|
/*****************************************************************************/
|
||||||
|
/* Version: CodeSourcery Sourcery G++ Lite (with CS3) */
|
||||||
|
/*****************************************************************************/
|
||||||
|
|
||||||
|
.syntax unified
|
||||||
|
.cpu cortex-m4
|
||||||
|
.fpu softvfp
|
||||||
|
.thumb
|
||||||
|
|
||||||
|
.word _sidata
|
||||||
|
.word _sdata
|
||||||
|
.word _edata
|
||||||
|
.word _sbss
|
||||||
|
.word _ebss
|
||||||
|
|
||||||
|
|
||||||
|
.equ Sign_Value, 0x5A5A5A5A
|
||||||
|
|
||||||
|
/* Vector Table */
|
||||||
|
|
||||||
|
.section ".interrupt_vector"
|
||||||
|
.globl __interrupt_vector
|
||||||
|
.type __interrupt_vector, %function
|
||||||
|
|
||||||
|
__interrupt_vector:
|
||||||
|
.long _estack /* Top of Stack */
|
||||||
|
.long Reset_Handler /* 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 Sign_Value /* Reserved */
|
||||||
|
.long 0 /* Reserved */
|
||||||
|
.long 0 /* Reserved */
|
||||||
|
.long 0 /* Reserved */
|
||||||
|
.long SVC_Handler /* SVCall Handler */
|
||||||
|
.long DebugMon_Handler /* Debug Monitor Handler */
|
||||||
|
.long 0 /* Reserved */
|
||||||
|
.long PendSV_Handler /* PendSV Handler */
|
||||||
|
.long SysTick_Handler /* SysTick Handler */
|
||||||
|
|
||||||
|
/* External Interrupts */
|
||||||
|
.long DAC_IRQHandler /* 16 D/A Converter */
|
||||||
|
.long M0CORE_IRQHandler /* 17 M0 Core */
|
||||||
|
.long DMA_IRQHandler /* 18 General Purpose DMA */
|
||||||
|
.long EZH_IRQHandler /* 19 EZH/EDM */
|
||||||
|
.long FLASH_EEPROM_IRQHandler /* 20 Reserved for Typhoon */
|
||||||
|
.long ETH_IRQHandler /* 21 Ethernet */
|
||||||
|
.long SDIO_IRQHandler /* 22 SD/MMC */
|
||||||
|
.long LCD_IRQHandler /* 23 LCD */
|
||||||
|
.long USB0_IRQHandler /* 24 USB0 */
|
||||||
|
.long USB1_IRQHandler /* 25 USB1 */
|
||||||
|
.long SCT_IRQHandler /* 26 State Configurable Timer */
|
||||||
|
.long RIT_IRQHandler /* 27 Repetitive Interrupt Timer*/
|
||||||
|
.long TIMER0_IRQHandler /* 28 Timer0 */
|
||||||
|
.long TIMER1_IRQHandler /* 29 Timer1 */
|
||||||
|
.long TIMER2_IRQHandler /* 30 Timer2 */
|
||||||
|
.long TIMER3_IRQHandler /* 31 Timer3 */
|
||||||
|
.long MCPWM_IRQHandler /* 32 Motor Control PWM */
|
||||||
|
.long ADC0_IRQHandler /* 33 A/D Converter 0 */
|
||||||
|
.long I2C0_IRQHandler /* 34 I2C0 */
|
||||||
|
.long I2C1_IRQHandler /* 35 I2C1 */
|
||||||
|
.long SPI_IRQHandler /* 36 SPI */
|
||||||
|
.long ADC1_IRQHandler /* 37 A/D Converter 1 */
|
||||||
|
.long SSP0_IRQHandler /* 38 SSP0 */
|
||||||
|
.long SSP1_IRQHandler /* 39 SSP1 */
|
||||||
|
.long UART0_IRQHandler /* 40 UART0 */
|
||||||
|
.long UART1_IRQHandler /* 41 UART1 */
|
||||||
|
.long UART2_IRQHandler /* 42 UART2 */
|
||||||
|
.long UART3_IRQHandler /* 43 UART3 */
|
||||||
|
.long I2S0_IRQHandler /* 44 I2S0 */
|
||||||
|
.long I2S1_IRQHandler /* 45 I2S1 */
|
||||||
|
.long SPIFI_IRQHandler /* 46 SPI Flash Interface */
|
||||||
|
.long SGPIO_IRQHandler /* 47 SGPIO */
|
||||||
|
.long GPIO0_IRQHandler /* 48 GPIO0 */
|
||||||
|
.long GPIO1_IRQHandler /* 49 GPIO1 */
|
||||||
|
.long GPIO2_IRQHandler /* 50 GPIO2 */
|
||||||
|
.long GPIO3_IRQHandler /* 51 GPIO3 */
|
||||||
|
.long GPIO4_IRQHandler /* 52 GPIO4 */
|
||||||
|
.long GPIO5_IRQHandler /* 53 GPIO5 */
|
||||||
|
.long GPIO6_IRQHandler /* 54 GPIO6 */
|
||||||
|
.long GPIO7_IRQHandler /* 55 GPIO7 */
|
||||||
|
.long GINT0_IRQHandler /* 56 GINT0 */
|
||||||
|
.long GINT1_IRQHandler /* 57 GINT1 */
|
||||||
|
.long EVRT_IRQHandler /* 58 Event Router */
|
||||||
|
.long CAN1_IRQHandler /* 59 C_CAN1 */
|
||||||
|
.long 0 /* 60 Reserved */
|
||||||
|
.long VADC_IRQHandler /* 61 VADC */
|
||||||
|
.long ATIMER_IRQHandler /* 62 ATIMER */
|
||||||
|
.long RTC_IRQHandler /* 63 RTC */
|
||||||
|
.long 0 /* 64 Reserved */
|
||||||
|
.long WDT_IRQHandler /* 65 WDT */
|
||||||
|
.long M0s_IRQHandler /* 66 M0s */
|
||||||
|
.long CAN0_IRQHandler /* 67 C_CAN0 */
|
||||||
|
.long QEI_IRQHandler /* 68 QEI */
|
||||||
|
|
||||||
|
.size __interrupt_vector, . - __interrupt_vector
|
||||||
|
|
||||||
|
|
||||||
|
.thumb
|
||||||
|
|
||||||
|
|
||||||
|
/* Reset Handler */
|
||||||
|
.section .text.Reset_Handler
|
||||||
|
.weak Reset_Handler
|
||||||
|
.type Reset_Handler, %function
|
||||||
|
Reset_Handler:
|
||||||
|
.fnstart
|
||||||
|
.ifdef RAM_MODE
|
||||||
|
/* Clear .bss section (Zero init) */
|
||||||
|
mov R0, #0
|
||||||
|
ldr R1, =__bss_start__
|
||||||
|
ldr R2, =__bss_end__
|
||||||
|
cmp R1,R2
|
||||||
|
beq BSSIsEmpty
|
||||||
|
LoopZI:
|
||||||
|
cmp R1, R2
|
||||||
|
bhs BSSIsEmpty
|
||||||
|
str R0, [R1]
|
||||||
|
add R1, #4
|
||||||
|
blo LoopZI
|
||||||
|
BSSIsEmpty:
|
||||||
|
ldr R0, =SystemInit
|
||||||
|
blx R0
|
||||||
|
ldr R0,=main
|
||||||
|
bx R0
|
||||||
|
.else
|
||||||
|
ldr R0, =SystemInit
|
||||||
|
blx R0
|
||||||
|
ldr R0,=main
|
||||||
|
bx R0
|
||||||
|
.endif
|
||||||
|
|
||||||
|
.pool
|
||||||
|
.cantunwind
|
||||||
|
.fnend
|
||||||
|
.size Reset_Handler,.-Reset_Handler
|
||||||
|
|
||||||
|
.section ".text"
|
||||||
|
|
||||||
|
/* Exception Handlers */
|
||||||
|
|
||||||
|
.weak NMI_Handler
|
||||||
|
.type NMI_Handler, %function
|
||||||
|
NMI_Handler:
|
||||||
|
B .
|
||||||
|
.size NMI_Handler, . - NMI_Handler
|
||||||
|
|
||||||
|
.weak HardFault_Handler
|
||||||
|
.type HardFault_Handler, %function
|
||||||
|
HardFault_Handler:
|
||||||
|
B .
|
||||||
|
.size HardFault_Handler, . - HardFault_Handler
|
||||||
|
|
||||||
|
.weak MemManage_Handler
|
||||||
|
.type MemManage_Handler, %function
|
||||||
|
MemManage_Handler:
|
||||||
|
B .
|
||||||
|
.size MemManage_Handler, . - MemManage_Handler
|
||||||
|
|
||||||
|
.weak BusFault_Handler
|
||||||
|
.type BusFault_Handler, %function
|
||||||
|
BusFault_Handler:
|
||||||
|
B .
|
||||||
|
.size BusFault_Handler, . - BusFault_Handler
|
||||||
|
|
||||||
|
.weak UsageFault_Handler
|
||||||
|
.type UsageFault_Handler, %function
|
||||||
|
UsageFault_Handler:
|
||||||
|
B .
|
||||||
|
.size UsageFault_Handler, . - UsageFault_Handler
|
||||||
|
|
||||||
|
.weak SVC_Handler
|
||||||
|
.type SVC_Handler, %function
|
||||||
|
SVC_Handler:
|
||||||
|
B .
|
||||||
|
.size SVC_Handler, . - SVC_Handler
|
||||||
|
|
||||||
|
.weak DebugMon_Handler
|
||||||
|
.type DebugMon_Handler, %function
|
||||||
|
DebugMon_Handler:
|
||||||
|
B .
|
||||||
|
.size DebugMon_Handler, . - DebugMon_Handler
|
||||||
|
|
||||||
|
.weak PendSV_Handler
|
||||||
|
.type PendSV_Handler, %function
|
||||||
|
PendSV_Handler:
|
||||||
|
B .
|
||||||
|
.size PendSV_Handler, . - PendSV_Handler
|
||||||
|
|
||||||
|
.weak SysTick_Handler
|
||||||
|
.type SysTick_Handler, %function
|
||||||
|
SysTick_Handler:
|
||||||
|
B .
|
||||||
|
.size SysTick_Handler, . - SysTick_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 DAC_IRQHandler
|
||||||
|
IRQ M0CORE_IRQHandler
|
||||||
|
IRQ DMA_IRQHandler
|
||||||
|
IRQ EZH_IRQHandler
|
||||||
|
IRQ FLASH_EEPROM_IRQHandler
|
||||||
|
IRQ ETH_IRQHandler
|
||||||
|
IRQ SDIO_IRQHandler
|
||||||
|
IRQ LCD_IRQHandler
|
||||||
|
IRQ USB0_IRQHandler
|
||||||
|
IRQ USB1_IRQHandler
|
||||||
|
IRQ SCT_IRQHandler
|
||||||
|
IRQ RIT_IRQHandler
|
||||||
|
IRQ TIMER0_IRQHandler
|
||||||
|
IRQ TIMER1_IRQHandler
|
||||||
|
IRQ TIMER2_IRQHandler
|
||||||
|
IRQ TIMER3_IRQHandler
|
||||||
|
IRQ MCPWM_IRQHandler
|
||||||
|
IRQ ADC0_IRQHandler
|
||||||
|
IRQ I2C0_IRQHandler
|
||||||
|
IRQ I2C1_IRQHandler
|
||||||
|
IRQ SPI_IRQHandler
|
||||||
|
IRQ ADC1_IRQHandler
|
||||||
|
IRQ SSP0_IRQHandler
|
||||||
|
IRQ SSP1_IRQHandler
|
||||||
|
IRQ UART0_IRQHandler
|
||||||
|
IRQ UART1_IRQHandler
|
||||||
|
IRQ UART2_IRQHandler
|
||||||
|
IRQ UART3_IRQHandler
|
||||||
|
IRQ I2S0_IRQHandler
|
||||||
|
IRQ I2S1_IRQHandler
|
||||||
|
IRQ SPIFI_IRQHandler
|
||||||
|
IRQ SGPIO_IRQHandler
|
||||||
|
IRQ GPIO0_IRQHandler
|
||||||
|
IRQ GPIO1_IRQHandler
|
||||||
|
IRQ GPIO2_IRQHandler
|
||||||
|
IRQ GPIO3_IRQHandler
|
||||||
|
IRQ GPIO4_IRQHandler
|
||||||
|
IRQ GPIO5_IRQHandler
|
||||||
|
IRQ GPIO6_IRQHandler
|
||||||
|
IRQ GPIO7_IRQHandler
|
||||||
|
IRQ GINT0_IRQHandler
|
||||||
|
IRQ GINT1_IRQHandler
|
||||||
|
IRQ EVRT_IRQHandler
|
||||||
|
IRQ CAN1_IRQHandler
|
||||||
|
IRQ VADC_IRQHandler
|
||||||
|
IRQ ATIMER_IRQHandler
|
||||||
|
IRQ RTC_IRQHandler
|
||||||
|
IRQ WDT_IRQHandler
|
||||||
|
IRQ M0s_IRQHandler
|
||||||
|
IRQ CAN0_IRQHandler
|
||||||
|
IRQ QEI_IRQHandler
|
||||||
|
|
||||||
|
.end
|
|
@ -0,0 +1,266 @@
|
||||||
|
/*****************************************************************************/
|
||||||
|
/* startup_LPC43xx.s: Startup file for LPC43xx device series */
|
||||||
|
/*****************************************************************************/
|
||||||
|
/* Version: CodeSourcery Sourcery G++ Lite (with CS3) */
|
||||||
|
/*****************************************************************************/
|
||||||
|
|
||||||
|
.syntax unified
|
||||||
|
.cpu cortex-m0
|
||||||
|
.fpu softvfp
|
||||||
|
.thumb
|
||||||
|
|
||||||
|
.word _sidata
|
||||||
|
.word _sdata
|
||||||
|
.word _edata
|
||||||
|
.word _sbss
|
||||||
|
.word _ebss
|
||||||
|
|
||||||
|
|
||||||
|
.equ Sign_Value, 0x5A5A5A5A
|
||||||
|
|
||||||
|
/* Vector Table */
|
||||||
|
|
||||||
|
.section ".interrupt_vector"
|
||||||
|
.globl __interrupt_vector
|
||||||
|
.type __interrupt_vector, %function
|
||||||
|
|
||||||
|
__interrupt_vector:
|
||||||
|
.long _estack /* Top of Stack */
|
||||||
|
.long Reset_Handler /* 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 Sign_Value /* Reserved */
|
||||||
|
.long 0 /* Reserved */
|
||||||
|
.long 0 /* Reserved */
|
||||||
|
.long 0 /* Reserved */
|
||||||
|
.long SVC_Handler /* SVCall Handler */
|
||||||
|
.long DebugMon_Handler /* Debug Monitor Handler */
|
||||||
|
.long 0 /* Reserved */
|
||||||
|
.long PendSV_Handler /* PendSV Handler */
|
||||||
|
.long SysTick_Handler /* SysTick Handler */
|
||||||
|
|
||||||
|
/* External Interrupts */
|
||||||
|
.long DAC_IRQHandler /* 16 D/A Converter */
|
||||||
|
.long M4CORE_IRQHandler /* 17 M0 Core */
|
||||||
|
.long DMA_IRQHandler /* 18 General Purpose DMA */
|
||||||
|
.long EZH_IRQHandler /* 19 EZH/EDM */
|
||||||
|
.long FLASH_EEPROM_IRQHandler /* 20 Reserved for Typhoon */
|
||||||
|
.long ETH_IRQHandler /* 21 Ethernet */
|
||||||
|
.long SDIO_IRQHandler /* 22 SD/MMC */
|
||||||
|
.long LCD_IRQHandler /* 23 LCD */
|
||||||
|
.long USB0_IRQHandler /* 24 USB0 */
|
||||||
|
.long USB1_IRQHandler /* 25 USB1 */
|
||||||
|
.long SCT_IRQHandler /* 26 State Configurable Timer */
|
||||||
|
.long RIT_IRQHandler /* 27 Repetitive Interrupt Timer*/
|
||||||
|
.long TIMER0_IRQHandler /* 28 Timer0 */
|
||||||
|
.long TIMER1_IRQHandler /* 29 Timer1 */
|
||||||
|
.long TIMER2_IRQHandler /* 30 Timer2 */
|
||||||
|
.long TIMER3_IRQHandler /* 31 Timer3 */
|
||||||
|
.long MCPWM_IRQHandler /* 32 Motor Control PWM */
|
||||||
|
.long ADC0_IRQHandler /* 33 A/D Converter 0 */
|
||||||
|
.long I2C0_IRQHandler /* 34 I2C0 */
|
||||||
|
.long I2C1_IRQHandler /* 35 I2C1 */
|
||||||
|
.long SPI_IRQHandler /* 36 SPI */
|
||||||
|
.long ADC1_IRQHandler /* 37 A/D Converter 1 */
|
||||||
|
.long SSP0_IRQHandler /* 38 SSP0 */
|
||||||
|
.long SSP1_IRQHandler /* 39 SSP1 */
|
||||||
|
.long UART0_IRQHandler /* 40 UART0 */
|
||||||
|
.long UART1_IRQHandler /* 41 UART1 */
|
||||||
|
.long UART2_IRQHandler /* 42 UART2 */
|
||||||
|
.long UART3_IRQHandler /* 43 UART3 */
|
||||||
|
.long I2S0_IRQHandler /* 44 I2S0 */
|
||||||
|
.long I2S1_IRQHandler /* 45 I2S1 */
|
||||||
|
.long SPIFI_IRQHandler /* 46 SPI Flash Interface */
|
||||||
|
.long SGPIO_IRQHandler /* 47 SGPIO */
|
||||||
|
.long GPIO0_IRQHandler /* 48 GPIO0 */
|
||||||
|
.long GPIO1_IRQHandler /* 49 GPIO1 */
|
||||||
|
.long GPIO2_IRQHandler /* 50 GPIO2 */
|
||||||
|
.long GPIO3_IRQHandler /* 51 GPIO3 */
|
||||||
|
.long GPIO4_IRQHandler /* 52 GPIO4 */
|
||||||
|
.long GPIO5_IRQHandler /* 53 GPIO5 */
|
||||||
|
.long GPIO6_IRQHandler /* 54 GPIO6 */
|
||||||
|
.long GPIO7_IRQHandler /* 55 GPIO7 */
|
||||||
|
.long GINT0_IRQHandler /* 56 GINT0 */
|
||||||
|
.long GINT1_IRQHandler /* 57 GINT1 */
|
||||||
|
.long EVRT_IRQHandler /* 58 Event Router */
|
||||||
|
.long CAN1_IRQHandler /* 59 C_CAN1 */
|
||||||
|
.long 0 /* 60 Reserved */
|
||||||
|
.long VADC_IRQHandler /* 61 VADC */
|
||||||
|
.long ATIMER_IRQHandler /* 62 ATIMER */
|
||||||
|
.long RTC_IRQHandler /* 63 RTC */
|
||||||
|
.long 0 /* 64 Reserved */
|
||||||
|
.long WDT_IRQHandler /* 65 WDT */
|
||||||
|
.long M0s_IRQHandler /* 66 M0s */
|
||||||
|
.long CAN0_IRQHandler /* 67 C_CAN0 */
|
||||||
|
.long QEI_IRQHandler /* 68 QEI */
|
||||||
|
|
||||||
|
.size __interrupt_vector, . - __interrupt_vector
|
||||||
|
|
||||||
|
|
||||||
|
.thumb
|
||||||
|
|
||||||
|
|
||||||
|
/* Reset Handler */
|
||||||
|
.section .text.Reset_Handler
|
||||||
|
.weak Reset_Handler
|
||||||
|
.type Reset_Handler, %function
|
||||||
|
Reset_Handler:
|
||||||
|
.fnstart
|
||||||
|
.ifdef RAM_MODE
|
||||||
|
/* Clear .bss section (Zero init) */
|
||||||
|
mov R0, #0
|
||||||
|
ldr R1, =__bss_start__
|
||||||
|
ldr R2, =__bss_end__
|
||||||
|
cmp R1,R2
|
||||||
|
beq BSSIsEmpty
|
||||||
|
LoopZI:
|
||||||
|
cmp R1, R2
|
||||||
|
bhs BSSIsEmpty
|
||||||
|
str R0, [R1]
|
||||||
|
add R1, #4
|
||||||
|
blo LoopZI
|
||||||
|
BSSIsEmpty:
|
||||||
|
ldr R0, =SystemInit
|
||||||
|
blx R0
|
||||||
|
ldr R0,=main
|
||||||
|
bx R0
|
||||||
|
.else
|
||||||
|
ldr R0, =SystemInit
|
||||||
|
blx R0
|
||||||
|
ldr R0,=main
|
||||||
|
bx R0
|
||||||
|
.endif
|
||||||
|
|
||||||
|
.pool
|
||||||
|
.cantunwind
|
||||||
|
.fnend
|
||||||
|
.size Reset_Handler,.-Reset_Handler
|
||||||
|
|
||||||
|
.section ".text"
|
||||||
|
|
||||||
|
/* Exception Handlers */
|
||||||
|
|
||||||
|
.weak NMI_Handler
|
||||||
|
.type NMI_Handler, %function
|
||||||
|
NMI_Handler:
|
||||||
|
B .
|
||||||
|
.size NMI_Handler, . - NMI_Handler
|
||||||
|
|
||||||
|
.weak HardFault_Handler
|
||||||
|
.type HardFault_Handler, %function
|
||||||
|
HardFault_Handler:
|
||||||
|
B .
|
||||||
|
.size HardFault_Handler, . - HardFault_Handler
|
||||||
|
|
||||||
|
.weak MemManage_Handler
|
||||||
|
.type MemManage_Handler, %function
|
||||||
|
MemManage_Handler:
|
||||||
|
B .
|
||||||
|
.size MemManage_Handler, . - MemManage_Handler
|
||||||
|
|
||||||
|
.weak BusFault_Handler
|
||||||
|
.type BusFault_Handler, %function
|
||||||
|
BusFault_Handler:
|
||||||
|
B .
|
||||||
|
.size BusFault_Handler, . - BusFault_Handler
|
||||||
|
|
||||||
|
.weak UsageFault_Handler
|
||||||
|
.type UsageFault_Handler, %function
|
||||||
|
UsageFault_Handler:
|
||||||
|
B .
|
||||||
|
.size UsageFault_Handler, . - UsageFault_Handler
|
||||||
|
|
||||||
|
.weak SVC_Handler
|
||||||
|
.type SVC_Handler, %function
|
||||||
|
SVC_Handler:
|
||||||
|
B .
|
||||||
|
.size SVC_Handler, . - SVC_Handler
|
||||||
|
|
||||||
|
.weak DebugMon_Handler
|
||||||
|
.type DebugMon_Handler, %function
|
||||||
|
DebugMon_Handler:
|
||||||
|
B .
|
||||||
|
.size DebugMon_Handler, . - DebugMon_Handler
|
||||||
|
|
||||||
|
.weak PendSV_Handler
|
||||||
|
.type PendSV_Handler, %function
|
||||||
|
PendSV_Handler:
|
||||||
|
B .
|
||||||
|
.size PendSV_Handler, . - PendSV_Handler
|
||||||
|
|
||||||
|
.weak SysTick_Handler
|
||||||
|
.type SysTick_Handler, %function
|
||||||
|
SysTick_Handler:
|
||||||
|
B .
|
||||||
|
.size SysTick_Handler, . - SysTick_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 DAC_IRQHandler
|
||||||
|
IRQ M0CORE_IRQHandler
|
||||||
|
IRQ DMA_IRQHandler
|
||||||
|
IRQ EZH_IRQHandler
|
||||||
|
IRQ FLASH_EEPROM_IRQHandler
|
||||||
|
IRQ ETH_IRQHandler
|
||||||
|
IRQ SDIO_IRQHandler
|
||||||
|
IRQ LCD_IRQHandler
|
||||||
|
IRQ USB0_IRQHandler
|
||||||
|
IRQ USB1_IRQHandler
|
||||||
|
IRQ SCT_IRQHandler
|
||||||
|
IRQ RIT_IRQHandler
|
||||||
|
IRQ TIMER0_IRQHandler
|
||||||
|
IRQ TIMER1_IRQHandler
|
||||||
|
IRQ TIMER2_IRQHandler
|
||||||
|
IRQ TIMER3_IRQHandler
|
||||||
|
IRQ MCPWM_IRQHandler
|
||||||
|
IRQ ADC0_IRQHandler
|
||||||
|
IRQ I2C0_IRQHandler
|
||||||
|
IRQ I2C1_IRQHandler
|
||||||
|
IRQ SPI_IRQHandler
|
||||||
|
IRQ ADC1_IRQHandler
|
||||||
|
IRQ SSP0_IRQHandler
|
||||||
|
IRQ SSP1_IRQHandler
|
||||||
|
IRQ UART0_IRQHandler
|
||||||
|
IRQ UART1_IRQHandler
|
||||||
|
IRQ UART2_IRQHandler
|
||||||
|
IRQ UART3_IRQHandler
|
||||||
|
IRQ I2S0_IRQHandler
|
||||||
|
IRQ I2S1_IRQHandler
|
||||||
|
IRQ SPIFI_IRQHandler
|
||||||
|
IRQ SGPIO_IRQHandler
|
||||||
|
IRQ GPIO0_IRQHandler
|
||||||
|
IRQ GPIO1_IRQHandler
|
||||||
|
IRQ GPIO2_IRQHandler
|
||||||
|
IRQ GPIO3_IRQHandler
|
||||||
|
IRQ GPIO4_IRQHandler
|
||||||
|
IRQ GPIO5_IRQHandler
|
||||||
|
IRQ GPIO6_IRQHandler
|
||||||
|
IRQ GPIO7_IRQHandler
|
||||||
|
IRQ GINT0_IRQHandler
|
||||||
|
IRQ GINT1_IRQHandler
|
||||||
|
IRQ EVRT_IRQHandler
|
||||||
|
IRQ CAN1_IRQHandler
|
||||||
|
IRQ VADC_IRQHandler
|
||||||
|
IRQ ATIMER_IRQHandler
|
||||||
|
IRQ RTC_IRQHandler
|
||||||
|
IRQ WDT_IRQHandler
|
||||||
|
IRQ M0s_IRQHandler
|
||||||
|
IRQ CAN0_IRQHandler
|
||||||
|
IRQ QEI_IRQHandler
|
||||||
|
|
||||||
|
.end
|
|
@ -863,7 +863,6 @@ void SystemCoreClockUpdate (void) {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
extern uint32_t getPC (void);
|
|
||||||
|
|
||||||
/*----------------------------------------------------------------------------
|
/*----------------------------------------------------------------------------
|
||||||
Initialize the system
|
Initialize the system
|
||||||
|
@ -877,10 +876,7 @@ void SystemInit (void) {
|
||||||
|
|
||||||
/* Disable SysTick timer */
|
/* Disable SysTick timer */
|
||||||
SysTick->CTRL &= ~(SysTick_CTRL_TICKINT_Msk | SysTick_CTRL_ENABLE_Msk);
|
SysTick->CTRL &= ~(SysTick_CTRL_TICKINT_Msk | SysTick_CTRL_ENABLE_Msk);
|
||||||
#ifdef CORE_M4
|
|
||||||
/* Set vector table pointer */
|
|
||||||
SCB->VTOR = getPC() & 0xFFF00000;
|
|
||||||
#endif
|
|
||||||
/* Configure PLL0 and PLL1, connect CPU clock to selected clock source */
|
/* Configure PLL0 and PLL1, connect CPU clock to selected clock source */
|
||||||
SetClock();
|
SetClock();
|
||||||
|
|
||||||
|
|
|
@ -8,8 +8,8 @@ src = Split('''
|
||||||
NXP/LPC43xx/Source/Templates/system_LPC43xx.c
|
NXP/LPC43xx/Source/Templates/system_LPC43xx.c
|
||||||
''')
|
''')
|
||||||
CPPPATH = [cwd + '/NXP/LPC43xx/Include', cwd + '/../CMSIS/Include']
|
CPPPATH = [cwd + '/NXP/LPC43xx/Include', cwd + '/../CMSIS/Include']
|
||||||
CPPDEFINES = [rtconfig.USE_CORE + ' USE_SPIFI']
|
CPPDEFINES = [rtconfig.USE_CORE]
|
||||||
|
CPPDEFINES += ['USE_SPIFI']
|
||||||
# add for startup script
|
# add for startup script
|
||||||
if rtconfig.USE_CORE =='CORE_M4':
|
if rtconfig.USE_CORE =='CORE_M4':
|
||||||
if rtconfig.CROSS_TOOL == 'gcc':
|
if rtconfig.CROSS_TOOL == 'gcc':
|
||||||
|
|
|
@ -53,7 +53,7 @@ if PLATFORM == 'gcc':
|
||||||
DEVICE += ' -mfpu=fpv4-sp-d16 -mfloat-abi=softfp'
|
DEVICE += ' -mfpu=fpv4-sp-d16 -mfloat-abi=softfp'
|
||||||
CFLAGS = DEVICE
|
CFLAGS = DEVICE
|
||||||
AFLAGS = ' -c' + DEVICE + ' -x assembler-with-cpp -Wa,-mimplicit-it=thumb '
|
AFLAGS = ' -c' + DEVICE + ' -x assembler-with-cpp -Wa,-mimplicit-it=thumb '
|
||||||
LFLAGS = DEVICE + ' -Wl,--gc-sections,-Map=rtthread-lpc43xx.map,-cref,-u,Reset_Handler -T lpc43xx_spifi.ld'
|
LFLAGS = DEVICE + ' -Wl,--gc-sections,-Map=rtthread-lpc43xx.map,-cref,-u,Reset_Handler -T rtthread-lpc43xx_spifi.ld'
|
||||||
|
|
||||||
CPATH = ''
|
CPATH = ''
|
||||||
LPATH = ''
|
LPATH = ''
|
||||||
|
|
|
@ -0,0 +1,133 @@
|
||||||
|
/*
|
||||||
|
* linker script for LPC43xx SPIFI (4Mb NorFlash, 32kB SRAM ) with GNU ld
|
||||||
|
* yiyue.fang 2012-04-14
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Program Entry, set to mark it as "used" and avoid gc */
|
||||||
|
MEMORY
|
||||||
|
{
|
||||||
|
CODE (rx) : ORIGIN = 0x14000000, LENGTH = 0x00400000
|
||||||
|
DATA (rw) : ORIGIN = 0x10000000, LENGTH = 0x00008000
|
||||||
|
}
|
||||||
|
ENTRY(Reset_Handler)
|
||||||
|
_system_stack_size = 0x200;
|
||||||
|
|
||||||
|
SECTIONS
|
||||||
|
{
|
||||||
|
.text :
|
||||||
|
{
|
||||||
|
. = ALIGN(4);
|
||||||
|
KEEP(*(.interrupt_vector)) /* Startup code */
|
||||||
|
. = ALIGN(4);
|
||||||
|
*(.text) /* remaining code */
|
||||||
|
*(.text.*) /* remaining code */
|
||||||
|
*(.rodata) /* read-only data (constants) */
|
||||||
|
*(.rodata*)
|
||||||
|
*(.glue_7)
|
||||||
|
*(.glue_7t)
|
||||||
|
*(.gnu.linkonce.t*)
|
||||||
|
|
||||||
|
/* section information for finsh shell */
|
||||||
|
. = ALIGN(4);
|
||||||
|
__fsymtab_start = .;
|
||||||
|
KEEP(*(FSymTab))
|
||||||
|
__fsymtab_end = .;
|
||||||
|
. = ALIGN(4);
|
||||||
|
__vsymtab_start = .;
|
||||||
|
KEEP(*(VSymTab))
|
||||||
|
__vsymtab_end = .;
|
||||||
|
. = ALIGN(4);
|
||||||
|
|
||||||
|
. = ALIGN(4);
|
||||||
|
_etext = .;
|
||||||
|
} > CODE = 0
|
||||||
|
|
||||||
|
/* .ARM.exidx is sorted, so has to go in its own output section. */
|
||||||
|
__exidx_start = .;
|
||||||
|
.ARM.exidx :
|
||||||
|
{
|
||||||
|
*(.ARM.exidx* .gnu.linkonce.armexidx.*)
|
||||||
|
|
||||||
|
/* This is used by the startup in order to initialize the .data secion */
|
||||||
|
_sidata = .;
|
||||||
|
} > CODE
|
||||||
|
__exidx_end = .;
|
||||||
|
|
||||||
|
/* .data section which is used for initialized data */
|
||||||
|
|
||||||
|
.data : AT (_sidata)
|
||||||
|
{
|
||||||
|
. = ALIGN(4);
|
||||||
|
/* This is used by the startup in order to initialize the .data secion */
|
||||||
|
_sdata = . ;
|
||||||
|
|
||||||
|
*(.data)
|
||||||
|
*(.data.*)
|
||||||
|
*(.gnu.linkonce.d*)
|
||||||
|
|
||||||
|
. = ALIGN(4);
|
||||||
|
/* This is used by the startup in order to initialize the .data secion */
|
||||||
|
_edata = . ;
|
||||||
|
} >DATA
|
||||||
|
|
||||||
|
.stack :
|
||||||
|
{
|
||||||
|
. = . + _system_stack_size;
|
||||||
|
. = ALIGN(4);
|
||||||
|
_estack = .;
|
||||||
|
} >DATA
|
||||||
|
|
||||||
|
__bss_start = .;
|
||||||
|
.bss :
|
||||||
|
{
|
||||||
|
. = ALIGN(4);
|
||||||
|
/* This is used by the startup in order to initialize the .bss secion */
|
||||||
|
_sbss = .;
|
||||||
|
|
||||||
|
*(.bss)
|
||||||
|
*(.bss.*)
|
||||||
|
*(COMMON)
|
||||||
|
|
||||||
|
. = ALIGN(4);
|
||||||
|
/* This is used by the startup in order to initialize the .bss secion */
|
||||||
|
_ebss = . ;
|
||||||
|
*(.bss.init)
|
||||||
|
} > DATA
|
||||||
|
__bss_end = .;
|
||||||
|
|
||||||
|
_end = .;
|
||||||
|
|
||||||
|
/* Stabs debugging sections. */
|
||||||
|
.stab 0 : { *(.stab) }
|
||||||
|
.stabstr 0 : { *(.stabstr) }
|
||||||
|
.stab.excl 0 : { *(.stab.excl) }
|
||||||
|
.stab.exclstr 0 : { *(.stab.exclstr) }
|
||||||
|
.stab.index 0 : { *(.stab.index) }
|
||||||
|
.stab.indexstr 0 : { *(.stab.indexstr) }
|
||||||
|
.comment 0 : { *(.comment) }
|
||||||
|
/* DWARF debug sections.
|
||||||
|
* Symbols in the DWARF debugging sections are relative to the beginning
|
||||||
|
* of the section so we begin them at 0. */
|
||||||
|
/* DWARF 1 */
|
||||||
|
.debug 0 : { *(.debug) }
|
||||||
|
.line 0 : { *(.line) }
|
||||||
|
/* GNU DWARF 1 extensions */
|
||||||
|
.debug_srcinfo 0 : { *(.debug_srcinfo) }
|
||||||
|
.debug_sfnames 0 : { *(.debug_sfnames) }
|
||||||
|
/* DWARF 1.1 and DWARF 2 */
|
||||||
|
.debug_aranges 0 : { *(.debug_aranges) }
|
||||||
|
.debug_pubnames 0 : { *(.debug_pubnames) }
|
||||||
|
/* DWARF 2 */
|
||||||
|
.debug_info 0 : { *(.debug_info .gnu.linkonce.wi.*) }
|
||||||
|
.debug_abbrev 0 : { *(.debug_abbrev) }
|
||||||
|
.debug_line 0 : { *(.debug_line) }
|
||||||
|
.debug_frame 0 : { *(.debug_frame) }
|
||||||
|
.debug_str 0 : { *(.debug_str) }
|
||||||
|
.debug_loc 0 : { *(.debug_loc) }
|
||||||
|
.debug_macinfo 0 : { *(.debug_macinfo) }
|
||||||
|
/* SGI/MIPS DWARF 2 extensions */
|
||||||
|
.debug_weaknames 0 : { *(.debug_weaknames) }
|
||||||
|
.debug_funcnames 0 : { *(.debug_funcnames) }
|
||||||
|
.debug_typenames 0 : { *(.debug_typenames) }
|
||||||
|
.debug_varnames 0 : { *(.debug_varnames) }
|
||||||
|
}
|
|
@ -0,0 +1,15 @@
|
||||||
|
; *************************************************************
|
||||||
|
; *** Scatter-Loading Description File generated by uVision ***
|
||||||
|
; *************************************************************
|
||||||
|
|
||||||
|
LR_ROM1 0x14000000 0x00400000 { ; load region size_region
|
||||||
|
ER_ROM1 0x14000000 0x00400000 { ; load address = execution address
|
||||||
|
*.o (RESET, +First)
|
||||||
|
*(InRoot$$Sections)
|
||||||
|
.ANY (+RO)
|
||||||
|
}
|
||||||
|
RW_IRAM1 0x10000000 0x00008000 { ; RW data
|
||||||
|
.ANY (+RW +ZI)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -53,7 +53,7 @@ if PLATFORM == 'gcc':
|
||||||
DEVICE += ' -mfpu=fpv4-sp-d16 -mfloat-abi=softfp'
|
DEVICE += ' -mfpu=fpv4-sp-d16 -mfloat-abi=softfp'
|
||||||
CFLAGS = DEVICE
|
CFLAGS = DEVICE
|
||||||
AFLAGS = ' -c' + DEVICE + ' -x assembler-with-cpp -Wa,-mimplicit-it=thumb '
|
AFLAGS = ' -c' + DEVICE + ' -x assembler-with-cpp -Wa,-mimplicit-it=thumb '
|
||||||
LFLAGS = DEVICE + ' -Wl,--gc-sections,-Map=rtthread-lpc43xx.map,-cref,-u,Reset_Handler -T lpc43xx_spifi.ld'
|
LFLAGS = DEVICE + ' -Wl,--gc-sections,-Map=rtthread-lpc43xx.map,-cref,-u,Reset_Handler -T rtthread-lpc43xx_spifi.ld'
|
||||||
|
|
||||||
CPATH = ''
|
CPATH = ''
|
||||||
LPATH = ''
|
LPATH = ''
|
||||||
|
@ -75,8 +75,8 @@ elif PLATFORM == 'armcc':
|
||||||
TARGET_EXT = 'axf'
|
TARGET_EXT = 'axf'
|
||||||
|
|
||||||
DEVICE = ' --device DARMSTM'
|
DEVICE = ' --device DARMSTM'
|
||||||
CFLAGS = DEVICE + ' --apcs=interwork'
|
CFLAGS = DEVICE + ' --apcs=interwork '
|
||||||
AFLAGS = DEVICE
|
AFLAGS = DEVICE
|
||||||
LFLAGS = DEVICE + ' --info sizes --info totals --info unused --info veneers --list rtthread-lpc43xx.map --scatter rtthread-lpc43xx_spifi.sct'
|
LFLAGS = DEVICE + ' --info sizes --info totals --info unused --info veneers --list rtthread-lpc43xx.map --scatter rtthread-lpc43xx_spifi.sct'
|
||||||
|
|
||||||
CFLAGS += ' -I' + EXEC_PATH + '/ARM/RV31/INC'
|
CFLAGS += ' -I' + EXEC_PATH + '/ARM/RV31/INC'
|
||||||
|
|
|
@ -0,0 +1,133 @@
|
||||||
|
/*
|
||||||
|
* linker script for LPC43xx SPIFI (4Mb NorFlash, 32kB SRAM ) with GNU ld
|
||||||
|
* yiyue.fang 2012-04-14
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Program Entry, set to mark it as "used" and avoid gc */
|
||||||
|
MEMORY
|
||||||
|
{
|
||||||
|
CODE (rx) : ORIGIN = 0x14000000, LENGTH = 0x00400000
|
||||||
|
DATA (rw) : ORIGIN = 0x10000000, LENGTH = 0x00008000
|
||||||
|
}
|
||||||
|
ENTRY(Reset_Handler)
|
||||||
|
_system_stack_size = 0x200;
|
||||||
|
|
||||||
|
SECTIONS
|
||||||
|
{
|
||||||
|
.text :
|
||||||
|
{
|
||||||
|
. = ALIGN(4);
|
||||||
|
KEEP(*(.interrupt_vector)) /* Startup code */
|
||||||
|
. = ALIGN(4);
|
||||||
|
*(.text) /* remaining code */
|
||||||
|
*(.text.*) /* remaining code */
|
||||||
|
*(.rodata) /* read-only data (constants) */
|
||||||
|
*(.rodata*)
|
||||||
|
*(.glue_7)
|
||||||
|
*(.glue_7t)
|
||||||
|
*(.gnu.linkonce.t*)
|
||||||
|
|
||||||
|
/* section information for finsh shell */
|
||||||
|
. = ALIGN(4);
|
||||||
|
__fsymtab_start = .;
|
||||||
|
KEEP(*(FSymTab))
|
||||||
|
__fsymtab_end = .;
|
||||||
|
. = ALIGN(4);
|
||||||
|
__vsymtab_start = .;
|
||||||
|
KEEP(*(VSymTab))
|
||||||
|
__vsymtab_end = .;
|
||||||
|
. = ALIGN(4);
|
||||||
|
|
||||||
|
. = ALIGN(4);
|
||||||
|
_etext = .;
|
||||||
|
} > CODE = 0
|
||||||
|
|
||||||
|
/* .ARM.exidx is sorted, so has to go in its own output section. */
|
||||||
|
__exidx_start = .;
|
||||||
|
.ARM.exidx :
|
||||||
|
{
|
||||||
|
*(.ARM.exidx* .gnu.linkonce.armexidx.*)
|
||||||
|
|
||||||
|
/* This is used by the startup in order to initialize the .data secion */
|
||||||
|
_sidata = .;
|
||||||
|
} > CODE
|
||||||
|
__exidx_end = .;
|
||||||
|
|
||||||
|
/* .data section which is used for initialized data */
|
||||||
|
|
||||||
|
.data : AT (_sidata)
|
||||||
|
{
|
||||||
|
. = ALIGN(4);
|
||||||
|
/* This is used by the startup in order to initialize the .data secion */
|
||||||
|
_sdata = . ;
|
||||||
|
|
||||||
|
*(.data)
|
||||||
|
*(.data.*)
|
||||||
|
*(.gnu.linkonce.d*)
|
||||||
|
|
||||||
|
. = ALIGN(4);
|
||||||
|
/* This is used by the startup in order to initialize the .data secion */
|
||||||
|
_edata = . ;
|
||||||
|
} >DATA
|
||||||
|
|
||||||
|
.stack :
|
||||||
|
{
|
||||||
|
. = . + _system_stack_size;
|
||||||
|
. = ALIGN(4);
|
||||||
|
_estack = .;
|
||||||
|
} >DATA
|
||||||
|
|
||||||
|
__bss_start = .;
|
||||||
|
.bss :
|
||||||
|
{
|
||||||
|
. = ALIGN(4);
|
||||||
|
/* This is used by the startup in order to initialize the .bss secion */
|
||||||
|
_sbss = .;
|
||||||
|
|
||||||
|
*(.bss)
|
||||||
|
*(.bss.*)
|
||||||
|
*(COMMON)
|
||||||
|
|
||||||
|
. = ALIGN(4);
|
||||||
|
/* This is used by the startup in order to initialize the .bss secion */
|
||||||
|
_ebss = . ;
|
||||||
|
*(.bss.init)
|
||||||
|
} > DATA
|
||||||
|
__bss_end = .;
|
||||||
|
|
||||||
|
_end = .;
|
||||||
|
|
||||||
|
/* Stabs debugging sections. */
|
||||||
|
.stab 0 : { *(.stab) }
|
||||||
|
.stabstr 0 : { *(.stabstr) }
|
||||||
|
.stab.excl 0 : { *(.stab.excl) }
|
||||||
|
.stab.exclstr 0 : { *(.stab.exclstr) }
|
||||||
|
.stab.index 0 : { *(.stab.index) }
|
||||||
|
.stab.indexstr 0 : { *(.stab.indexstr) }
|
||||||
|
.comment 0 : { *(.comment) }
|
||||||
|
/* DWARF debug sections.
|
||||||
|
* Symbols in the DWARF debugging sections are relative to the beginning
|
||||||
|
* of the section so we begin them at 0. */
|
||||||
|
/* DWARF 1 */
|
||||||
|
.debug 0 : { *(.debug) }
|
||||||
|
.line 0 : { *(.line) }
|
||||||
|
/* GNU DWARF 1 extensions */
|
||||||
|
.debug_srcinfo 0 : { *(.debug_srcinfo) }
|
||||||
|
.debug_sfnames 0 : { *(.debug_sfnames) }
|
||||||
|
/* DWARF 1.1 and DWARF 2 */
|
||||||
|
.debug_aranges 0 : { *(.debug_aranges) }
|
||||||
|
.debug_pubnames 0 : { *(.debug_pubnames) }
|
||||||
|
/* DWARF 2 */
|
||||||
|
.debug_info 0 : { *(.debug_info .gnu.linkonce.wi.*) }
|
||||||
|
.debug_abbrev 0 : { *(.debug_abbrev) }
|
||||||
|
.debug_line 0 : { *(.debug_line) }
|
||||||
|
.debug_frame 0 : { *(.debug_frame) }
|
||||||
|
.debug_str 0 : { *(.debug_str) }
|
||||||
|
.debug_loc 0 : { *(.debug_loc) }
|
||||||
|
.debug_macinfo 0 : { *(.debug_macinfo) }
|
||||||
|
/* SGI/MIPS DWARF 2 extensions */
|
||||||
|
.debug_weaknames 0 : { *(.debug_weaknames) }
|
||||||
|
.debug_funcnames 0 : { *(.debug_funcnames) }
|
||||||
|
.debug_typenames 0 : { *(.debug_typenames) }
|
||||||
|
.debug_varnames 0 : { *(.debug_varnames) }
|
||||||
|
}
|
|
@ -0,0 +1,15 @@
|
||||||
|
; *************************************************************
|
||||||
|
; *** Scatter-Loading Description File generated by uVision ***
|
||||||
|
; *************************************************************
|
||||||
|
|
||||||
|
LR_ROM1 0x14000000 0x00400000 { ; load region size_region
|
||||||
|
ER_ROM1 0x14000000 0x00400000 { ; load address = execution address
|
||||||
|
*.o (RESET, +First)
|
||||||
|
*(InRoot$$Sections)
|
||||||
|
.ANY (+RO)
|
||||||
|
}
|
||||||
|
RW_IRAM1 0x10000000 0x00008000 { ; RW data
|
||||||
|
.ANY (+RW +ZI)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -128,10 +128,6 @@ __Vectors DCD __initial_sp ; 0 Top of Stack
|
||||||
DCD QEI_IRQHandler ; 68 QEI
|
DCD QEI_IRQHandler ; 68 QEI
|
||||||
|
|
||||||
|
|
||||||
IF :LNOT::DEF:NO_CRP
|
|
||||||
AREA |.ARM.__at_0x02FC|, CODE, READONLY
|
|
||||||
CRP_Key DCD 0xFFFFFFFF
|
|
||||||
ENDIF
|
|
||||||
|
|
||||||
AREA |.text|, CODE, READONLY
|
AREA |.text|, CODE, READONLY
|
||||||
|
|
||||||
|
@ -327,13 +323,5 @@ __user_initial_stackheap
|
||||||
|
|
||||||
ENDIF
|
ENDIF
|
||||||
|
|
||||||
AREA |.text|,CODE, READONLY
|
|
||||||
getPC PROC
|
|
||||||
EXPORT getPC
|
|
||||||
|
|
||||||
MOV R0,LR
|
|
||||||
BX LR
|
|
||||||
|
|
||||||
ENDP
|
|
||||||
|
|
||||||
END
|
END
|
||||||
|
|
|
@ -1,502 +0,0 @@
|
||||||
//*****************************************************************************
|
|
||||||
// LPC43xx (Cortex-M4) Microcontroller Startup code for use with LPCXpresso IDE
|
|
||||||
//
|
|
||||||
// Version : 140113
|
|
||||||
//*****************************************************************************
|
|
||||||
//
|
|
||||||
// Copyright(C) NXP Semiconductors, 2013-2014
|
|
||||||
// All rights reserved.
|
|
||||||
//
|
|
||||||
// Software that is described herein is for illustrative purposes only
|
|
||||||
// which provides customers with programming information regarding the
|
|
||||||
// LPC products. This software is supplied "AS IS" without any warranties of
|
|
||||||
// any kind, and NXP Semiconductors and its licensor disclaim any and
|
|
||||||
// all warranties, express or implied, including all implied warranties of
|
|
||||||
// merchantability, fitness for a particular purpose and non-infringement of
|
|
||||||
// intellectual property rights. NXP Semiconductors assumes no responsibility
|
|
||||||
// or liability for the use of the software, conveys no license or rights under any
|
|
||||||
// patent, copyright, mask work right, or any other intellectual property rights in
|
|
||||||
// or to any products. NXP Semiconductors reserves the right to make changes
|
|
||||||
// in the software without notification. NXP Semiconductors also makes no
|
|
||||||
// representation or warranty that such application will be suitable for the
|
|
||||||
// specified use without further testing or modification.
|
|
||||||
//
|
|
||||||
// Permission to use, copy, modify, and distribute this software and its
|
|
||||||
// documentation is hereby granted, under NXP Semiconductors' and its
|
|
||||||
// licensor's relevant copyrights in the software, without fee, provided that it
|
|
||||||
// is used in conjunction with NXP Semiconductors microcontrollers. This
|
|
||||||
// copyright, permission, and disclaimer notice must appear in all copies of
|
|
||||||
// this code.
|
|
||||||
//*****************************************************************************
|
|
||||||
|
|
||||||
#if defined (__cplusplus)
|
|
||||||
#ifdef __REDLIB__
|
|
||||||
#error Redlib does not support C++
|
|
||||||
#else
|
|
||||||
//*****************************************************************************
|
|
||||||
//
|
|
||||||
// The entry point for the C++ library startup
|
|
||||||
//
|
|
||||||
//*****************************************************************************
|
|
||||||
extern "C" {
|
|
||||||
extern void __libc_init_array(void);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#define WEAK __attribute__ ((weak))
|
|
||||||
#define ALIAS(f) __attribute__ ((weak, alias (#f)))
|
|
||||||
|
|
||||||
//*****************************************************************************
|
|
||||||
#if defined (__cplusplus)
|
|
||||||
extern "C" {
|
|
||||||
#endif
|
|
||||||
|
|
||||||
//*****************************************************************************
|
|
||||||
#if defined (__USE_CMSIS) || defined (__USE_LPCOPEN)
|
|
||||||
// Declaration of external SystemInit function
|
|
||||||
extern void SystemInit(void);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
//*****************************************************************************
|
|
||||||
//
|
|
||||||
// Forward declaration of the default handlers. These are aliased.
|
|
||||||
// When the application defines a handler (with the same name), this will
|
|
||||||
// automatically take precedence over these weak definitions
|
|
||||||
//
|
|
||||||
//*****************************************************************************
|
|
||||||
void ResetISR(void);
|
|
||||||
WEAK void NMI_Handler(void);
|
|
||||||
WEAK void HardFault_Handler(void);
|
|
||||||
WEAK void MemManage_Handler(void);
|
|
||||||
WEAK void BusFault_Handler(void);
|
|
||||||
WEAK void UsageFault_Handler(void);
|
|
||||||
WEAK void SVC_Handler(void);
|
|
||||||
WEAK void DebugMon_Handler(void);
|
|
||||||
WEAK void PendSV_Handler(void);
|
|
||||||
WEAK void SysTick_Handler(void);
|
|
||||||
WEAK void IntDefaultHandler(void);
|
|
||||||
|
|
||||||
//*****************************************************************************
|
|
||||||
//
|
|
||||||
// Forward declaration of the specific IRQ handlers. These are aliased
|
|
||||||
// to the IntDefaultHandler, which is a 'forever' loop. When the application
|
|
||||||
// defines a handler (with the same name), this will automatically take
|
|
||||||
// precedence over these weak definitions
|
|
||||||
//
|
|
||||||
//*****************************************************************************
|
|
||||||
void DAC_IRQHandler(void) ALIAS(IntDefaultHandler);
|
|
||||||
#if defined (__USE_LPCOPEN)
|
|
||||||
void M0APP_IRQHandler(void) ALIAS(IntDefaultHandler);
|
|
||||||
#else
|
|
||||||
void M0CORE_IRQHandler(void) ALIAS(IntDefaultHandler);
|
|
||||||
#endif
|
|
||||||
void DMA_IRQHandler(void) ALIAS(IntDefaultHandler);
|
|
||||||
void FLASH_EEPROM_IRQHandler(void) ALIAS(IntDefaultHandler);
|
|
||||||
void ETH_IRQHandler(void) ALIAS(IntDefaultHandler);
|
|
||||||
void SDIO_IRQHandler(void) ALIAS(IntDefaultHandler);
|
|
||||||
void LCD_IRQHandler(void) ALIAS(IntDefaultHandler);
|
|
||||||
void USB0_IRQHandler(void) ALIAS(IntDefaultHandler);
|
|
||||||
void USB1_IRQHandler(void) ALIAS(IntDefaultHandler);
|
|
||||||
void SCT_IRQHandler(void) ALIAS(IntDefaultHandler);
|
|
||||||
void RIT_IRQHandler(void) ALIAS(IntDefaultHandler);
|
|
||||||
void TIMER0_IRQHandler(void) ALIAS(IntDefaultHandler);
|
|
||||||
void TIMER1_IRQHandler(void) ALIAS(IntDefaultHandler);
|
|
||||||
void TIMER2_IRQHandler(void) ALIAS(IntDefaultHandler);
|
|
||||||
void TIMER3_IRQHandler(void) ALIAS(IntDefaultHandler);
|
|
||||||
void MCPWM_IRQHandler(void) ALIAS(IntDefaultHandler);
|
|
||||||
void ADC0_IRQHandler(void) ALIAS(IntDefaultHandler);
|
|
||||||
void I2C0_IRQHandler(void) ALIAS(IntDefaultHandler);
|
|
||||||
void SPI_IRQHandler(void) ALIAS(IntDefaultHandler);
|
|
||||||
void I2C1_IRQHandler(void) ALIAS(IntDefaultHandler);
|
|
||||||
void ADC1_IRQHandler(void) ALIAS(IntDefaultHandler);
|
|
||||||
void SSP0_IRQHandler(void) ALIAS(IntDefaultHandler);
|
|
||||||
void SSP1_IRQHandler(void) ALIAS(IntDefaultHandler);
|
|
||||||
void UART0_IRQHandler(void) ALIAS(IntDefaultHandler);
|
|
||||||
void UART1_IRQHandler(void) ALIAS(IntDefaultHandler);
|
|
||||||
void UART2_IRQHandler(void) ALIAS(IntDefaultHandler);
|
|
||||||
void UART3_IRQHandler(void) ALIAS(IntDefaultHandler);
|
|
||||||
void I2S0_IRQHandler(void) ALIAS(IntDefaultHandler);
|
|
||||||
void I2S1_IRQHandler(void) ALIAS(IntDefaultHandler);
|
|
||||||
void SPIFI_IRQHandler(void) ALIAS(IntDefaultHandler);
|
|
||||||
void SGPIO_IRQHandler(void) ALIAS(IntDefaultHandler);
|
|
||||||
void GPIO0_IRQHandler(void) ALIAS(IntDefaultHandler);
|
|
||||||
void GPIO1_IRQHandler(void) ALIAS(IntDefaultHandler);
|
|
||||||
void GPIO2_IRQHandler(void) ALIAS(IntDefaultHandler);
|
|
||||||
void GPIO3_IRQHandler(void) ALIAS(IntDefaultHandler);
|
|
||||||
void GPIO4_IRQHandler(void) ALIAS(IntDefaultHandler);
|
|
||||||
void GPIO5_IRQHandler(void) ALIAS(IntDefaultHandler);
|
|
||||||
void GPIO6_IRQHandler(void) ALIAS(IntDefaultHandler);
|
|
||||||
void GPIO7_IRQHandler(void) ALIAS(IntDefaultHandler);
|
|
||||||
void GINT0_IRQHandler(void) ALIAS(IntDefaultHandler);
|
|
||||||
void GINT1_IRQHandler(void) ALIAS(IntDefaultHandler);
|
|
||||||
void EVRT_IRQHandler(void) ALIAS(IntDefaultHandler);
|
|
||||||
void CAN1_IRQHandler(void) ALIAS(IntDefaultHandler);
|
|
||||||
#if defined (__USE_LPCOPEN)
|
|
||||||
void ADCHS_IRQHandler(void) ALIAS(IntDefaultHandler);
|
|
||||||
#else
|
|
||||||
void VADC_IRQHandler(void) ALIAS(IntDefaultHandler);
|
|
||||||
#endif
|
|
||||||
void ATIMER_IRQHandler(void) ALIAS(IntDefaultHandler);
|
|
||||||
void RTC_IRQHandler(void) ALIAS(IntDefaultHandler);
|
|
||||||
void WDT_IRQHandler(void) ALIAS(IntDefaultHandler);
|
|
||||||
void M0SUB_IRQHandler(void) ALIAS(IntDefaultHandler);
|
|
||||||
void CAN0_IRQHandler(void) ALIAS(IntDefaultHandler);
|
|
||||||
void QEI_IRQHandler(void) ALIAS(IntDefaultHandler);
|
|
||||||
|
|
||||||
//*****************************************************************************
|
|
||||||
//
|
|
||||||
// The entry point for the application.
|
|
||||||
// __main() is the entry point for Redlib based applications
|
|
||||||
// main() is the entry point for Newlib based applications
|
|
||||||
//
|
|
||||||
//*****************************************************************************
|
|
||||||
#if defined (__REDLIB__)
|
|
||||||
extern void __main(void);
|
|
||||||
#endif
|
|
||||||
extern int main(void);
|
|
||||||
//*****************************************************************************
|
|
||||||
//
|
|
||||||
// External declaration for the pointer to the stack top from the Linker Script
|
|
||||||
//
|
|
||||||
//*****************************************************************************
|
|
||||||
extern void _vStackTop(void);
|
|
||||||
|
|
||||||
//*****************************************************************************
|
|
||||||
#if defined (__cplusplus)
|
|
||||||
} // extern "C"
|
|
||||||
#endif
|
|
||||||
//*****************************************************************************
|
|
||||||
//
|
|
||||||
// The vector table.
|
|
||||||
// This relies on the linker script to place at correct location in memory.
|
|
||||||
//
|
|
||||||
//*****************************************************************************
|
|
||||||
extern void (* const g_pfnVectors[])(void);
|
|
||||||
__attribute__ ((section(".isr_vector")))
|
|
||||||
void (* const g_pfnVectors[])(void) = {
|
|
||||||
// Core Level - CM4
|
|
||||||
&_vStackTop, // The initial stack pointer
|
|
||||||
ResetISR, // 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
|
|
||||||
|
|
||||||
// Chip Level - LPC43 (M4)
|
|
||||||
DAC_IRQHandler, // 16
|
|
||||||
#if defined (__USE_LPCOPEN)
|
|
||||||
M0APP_IRQHandler, // 17 CortexM4/M0 (LPC43XX ONLY)
|
|
||||||
#else
|
|
||||||
M0CORE_IRQHandler, // 17
|
|
||||||
#endif
|
|
||||||
DMA_IRQHandler, // 18
|
|
||||||
0, // 19
|
|
||||||
FLASH_EEPROM_IRQHandler, // 20 ORed flash Bank A, flash Bank B, EEPROM interrupts
|
|
||||||
ETH_IRQHandler, // 21
|
|
||||||
SDIO_IRQHandler, // 22
|
|
||||||
LCD_IRQHandler, // 23
|
|
||||||
USB0_IRQHandler, // 24
|
|
||||||
USB1_IRQHandler, // 25
|
|
||||||
SCT_IRQHandler, // 26
|
|
||||||
RIT_IRQHandler, // 27
|
|
||||||
TIMER0_IRQHandler, // 28
|
|
||||||
TIMER1_IRQHandler, // 29
|
|
||||||
TIMER2_IRQHandler, // 30
|
|
||||||
TIMER3_IRQHandler, // 31
|
|
||||||
MCPWM_IRQHandler, // 32
|
|
||||||
ADC0_IRQHandler, // 33
|
|
||||||
I2C0_IRQHandler, // 34
|
|
||||||
I2C1_IRQHandler, // 35
|
|
||||||
SPI_IRQHandler, // 36
|
|
||||||
ADC1_IRQHandler, // 37
|
|
||||||
SSP0_IRQHandler, // 38
|
|
||||||
SSP1_IRQHandler, // 39
|
|
||||||
UART0_IRQHandler, // 40
|
|
||||||
UART1_IRQHandler, // 41
|
|
||||||
UART2_IRQHandler, // 42
|
|
||||||
UART3_IRQHandler, // 43
|
|
||||||
I2S0_IRQHandler, // 44
|
|
||||||
I2S1_IRQHandler, // 45
|
|
||||||
SPIFI_IRQHandler, // 46
|
|
||||||
SGPIO_IRQHandler, // 47
|
|
||||||
GPIO0_IRQHandler, // 48
|
|
||||||
GPIO1_IRQHandler, // 49
|
|
||||||
GPIO2_IRQHandler, // 50
|
|
||||||
GPIO3_IRQHandler, // 51
|
|
||||||
GPIO4_IRQHandler, // 52
|
|
||||||
GPIO5_IRQHandler, // 53
|
|
||||||
GPIO6_IRQHandler, // 54
|
|
||||||
GPIO7_IRQHandler, // 55
|
|
||||||
GINT0_IRQHandler, // 56
|
|
||||||
GINT1_IRQHandler, // 57
|
|
||||||
EVRT_IRQHandler, // 58
|
|
||||||
CAN1_IRQHandler, // 59
|
|
||||||
0, // 60
|
|
||||||
#if defined (__USE_LPCOPEN)
|
|
||||||
ADCHS_IRQHandler, // 61 ADCHS combined interrupt
|
|
||||||
#else
|
|
||||||
VADC_IRQHandler, // 61
|
|
||||||
#endif
|
|
||||||
ATIMER_IRQHandler, // 62
|
|
||||||
RTC_IRQHandler, // 63
|
|
||||||
0, // 64
|
|
||||||
WDT_IRQHandler, // 65
|
|
||||||
M0SUB_IRQHandler, // 66
|
|
||||||
CAN0_IRQHandler, // 67
|
|
||||||
QEI_IRQHandler, // 68
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
//*****************************************************************************
|
|
||||||
// Functions to carry out the initialization of RW and BSS data sections. These
|
|
||||||
// are written as separate functions rather than being inlined within the
|
|
||||||
// ResetISR() function in order to cope with MCUs with multiple banks of
|
|
||||||
// memory.
|
|
||||||
//*****************************************************************************
|
|
||||||
__attribute__((section(".after_vectors"
|
|
||||||
)))
|
|
||||||
void data_init(unsigned int romstart, unsigned int start, unsigned int len) {
|
|
||||||
unsigned int *pulDest = (unsigned int*) start;
|
|
||||||
unsigned int *pulSrc = (unsigned int*) romstart;
|
|
||||||
unsigned int loop;
|
|
||||||
for (loop = 0; loop < len; loop = loop + 4)
|
|
||||||
*pulDest++ = *pulSrc++;
|
|
||||||
}
|
|
||||||
|
|
||||||
__attribute__ ((section(".after_vectors")))
|
|
||||||
void bss_init(unsigned int start, unsigned int len) {
|
|
||||||
unsigned int *pulDest = (unsigned int*) start;
|
|
||||||
unsigned int loop;
|
|
||||||
for (loop = 0; loop < len; loop = loop + 4)
|
|
||||||
*pulDest++ = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
//*****************************************************************************
|
|
||||||
// The following symbols are constructs generated by the linker, indicating
|
|
||||||
// the location of various points in the "Global Section Table". This table is
|
|
||||||
// created by the linker via the Code Red managed linker script mechanism. It
|
|
||||||
// contains the load address, execution address and length of each RW data
|
|
||||||
// section and the execution and length of each BSS (zero initialized) section.
|
|
||||||
//*****************************************************************************
|
|
||||||
extern unsigned int __data_section_table;
|
|
||||||
extern unsigned int __data_section_table_end;
|
|
||||||
extern unsigned int __bss_section_table;
|
|
||||||
extern unsigned int __bss_section_table_end;
|
|
||||||
|
|
||||||
//*****************************************************************************
|
|
||||||
// Reset entry point for your code.
|
|
||||||
// Sets up a simple runtime environment and initializes the C/C++
|
|
||||||
// library.
|
|
||||||
//
|
|
||||||
//*****************************************************************************
|
|
||||||
void ResetISR(void) {
|
|
||||||
|
|
||||||
// *************************************************************
|
|
||||||
// The following conditional block of code manually resets as
|
|
||||||
// much of the peripheral set of the LPC43 as possible. This is
|
|
||||||
// done because the LPC43 does not provide a means of triggering
|
|
||||||
// a full system reset under debugger control, which can cause
|
|
||||||
// problems in certain circumstances when debugging.
|
|
||||||
//
|
|
||||||
// You can prevent this code block being included if you require
|
|
||||||
// (for example when creating a final executable which you will
|
|
||||||
// not debug) by setting the define 'DONT_RESET_ON_RESTART'.
|
|
||||||
//
|
|
||||||
#ifndef DONT_RESET_ON_RESTART
|
|
||||||
|
|
||||||
// Disable interrupts
|
|
||||||
__asm volatile ("cpsid i");
|
|
||||||
// equivalent to CMSIS '__disable_irq()' function
|
|
||||||
|
|
||||||
unsigned int *RESET_CONTROL = (unsigned int *) 0x40053100;
|
|
||||||
// LPC_RGU->RESET_CTRL0 @ 0x40053100
|
|
||||||
// LPC_RGU->RESET_CTRL1 @ 0x40053104
|
|
||||||
// Note that we do not use the CMSIS register access mechanism,
|
|
||||||
// as there is no guarantee that the project has been configured
|
|
||||||
// to use CMSIS.
|
|
||||||
|
|
||||||
// Write to LPC_RGU->RESET_CTRL0
|
|
||||||
*(RESET_CONTROL + 0) = 0x10DF1000;
|
|
||||||
// GPIO_RST|AES_RST|ETHERNET_RST|SDIO_RST|DMA_RST|
|
|
||||||
// USB1_RST|USB0_RST|LCD_RST|M0_SUB_RST
|
|
||||||
|
|
||||||
// Write to LPC_RGU->RESET_CTRL1
|
|
||||||
*(RESET_CONTROL + 1) = 0x01DFF7FF;
|
|
||||||
// M0APP_RST|CAN0_RST|CAN1_RST|I2S_RST|SSP1_RST|SSP0_RST|
|
|
||||||
// I2C1_RST|I2C0_RST|UART3_RST|UART1_RST|UART1_RST|UART0_RST|
|
|
||||||
// DAC_RST|ADC1_RST|ADC0_RST|QEI_RST|MOTOCONPWM_RST|SCT_RST|
|
|
||||||
// RITIMER_RST|TIMER3_RST|TIMER2_RST|TIMER1_RST|TIMER0_RST
|
|
||||||
|
|
||||||
// Clear all pending interrupts in the NVIC
|
|
||||||
volatile unsigned int *NVIC_ICPR = (unsigned int *) 0xE000E280;
|
|
||||||
unsigned int irqpendloop;
|
|
||||||
for (irqpendloop = 0; irqpendloop < 8; irqpendloop++) {
|
|
||||||
*(NVIC_ICPR + irqpendloop) = 0xFFFFFFFF;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Reenable interrupts
|
|
||||||
__asm volatile ("cpsie i");
|
|
||||||
// equivalent to CMSIS '__enable_irq()' function
|
|
||||||
|
|
||||||
#endif // ifndef DONT_RESET_ON_RESTART
|
|
||||||
// *************************************************************
|
|
||||||
|
|
||||||
#if defined (__USE_LPCOPEN)
|
|
||||||
SystemInit();
|
|
||||||
#endif
|
|
||||||
|
|
||||||
//
|
|
||||||
// Copy the data sections from flash to SRAM.
|
|
||||||
//
|
|
||||||
unsigned int LoadAddr, ExeAddr, SectionLen;
|
|
||||||
unsigned int *SectionTableAddr;
|
|
||||||
|
|
||||||
// Load base address of Global Section Table
|
|
||||||
SectionTableAddr = &__data_section_table;
|
|
||||||
|
|
||||||
// Copy the data sections from flash to SRAM.
|
|
||||||
while (SectionTableAddr < &__data_section_table_end) {
|
|
||||||
LoadAddr = *SectionTableAddr++;
|
|
||||||
ExeAddr = *SectionTableAddr++;
|
|
||||||
SectionLen = *SectionTableAddr++;
|
|
||||||
data_init(LoadAddr, ExeAddr, SectionLen);
|
|
||||||
}
|
|
||||||
// At this point, SectionTableAddr = &__bss_section_table;
|
|
||||||
// Zero fill the bss segment
|
|
||||||
while (SectionTableAddr < &__bss_section_table_end) {
|
|
||||||
ExeAddr = *SectionTableAddr++;
|
|
||||||
SectionLen = *SectionTableAddr++;
|
|
||||||
bss_init(ExeAddr, SectionLen);
|
|
||||||
}
|
|
||||||
|
|
||||||
#if !defined (__USE_LPCOPEN)
|
|
||||||
// LPCOpen init code deals with FP and VTOR initialisation
|
|
||||||
#if defined (__VFP_FP__) && !defined (__SOFTFP__)
|
|
||||||
/*
|
|
||||||
* Code to enable the Cortex-M4 FPU only included
|
|
||||||
* if appropriate build options have been selected.
|
|
||||||
* Code taken from Section 7.1, Cortex-M4 TRM (DDI0439C)
|
|
||||||
*/
|
|
||||||
// CPACR is located at address 0xE000ED88
|
|
||||||
asm("LDR.W R0, =0xE000ED88");
|
|
||||||
// Read CPACR
|
|
||||||
asm("LDR R1, [R0]");
|
|
||||||
// Set bits 20-23 to enable CP10 and CP11 coprocessors
|
|
||||||
asm(" ORR R1, R1, #(0xF << 20)");
|
|
||||||
// Write back the modified value to the CPACR
|
|
||||||
asm("STR R1, [R0]");
|
|
||||||
#endif // (__VFP_FP__) && !(__SOFTFP__)
|
|
||||||
// ******************************
|
|
||||||
// Check to see if we are running the code from a non-zero
|
|
||||||
// address (eg RAM, external flash), in which case we need
|
|
||||||
// to modify the VTOR register to tell the CPU that the
|
|
||||||
// vector table is located at a non-0x0 address.
|
|
||||||
|
|
||||||
// Note that we do not use the CMSIS register access mechanism,
|
|
||||||
// as there is no guarantee that the project has been configured
|
|
||||||
// to use CMSIS.
|
|
||||||
unsigned int * pSCB_VTOR = (unsigned int *) 0xE000ED08;
|
|
||||||
if ((unsigned int *) g_pfnVectors != (unsigned int *) 0x00000000) {
|
|
||||||
// CMSIS : SCB->VTOR = <address of vector table>
|
|
||||||
*pSCB_VTOR = (unsigned int) g_pfnVectors;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if defined (__USE_CMSIS)
|
|
||||||
SystemInit();
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if defined (__cplusplus)
|
|
||||||
//
|
|
||||||
// Call C++ library initialisation
|
|
||||||
//
|
|
||||||
__libc_init_array();
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if defined (__REDLIB__)
|
|
||||||
// Call the Redlib library, which in turn calls main()
|
|
||||||
__main();
|
|
||||||
#else
|
|
||||||
main();
|
|
||||||
#endif
|
|
||||||
|
|
||||||
//
|
|
||||||
// main() shouldn't return, but if it does, we'll just enter an infinite loop
|
|
||||||
//
|
|
||||||
while (1) {
|
|
||||||
;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//*****************************************************************************
|
|
||||||
// Default exception handlers. Override the ones here by defining your own
|
|
||||||
// handler routines in your application code.
|
|
||||||
//*****************************************************************************
|
|
||||||
__attribute__ ((section(".after_vectors")))
|
|
||||||
void NMI_Handler(void) {
|
|
||||||
while (1) {
|
|
||||||
}
|
|
||||||
}
|
|
||||||
__attribute__ ((section(".after_vectors")))
|
|
||||||
void HardFault_Handler(void) {
|
|
||||||
while (1) {
|
|
||||||
}
|
|
||||||
}
|
|
||||||
__attribute__ ((section(".after_vectors")))
|
|
||||||
void MemManage_Handler(void) {
|
|
||||||
while (1) {
|
|
||||||
}
|
|
||||||
}
|
|
||||||
__attribute__ ((section(".after_vectors")))
|
|
||||||
void BusFault_Handler(void) {
|
|
||||||
while (1) {
|
|
||||||
}
|
|
||||||
}
|
|
||||||
__attribute__ ((section(".after_vectors")))
|
|
||||||
void UsageFault_Handler(void) {
|
|
||||||
while (1) {
|
|
||||||
}
|
|
||||||
}
|
|
||||||
__attribute__ ((section(".after_vectors")))
|
|
||||||
void SVC_Handler(void) {
|
|
||||||
while (1) {
|
|
||||||
}
|
|
||||||
}
|
|
||||||
__attribute__ ((section(".after_vectors")))
|
|
||||||
void DebugMon_Handler(void) {
|
|
||||||
while (1) {
|
|
||||||
}
|
|
||||||
}
|
|
||||||
__attribute__ ((section(".after_vectors")))
|
|
||||||
void PendSV_Handler(void) {
|
|
||||||
while (1) {
|
|
||||||
}
|
|
||||||
}
|
|
||||||
__attribute__ ((section(".after_vectors")))
|
|
||||||
void SysTick_Handler(void) {
|
|
||||||
while (1) {
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//*****************************************************************************
|
|
||||||
//
|
|
||||||
// Processor ends up here if an unexpected interrupt occurs or a specific
|
|
||||||
// handler is not present in the application code.
|
|
||||||
//
|
|
||||||
//*****************************************************************************
|
|
||||||
__attribute__ ((section(".after_vectors")))
|
|
||||||
void IntDefaultHandler(void) {
|
|
||||||
while (1) {
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,464 +0,0 @@
|
||||||
//*****************************************************************************
|
|
||||||
// LPC43xx (Cortex M0 SUB) Startup code for use with LPCXpresso IDE
|
|
||||||
//
|
|
||||||
// Version : 131115
|
|
||||||
//*****************************************************************************
|
|
||||||
//
|
|
||||||
// Copyright(C) NXP Semiconductors, 2013
|
|
||||||
// All rights reserved.
|
|
||||||
//
|
|
||||||
// Software that is described herein is for illustrative purposes only
|
|
||||||
// which provides customers with programming information regarding the
|
|
||||||
// LPC products. This software is supplied "AS IS" without any warranties of
|
|
||||||
// any kind, and NXP Semiconductors and its licensor disclaim any and
|
|
||||||
// all warranties, express or implied, including all implied warranties of
|
|
||||||
// merchantability, fitness for a particular purpose and non-infringement of
|
|
||||||
// intellectual property rights. NXP Semiconductors assumes no responsibility
|
|
||||||
// or liability for the use of the software, conveys no license or rights under any
|
|
||||||
// patent, copyright, mask work right, or any other intellectual property rights in
|
|
||||||
// or to any products. NXP Semiconductors reserves the right to make changes
|
|
||||||
// in the software without notification. NXP Semiconductors also makes no
|
|
||||||
// representation or warranty that such application will be suitable for the
|
|
||||||
// specified use without further testing or modification.
|
|
||||||
//
|
|
||||||
// Permission to use, copy, modify, and distribute this software and its
|
|
||||||
// documentation is hereby granted, under NXP Semiconductors' and its
|
|
||||||
// licensor's relevant copyrights in the software, without fee, provided that it
|
|
||||||
// is used in conjunction with NXP Semiconductors microcontrollers. This
|
|
||||||
// copyright, permission, and disclaimer notice must appear in all copies of
|
|
||||||
// this code.
|
|
||||||
//*****************************************************************************
|
|
||||||
|
|
||||||
#if defined (__cplusplus)
|
|
||||||
#ifdef __REDLIB__
|
|
||||||
#error Redlib does not support C++
|
|
||||||
#else
|
|
||||||
//*****************************************************************************
|
|
||||||
//
|
|
||||||
// The entry point for the C++ library startup
|
|
||||||
//
|
|
||||||
//*****************************************************************************
|
|
||||||
extern "C" {
|
|
||||||
extern void __libc_init_array(void);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#define WEAK __attribute__ ((weak))
|
|
||||||
#define ALIAS(f) __attribute__ ((weak, alias (#f)))
|
|
||||||
|
|
||||||
#if defined (__USE_CMSIS) || defined (__USE_LPCOPEN)
|
|
||||||
void SystemInit(void);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
//*****************************************************************************
|
|
||||||
#if defined (__cplusplus)
|
|
||||||
extern "C" {
|
|
||||||
#endif
|
|
||||||
|
|
||||||
//*****************************************************************************
|
|
||||||
//
|
|
||||||
// Forward declaration of the default handlers. These are aliased.
|
|
||||||
// When the application defines a handler (with the same name), this will
|
|
||||||
// automatically take precedence over these weak definitions
|
|
||||||
//
|
|
||||||
//*****************************************************************************
|
|
||||||
void ResetISR(void);
|
|
||||||
#if defined (__USE_LPCOPEN)
|
|
||||||
WEAK void NMI_Handler(void);
|
|
||||||
WEAK void HardFault_Handler(void);
|
|
||||||
WEAK void SVC_Handler(void);
|
|
||||||
WEAK void PendSV_Handler(void);
|
|
||||||
WEAK void SysTick_Handler(void);
|
|
||||||
WEAK void IntDefaultHandler(void);
|
|
||||||
#else
|
|
||||||
WEAK void M0S_NMI_Handler(void);
|
|
||||||
WEAK void M0S_HardFault_Handler(void);
|
|
||||||
WEAK void M0S_DebugMon_Handler(void);
|
|
||||||
WEAK void M0S_SVC_Handler(void);
|
|
||||||
WEAK void M0S_PendSV_Handler(void);
|
|
||||||
WEAK void M0S_SysTick_Handler(void);
|
|
||||||
WEAK void M0S_IntDefaultHandler(void);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
//*****************************************************************************
|
|
||||||
//
|
|
||||||
// Forward declaration of the specific IRQ handlers. These are aliased
|
|
||||||
// to the IntDefaultHandler, which is a 'forever' loop. When the application
|
|
||||||
// defines a handler (with the same name), this will automatically take
|
|
||||||
// precedence over these weak definitions
|
|
||||||
//
|
|
||||||
//*****************************************************************************
|
|
||||||
#if defined (__USE_LPCOPEN)
|
|
||||||
void DAC_IRQHandler(void) ALIAS(IntDefaultHandler);
|
|
||||||
void M4_IRQHandler(void) ALIAS(IntDefaultHandler);
|
|
||||||
void DMA_IRQHandler(void) ALIAS(IntDefaultHandler);
|
|
||||||
void SGPIO_INPUT_IRQHandler(void) ALIAS(IntDefaultHandler);
|
|
||||||
void SGPIO_MATCH_IRQHandler(void) ALIAS(IntDefaultHandler);
|
|
||||||
void SGPIO_SHIFT_IRQHandler(void) ALIAS(IntDefaultHandler);
|
|
||||||
void SGPIO_POS_IRQHandler(void) ALIAS(IntDefaultHandler);
|
|
||||||
void USB0_IRQHandler(void) ALIAS(IntDefaultHandler);
|
|
||||||
void USB1_IRQHandler(void) ALIAS(IntDefaultHandler);
|
|
||||||
void SCT_IRQHandler(void) ALIAS(IntDefaultHandler);
|
|
||||||
void RIT_IRQHandler(void) ALIAS(IntDefaultHandler);
|
|
||||||
void GINT1_IRQHandler(void) ALIAS(IntDefaultHandler);
|
|
||||||
void TIMER1_IRQHandler(void) ALIAS(IntDefaultHandler);
|
|
||||||
void TIMER2_IRQHandler(void) ALIAS(IntDefaultHandler);
|
|
||||||
void GPIO5_IRQHandler(void) ALIAS(IntDefaultHandler);
|
|
||||||
void ADC0_IRQHandler(void) ALIAS(IntDefaultHandler);
|
|
||||||
void MCPWM_IRQHandler(void) ALIAS(IntDefaultHandler);
|
|
||||||
void I2C0_IRQHandler(void) ALIAS(IntDefaultHandler);
|
|
||||||
void I2C1_IRQHandler(void) ALIAS(IntDefaultHandler);
|
|
||||||
void SPI_IRQHandler(void) ALIAS(IntDefaultHandler);
|
|
||||||
void ADC1_IRQHandler(void) ALIAS(IntDefaultHandler);
|
|
||||||
void SSP0_SSP1_IRQHandler(void) ALIAS(IntDefaultHandler);
|
|
||||||
void EVRT_IRQHandler(void) ALIAS(IntDefaultHandler);
|
|
||||||
void UART0_IRQHandler(void) ALIAS(IntDefaultHandler);
|
|
||||||
void UART1_IRQHandler(void) ALIAS(IntDefaultHandler);
|
|
||||||
void UART2_CAN1_IRQHandler(void) ALIAS(IntDefaultHandler);
|
|
||||||
void UART3_IRQHandler(void) ALIAS(IntDefaultHandler);
|
|
||||||
void I2S0_I2S1_QEI_IRQHandler(void) ALIAS(IntDefaultHandler);
|
|
||||||
void CAN0_IRQHandler(void) ALIAS(IntDefaultHandler);
|
|
||||||
void SPIFI_ADCHS_IRQHandler(void) ALIAS(IntDefaultHandler);
|
|
||||||
void M0APP_IRQHandler(void) ALIAS(IntDefaultHandler);
|
|
||||||
#else
|
|
||||||
void M0S_DAC_IRQHandler(void) ALIAS(M0S_IntDefaultHandler);
|
|
||||||
void M0S_M4CORE_IRQHandler(void) ALIAS(M0S_IntDefaultHandler);
|
|
||||||
void M0S_DMA_IRQHandler(void) ALIAS(M0S_IntDefaultHandler);
|
|
||||||
void M0S_SGPIO_INPUT_IRQHandler(void) ALIAS(M0S_IntDefaultHandler);
|
|
||||||
void M0S_SGPIO_MATCH_IRQHandler(void) ALIAS(M0S_IntDefaultHandler);
|
|
||||||
void M0S_SGPIO_SHIFT_IRQHandler(void) ALIAS(M0S_IntDefaultHandler);
|
|
||||||
void M0S_SGPIO_POS_IRQHandler(void) ALIAS(M0S_IntDefaultHandler);
|
|
||||||
void M0S_USB0_IRQHandler(void) ALIAS(M0S_IntDefaultHandler);
|
|
||||||
void M0S_USB1_IRQHandler(void) ALIAS(M0S_IntDefaultHandler);
|
|
||||||
void M0S_SCT_IRQHandler(void) ALIAS(M0S_IntDefaultHandler);
|
|
||||||
void M0S_RITIMER_IRQHandler(void) ALIAS(M0S_IntDefaultHandler);
|
|
||||||
void M0S_GINT1_IRQHandler(void) ALIAS(M0S_IntDefaultHandler);
|
|
||||||
void M0S_TIMER1_IRQHandler(void) ALIAS(M0S_IntDefaultHandler);
|
|
||||||
void M0S_TIMER2_IRQHandler(void) ALIAS(M0S_IntDefaultHandler);
|
|
||||||
void M0S_PIN_INT5_IRQHandler(void) ALIAS(M0S_IntDefaultHandler);
|
|
||||||
void M0S_ADC0_IRQHandler(void) ALIAS(M0S_IntDefaultHandler);
|
|
||||||
void M0S_MCPWM_IRQHandler(void) ALIAS(M0S_IntDefaultHandler);
|
|
||||||
void M0S_I2C0_IRQHandler(void) ALIAS(M0S_IntDefaultHandler);
|
|
||||||
void M0S_I2C1_IRQHandler(void) ALIAS(M0S_IntDefaultHandler);
|
|
||||||
void M0S_SPI_IRQHandler(void) ALIAS(M0S_IntDefaultHandler);
|
|
||||||
void M0S_ADC1_IRQHandler(void) ALIAS(M0S_IntDefaultHandler);
|
|
||||||
void M0S_SSP0_OR_SSP1_IRQHandler(void) ALIAS(M0S_IntDefaultHandler);
|
|
||||||
void M0S_EVENTROUTER_IRQHandler(void) ALIAS(M0S_IntDefaultHandler);
|
|
||||||
void M0S_USART0_IRQHandler(void) ALIAS(M0S_IntDefaultHandler);
|
|
||||||
void M0S_UART1_IRQHandler(void) ALIAS(M0S_IntDefaultHandler);
|
|
||||||
void M0S_USART2_OR_C_CAN1_IRQHandler(void) ALIAS(M0S_IntDefaultHandler);
|
|
||||||
void M0S_USART3_IRQHandler(void) ALIAS(M0S_IntDefaultHandler);
|
|
||||||
void M0S_I2C0_OR_I2C1_OR_I2S1_OR_QEI_IRQHandler(void) ALIAS(M0S_IntDefaultHandler);
|
|
||||||
void M0S_C_CAN0_IRQHandler(void) ALIAS(M0S_IntDefaultHandler);
|
|
||||||
void M0S_SPIFI_OR_VADC_IRQHandler(void) ALIAS(M0S_IntDefaultHandler);
|
|
||||||
void M0S_M0APP_IRQHandler(void) ALIAS(M0S_IntDefaultHandler);
|
|
||||||
#endif
|
|
||||||
//*****************************************************************************
|
|
||||||
//
|
|
||||||
// The entry point for the application.
|
|
||||||
// __main() is the entry point for Redlib based applications
|
|
||||||
// main() is the entry point for Newlib based applications
|
|
||||||
//
|
|
||||||
//*****************************************************************************
|
|
||||||
#if defined (__REDLIB__)
|
|
||||||
extern void __main(void);
|
|
||||||
#endif
|
|
||||||
extern int main(void);
|
|
||||||
//*****************************************************************************
|
|
||||||
//
|
|
||||||
// External declaration for the pointer to the stack top from the Linker Script
|
|
||||||
//
|
|
||||||
//*****************************************************************************
|
|
||||||
extern void _vStackTop(void);
|
|
||||||
|
|
||||||
//*****************************************************************************
|
|
||||||
#if defined (__cplusplus)
|
|
||||||
} // extern "C"
|
|
||||||
#endif
|
|
||||||
//*****************************************************************************
|
|
||||||
//
|
|
||||||
// The vector table.
|
|
||||||
// This relies on the linker script to place at correct location in memory.
|
|
||||||
//
|
|
||||||
//*****************************************************************************
|
|
||||||
extern void (* const g_pfnVectors[])(void);
|
|
||||||
__attribute__ ((section(".isr_vector")))
|
|
||||||
void (* const g_pfnVectors[])(void) = {
|
|
||||||
|
|
||||||
#if defined (__USE_LPCOPEN)
|
|
||||||
// Core Level - CM0
|
|
||||||
&_vStackTop, // The initial stack pointer
|
|
||||||
ResetISR, // 1 The reset handler
|
|
||||||
NMI_Handler, // The NMI handler
|
|
||||||
HardFault_Handler, // The hard fault handler
|
|
||||||
0, // 4 Reserved
|
|
||||||
0, // 5 Reserved
|
|
||||||
0, // 6 Reserved
|
|
||||||
0, // 7 Reserved
|
|
||||||
0, // 8 Reserved
|
|
||||||
0, // 9 Reserved
|
|
||||||
0, // 10 Reserved
|
|
||||||
SVC_Handler, // SVCall handler
|
|
||||||
0, // Reserved
|
|
||||||
0, // Reserved
|
|
||||||
PendSV_Handler, // The PendSV handler
|
|
||||||
SysTick_Handler, // The SysTick handler
|
|
||||||
|
|
||||||
// Chip Level - 43xx M0SUB core
|
|
||||||
DAC_IRQHandler, // 16
|
|
||||||
M4_IRQHandler, // 17 Interrupt from M4 Core
|
|
||||||
DMA_IRQHandler, // 18 General Purpose DMA
|
|
||||||
0, // 19 Reserved
|
|
||||||
SGPIO_INPUT_IRQHandler, // 20
|
|
||||||
SGPIO_MATCH_IRQHandler, // 21
|
|
||||||
SGPIO_SHIFT_IRQHandler, // 22
|
|
||||||
SGPIO_POS_IRQHandler, // 23
|
|
||||||
USB0_IRQHandler, // 24 USB0
|
|
||||||
USB1_IRQHandler, // 25 USB1
|
|
||||||
SCT_IRQHandler , // 26 State Configurable Timer
|
|
||||||
RIT_IRQHandler, // 27 Repetitive Interrupt Timer
|
|
||||||
GINT1_IRQHandler, // 28 GINT1
|
|
||||||
TIMER1_IRQHandler, // 29 Timer1
|
|
||||||
TIMER2_IRQHandler, // 30 Timer2
|
|
||||||
GPIO5_IRQHandler, // 31
|
|
||||||
MCPWM_IRQHandler, // 32 Motor Control PWM
|
|
||||||
ADC0_IRQHandler, // 33 ADC0
|
|
||||||
I2C0_IRQHandler, // 34
|
|
||||||
I2C1_IRQHandler, // 35
|
|
||||||
SPI_IRQHandler, // 36
|
|
||||||
ADC1_IRQHandler, // 37
|
|
||||||
SSP0_SSP1_IRQHandler, // 38
|
|
||||||
EVRT_IRQHandler, // 39 Event Router
|
|
||||||
UART0_IRQHandler, // 41 USART0
|
|
||||||
UART1_IRQHandler, // 41 UART1
|
|
||||||
UART2_CAN1_IRQHandler, // 42 USART2 or C CAN1
|
|
||||||
UART3_IRQHandler, // 43 USART3
|
|
||||||
I2S0_I2S1_QEI_IRQHandler, // 35 I2C0 or I2C1 or I2S1 or QEI
|
|
||||||
CAN0_IRQHandler, // 45 C CAN0
|
|
||||||
SPIFI_ADCHS_IRQHandler, // 46
|
|
||||||
M0APP_IRQHandler, // 47 Interrupt from M0APP
|
|
||||||
};
|
|
||||||
#else
|
|
||||||
// Core Level - CM0
|
|
||||||
&_vStackTop, // The initial stack pointer
|
|
||||||
ResetISR, // 1 The reset handler
|
|
||||||
M0S_NMI_Handler, // 2 The NMI handler
|
|
||||||
M0S_HardFault_Handler, // 3 The hard fault handler
|
|
||||||
0, // 4 Reserved
|
|
||||||
0, // 5 Reserved
|
|
||||||
0, // 6 Reserved
|
|
||||||
0, // 7 Reserved
|
|
||||||
0, // 8 Reserved
|
|
||||||
0, // 9 Reserved
|
|
||||||
0, // 10 Reserved
|
|
||||||
M0S_SVC_Handler, // 11 SVCall handler
|
|
||||||
M0S_DebugMon_Handler, // 12 Debug monitor handler
|
|
||||||
0, // 13 Reserved
|
|
||||||
M0S_PendSV_Handler, // 14 The PendSV handler
|
|
||||||
M0S_SysTick_Handler, // 15 The SysTick handler
|
|
||||||
|
|
||||||
// Chip Level - LPC43 (CM0 SUB)
|
|
||||||
M0S_DAC_IRQHandler, // 16
|
|
||||||
M0S_M4CORE_IRQHandler, // 17 Interrupt from M4 Core
|
|
||||||
M0S_DMA_IRQHandler, // 18 General Purpose DMA
|
|
||||||
0, // 19 Reserved
|
|
||||||
M0S_SGPIO_INPUT_IRQHandler, // 20
|
|
||||||
M0S_SGPIO_MATCH_IRQHandler, // 21
|
|
||||||
M0S_SGPIO_SHIFT_IRQHandler, // 22
|
|
||||||
M0S_SGPIO_POS_IRQHandler, // 23
|
|
||||||
M0S_USB0_IRQHandler, // 24 USB0
|
|
||||||
M0S_USB1_IRQHandler, // 25 USB1
|
|
||||||
M0S_SCT_IRQHandler , // 26 State Configurable Timer
|
|
||||||
M0S_RITIMER_IRQHandler, // 27 Repetitive Interrupt Timer
|
|
||||||
M0S_GINT1_IRQHandler, // 28 GINT1
|
|
||||||
M0S_TIMER1_IRQHandler, // 29 Timer1
|
|
||||||
M0S_TIMER2_IRQHandler, // 30 Timer2
|
|
||||||
M0S_PIN_INT5_IRQHandler, // 31
|
|
||||||
M0S_MCPWM_IRQHandler, // 32 Motor Control PWM
|
|
||||||
M0S_ADC0_IRQHandler, // 33 ADC0
|
|
||||||
M0S_I2C0_IRQHandler, // 34
|
|
||||||
M0S_I2C1_IRQHandler, // 35
|
|
||||||
M0S_SPI_IRQHandler, // 36
|
|
||||||
M0S_ADC1_IRQHandler, // 37
|
|
||||||
M0S_SSP0_OR_SSP1_IRQHandler, // 38
|
|
||||||
M0S_EVENTROUTER_IRQHandler, // 39 Event Router
|
|
||||||
M0S_USART0_IRQHandler, // 41 USART0
|
|
||||||
M0S_UART1_IRQHandler, // 41 UART1
|
|
||||||
M0S_USART2_OR_C_CAN1_IRQHandler, // 42 USART2 or C CAN1
|
|
||||||
M0S_USART3_IRQHandler, // 43 USART3
|
|
||||||
M0S_I2C0_OR_I2C1_OR_I2S1_OR_QEI_IRQHandler,
|
|
||||||
// 35 I2C0 or I2C1 or I2S1 or QEI
|
|
||||||
M0S_C_CAN0_IRQHandler, // 45 C CAN0
|
|
||||||
M0S_SPIFI_OR_VADC_IRQHandler, // 46
|
|
||||||
M0S_M0APP_IRQHandler, // 47 Interrupt from M0APP
|
|
||||||
};
|
|
||||||
#endif
|
|
||||||
//*****************************************************************************
|
|
||||||
// Functions to carry out the initialization of RW and BSS data sections. These
|
|
||||||
// are written as separate functions rather than being inlined within the
|
|
||||||
// ResetISR() function in order to cope with MCUs with multiple banks of
|
|
||||||
// memory.
|
|
||||||
//*****************************************************************************
|
|
||||||
__attribute__ ((section(".after_vectors")))
|
|
||||||
void data_init(unsigned int romstart, unsigned int start, unsigned int len) {
|
|
||||||
unsigned int *pulDest = (unsigned int*) start;
|
|
||||||
unsigned int *pulSrc = (unsigned int*) romstart;
|
|
||||||
unsigned int loop;
|
|
||||||
for (loop = 0; loop < len; loop = loop + 4)
|
|
||||||
*pulDest++ = *pulSrc++;
|
|
||||||
}
|
|
||||||
|
|
||||||
__attribute__ ((section(".after_vectors")))
|
|
||||||
void bss_init(unsigned int start, unsigned int len) {
|
|
||||||
unsigned int *pulDest = (unsigned int*) start;
|
|
||||||
unsigned int loop;
|
|
||||||
for (loop = 0; loop < len; loop = loop + 4)
|
|
||||||
*pulDest++ = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
//*****************************************************************************
|
|
||||||
// The following symbols are constructs generated by the linker, indicating
|
|
||||||
// the location of various points in the "Global Section Table". This table is
|
|
||||||
// created by the linker via the Code Red managed linker script mechanism. It
|
|
||||||
// contains the load address, execution address and length of each RW data
|
|
||||||
// section and the execution and length of each BSS (zero initialized) section.
|
|
||||||
//*****************************************************************************
|
|
||||||
extern unsigned int __data_section_table;
|
|
||||||
extern unsigned int __data_section_table_end;
|
|
||||||
extern unsigned int __bss_section_table;
|
|
||||||
extern unsigned int __bss_section_table_end;
|
|
||||||
|
|
||||||
//*****************************************************************************
|
|
||||||
// Reset entry point for your code.
|
|
||||||
// Sets up a simple runtime environment and initializes the C/C++
|
|
||||||
// library.
|
|
||||||
//
|
|
||||||
//*****************************************************************************
|
|
||||||
void
|
|
||||||
ResetISR(void) {
|
|
||||||
|
|
||||||
// ******************************
|
|
||||||
// Modify CREG->M0SUBMEMMAP so that M0 looks in correct place
|
|
||||||
// for its vector table when an exception is triggered.
|
|
||||||
// Note that we do not use the CMSIS register access mechanism,
|
|
||||||
// as there is no guarantee that the project has been configured
|
|
||||||
// to use CMSIS.
|
|
||||||
unsigned int *pCREG_M0SUBMEMMAP = (unsigned int *) 0x40043308;
|
|
||||||
// CMSIS : CREG->M0SUBMEMMAP = <address of vector table>
|
|
||||||
*pCREG_M0SUBMEMMAP = (unsigned int)g_pfnVectors;
|
|
||||||
|
|
||||||
//
|
|
||||||
// Copy the data sections from flash to SRAM.
|
|
||||||
//
|
|
||||||
unsigned int LoadAddr, ExeAddr, SectionLen;
|
|
||||||
unsigned int *SectionTableAddr;
|
|
||||||
|
|
||||||
// Load base address of Global Section Table
|
|
||||||
SectionTableAddr = &__data_section_table;
|
|
||||||
|
|
||||||
// Copy the data sections from flash to SRAM.
|
|
||||||
while (SectionTableAddr < &__data_section_table_end) {
|
|
||||||
LoadAddr = *SectionTableAddr++;
|
|
||||||
ExeAddr = *SectionTableAddr++;
|
|
||||||
SectionLen = *SectionTableAddr++;
|
|
||||||
data_init(LoadAddr, ExeAddr, SectionLen);
|
|
||||||
}
|
|
||||||
// At this point, SectionTableAddr = &__bss_section_table;
|
|
||||||
// Zero fill the bss segment
|
|
||||||
while (SectionTableAddr < &__bss_section_table_end) {
|
|
||||||
ExeAddr = *SectionTableAddr++;
|
|
||||||
SectionLen = *SectionTableAddr++;
|
|
||||||
bss_init(ExeAddr, SectionLen);
|
|
||||||
}
|
|
||||||
|
|
||||||
// **********************************************************
|
|
||||||
// No need to call SystemInit() here, as master CM4 cpu will
|
|
||||||
// have done the main system set up before enabling CM0.
|
|
||||||
// **********************************************************
|
|
||||||
|
|
||||||
#if defined (__cplusplus)
|
|
||||||
//
|
|
||||||
// Call C++ library initialisation
|
|
||||||
//
|
|
||||||
__libc_init_array();
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if defined (__REDLIB__)
|
|
||||||
// Call the Redlib library, which in turn calls main()
|
|
||||||
__main() ;
|
|
||||||
#else
|
|
||||||
main();
|
|
||||||
#endif
|
|
||||||
|
|
||||||
//
|
|
||||||
// main() shouldn't return, but if it does, we'll just enter an infinite loop
|
|
||||||
//
|
|
||||||
while (1) {
|
|
||||||
;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//*****************************************************************************
|
|
||||||
// Default exception handlers. Override the ones here by defining your own
|
|
||||||
// handler routines in your application code.
|
|
||||||
//*****************************************************************************
|
|
||||||
__attribute__ ((section(".after_vectors")))
|
|
||||||
#if defined (__USE_LPCOPEN)
|
|
||||||
void NMI_Handler(void)
|
|
||||||
#else
|
|
||||||
void M0S_NMI_Handler(void)
|
|
||||||
#endif
|
|
||||||
{ while(1) { }
|
|
||||||
}
|
|
||||||
|
|
||||||
__attribute__ ((section(".after_vectors")))
|
|
||||||
#if defined (__USE_LPCOPEN)
|
|
||||||
void HardFault_Handler(void)
|
|
||||||
#else
|
|
||||||
void M0S_HardFault_Handler(void)
|
|
||||||
#endif
|
|
||||||
{ while(1) { }
|
|
||||||
}
|
|
||||||
|
|
||||||
__attribute__ ((section(".after_vectors")))
|
|
||||||
#if defined (__USE_LPCOPEN)
|
|
||||||
void SVC_Handler(void)
|
|
||||||
#else
|
|
||||||
void M0S_SVC_Handler(void)
|
|
||||||
#endif
|
|
||||||
{ while(1) { }
|
|
||||||
}
|
|
||||||
|
|
||||||
__attribute__ ((section(".after_vectors")))
|
|
||||||
#if defined (__USE_LPCOPEN)
|
|
||||||
void PendSV_Handler(void)
|
|
||||||
#else
|
|
||||||
void M0S_PendSV_Handler(void)
|
|
||||||
#endif
|
|
||||||
{ while(1) { }
|
|
||||||
}
|
|
||||||
|
|
||||||
__attribute__ ((section(".after_vectors")))
|
|
||||||
#if defined (__USE_LPCOPEN)
|
|
||||||
void SysTick_Handler(void)
|
|
||||||
#else
|
|
||||||
void M0S_SysTick_Handler(void)
|
|
||||||
#endif
|
|
||||||
{ while(1) { }
|
|
||||||
}
|
|
||||||
|
|
||||||
//*****************************************************************************
|
|
||||||
//
|
|
||||||
// Processor ends up here if an unexpected interrupt occurs or a specific
|
|
||||||
// handler is not present in the application code.
|
|
||||||
//
|
|
||||||
//*****************************************************************************
|
|
||||||
__attribute__ ((section(".after_vectors")))
|
|
||||||
#if defined (__USE_LPCOPEN)
|
|
||||||
void IntDefaultHandler(void)
|
|
||||||
#else
|
|
||||||
void M0S_IntDefaultHandler(void)
|
|
||||||
#endif
|
|
||||||
{ while(1) { }
|
|
||||||
}
|
|
|
@ -0,0 +1,266 @@
|
||||||
|
/*****************************************************************************/
|
||||||
|
/* startup_LPC43xx.s: Startup file for LPC43xx device series */
|
||||||
|
/*****************************************************************************/
|
||||||
|
/* Version: CodeSourcery Sourcery G++ Lite (with CS3) */
|
||||||
|
/*****************************************************************************/
|
||||||
|
|
||||||
|
.syntax unified
|
||||||
|
.cpu cortex-m3
|
||||||
|
.fpu softvfp
|
||||||
|
.thumb
|
||||||
|
|
||||||
|
.word _sidata
|
||||||
|
.word _sdata
|
||||||
|
.word _edata
|
||||||
|
.word _sbss
|
||||||
|
.word _ebss
|
||||||
|
|
||||||
|
|
||||||
|
.equ Sign_Value, 0x5A5A5A5A
|
||||||
|
|
||||||
|
/* Vector Table */
|
||||||
|
|
||||||
|
.section ".interrupt_vector"
|
||||||
|
.globl __interrupt_vector
|
||||||
|
.type __interrupt_vector, %function
|
||||||
|
|
||||||
|
__interrupt_vector:
|
||||||
|
.long _estack /* Top of Stack */
|
||||||
|
.long Reset_Handler /* 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 Sign_Value /* Reserved */
|
||||||
|
.long 0 /* Reserved */
|
||||||
|
.long 0 /* Reserved */
|
||||||
|
.long 0 /* Reserved */
|
||||||
|
.long SVC_Handler /* SVCall Handler */
|
||||||
|
.long DebugMon_Handler /* Debug Monitor Handler */
|
||||||
|
.long 0 /* Reserved */
|
||||||
|
.long PendSV_Handler /* PendSV Handler */
|
||||||
|
.long SysTick_Handler /* SysTick Handler */
|
||||||
|
|
||||||
|
/* External Interrupts */
|
||||||
|
.long DAC_IRQHandler /* 16 D/A Converter */
|
||||||
|
.long M0CORE_IRQHandler /* 17 M0 Core */
|
||||||
|
.long DMA_IRQHandler /* 18 General Purpose DMA */
|
||||||
|
.long EZH_IRQHandler /* 19 EZH/EDM */
|
||||||
|
.long FLASH_EEPROM_IRQHandler /* 20 Reserved for Typhoon */
|
||||||
|
.long ETH_IRQHandler /* 21 Ethernet */
|
||||||
|
.long SDIO_IRQHandler /* 22 SD/MMC */
|
||||||
|
.long LCD_IRQHandler /* 23 LCD */
|
||||||
|
.long USB0_IRQHandler /* 24 USB0 */
|
||||||
|
.long USB1_IRQHandler /* 25 USB1 */
|
||||||
|
.long SCT_IRQHandler /* 26 State Configurable Timer */
|
||||||
|
.long RIT_IRQHandler /* 27 Repetitive Interrupt Timer*/
|
||||||
|
.long TIMER0_IRQHandler /* 28 Timer0 */
|
||||||
|
.long TIMER1_IRQHandler /* 29 Timer1 */
|
||||||
|
.long TIMER2_IRQHandler /* 30 Timer2 */
|
||||||
|
.long TIMER3_IRQHandler /* 31 Timer3 */
|
||||||
|
.long MCPWM_IRQHandler /* 32 Motor Control PWM */
|
||||||
|
.long ADC0_IRQHandler /* 33 A/D Converter 0 */
|
||||||
|
.long I2C0_IRQHandler /* 34 I2C0 */
|
||||||
|
.long I2C1_IRQHandler /* 35 I2C1 */
|
||||||
|
.long SPI_IRQHandler /* 36 SPI */
|
||||||
|
.long ADC1_IRQHandler /* 37 A/D Converter 1 */
|
||||||
|
.long SSP0_IRQHandler /* 38 SSP0 */
|
||||||
|
.long SSP1_IRQHandler /* 39 SSP1 */
|
||||||
|
.long UART0_IRQHandler /* 40 UART0 */
|
||||||
|
.long UART1_IRQHandler /* 41 UART1 */
|
||||||
|
.long UART2_IRQHandler /* 42 UART2 */
|
||||||
|
.long UART3_IRQHandler /* 43 UART3 */
|
||||||
|
.long I2S0_IRQHandler /* 44 I2S0 */
|
||||||
|
.long I2S1_IRQHandler /* 45 I2S1 */
|
||||||
|
.long SPIFI_IRQHandler /* 46 SPI Flash Interface */
|
||||||
|
.long SGPIO_IRQHandler /* 47 SGPIO */
|
||||||
|
.long GPIO0_IRQHandler /* 48 GPIO0 */
|
||||||
|
.long GPIO1_IRQHandler /* 49 GPIO1 */
|
||||||
|
.long GPIO2_IRQHandler /* 50 GPIO2 */
|
||||||
|
.long GPIO3_IRQHandler /* 51 GPIO3 */
|
||||||
|
.long GPIO4_IRQHandler /* 52 GPIO4 */
|
||||||
|
.long GPIO5_IRQHandler /* 53 GPIO5 */
|
||||||
|
.long GPIO6_IRQHandler /* 54 GPIO6 */
|
||||||
|
.long GPIO7_IRQHandler /* 55 GPIO7 */
|
||||||
|
.long GINT0_IRQHandler /* 56 GINT0 */
|
||||||
|
.long GINT1_IRQHandler /* 57 GINT1 */
|
||||||
|
.long EVRT_IRQHandler /* 58 Event Router */
|
||||||
|
.long CAN1_IRQHandler /* 59 C_CAN1 */
|
||||||
|
.long 0 /* 60 Reserved */
|
||||||
|
.long VADC_IRQHandler /* 61 VADC */
|
||||||
|
.long ATIMER_IRQHandler /* 62 ATIMER */
|
||||||
|
.long RTC_IRQHandler /* 63 RTC */
|
||||||
|
.long 0 /* 64 Reserved */
|
||||||
|
.long WDT_IRQHandler /* 65 WDT */
|
||||||
|
.long M0s_IRQHandler /* 66 M0s */
|
||||||
|
.long CAN0_IRQHandler /* 67 C_CAN0 */
|
||||||
|
.long QEI_IRQHandler /* 68 QEI */
|
||||||
|
|
||||||
|
.size __interrupt_vector, . - __interrupt_vector
|
||||||
|
|
||||||
|
|
||||||
|
.thumb
|
||||||
|
|
||||||
|
|
||||||
|
/* Reset Handler */
|
||||||
|
.section .text.Reset_Handler
|
||||||
|
.weak Reset_Handler
|
||||||
|
.type Reset_Handler, %function
|
||||||
|
Reset_Handler:
|
||||||
|
.fnstart
|
||||||
|
.ifdef RAM_MODE
|
||||||
|
/* Clear .bss section (Zero init) */
|
||||||
|
mov R0, #0
|
||||||
|
ldr R1, =__bss_start__
|
||||||
|
ldr R2, =__bss_end__
|
||||||
|
cmp R1,R2
|
||||||
|
beq BSSIsEmpty
|
||||||
|
LoopZI:
|
||||||
|
cmp R1, R2
|
||||||
|
bhs BSSIsEmpty
|
||||||
|
str R0, [R1]
|
||||||
|
add R1, #4
|
||||||
|
blo LoopZI
|
||||||
|
BSSIsEmpty:
|
||||||
|
ldr R0, =SystemInit
|
||||||
|
blx R0
|
||||||
|
ldr R0,=main
|
||||||
|
bx R0
|
||||||
|
.else
|
||||||
|
ldr R0, =SystemInit
|
||||||
|
blx R0
|
||||||
|
ldr R0,=main
|
||||||
|
bx R0
|
||||||
|
.endif
|
||||||
|
|
||||||
|
.pool
|
||||||
|
.cantunwind
|
||||||
|
.fnend
|
||||||
|
.size Reset_Handler,.-Reset_Handler
|
||||||
|
|
||||||
|
.section ".text"
|
||||||
|
|
||||||
|
/* Exception Handlers */
|
||||||
|
|
||||||
|
.weak NMI_Handler
|
||||||
|
.type NMI_Handler, %function
|
||||||
|
NMI_Handler:
|
||||||
|
B .
|
||||||
|
.size NMI_Handler, . - NMI_Handler
|
||||||
|
|
||||||
|
.weak HardFault_Handler
|
||||||
|
.type HardFault_Handler, %function
|
||||||
|
HardFault_Handler:
|
||||||
|
B .
|
||||||
|
.size HardFault_Handler, . - HardFault_Handler
|
||||||
|
|
||||||
|
.weak MemManage_Handler
|
||||||
|
.type MemManage_Handler, %function
|
||||||
|
MemManage_Handler:
|
||||||
|
B .
|
||||||
|
.size MemManage_Handler, . - MemManage_Handler
|
||||||
|
|
||||||
|
.weak BusFault_Handler
|
||||||
|
.type BusFault_Handler, %function
|
||||||
|
BusFault_Handler:
|
||||||
|
B .
|
||||||
|
.size BusFault_Handler, . - BusFault_Handler
|
||||||
|
|
||||||
|
.weak UsageFault_Handler
|
||||||
|
.type UsageFault_Handler, %function
|
||||||
|
UsageFault_Handler:
|
||||||
|
B .
|
||||||
|
.size UsageFault_Handler, . - UsageFault_Handler
|
||||||
|
|
||||||
|
.weak SVC_Handler
|
||||||
|
.type SVC_Handler, %function
|
||||||
|
SVC_Handler:
|
||||||
|
B .
|
||||||
|
.size SVC_Handler, . - SVC_Handler
|
||||||
|
|
||||||
|
.weak DebugMon_Handler
|
||||||
|
.type DebugMon_Handler, %function
|
||||||
|
DebugMon_Handler:
|
||||||
|
B .
|
||||||
|
.size DebugMon_Handler, . - DebugMon_Handler
|
||||||
|
|
||||||
|
.weak PendSV_Handler
|
||||||
|
.type PendSV_Handler, %function
|
||||||
|
PendSV_Handler:
|
||||||
|
B .
|
||||||
|
.size PendSV_Handler, . - PendSV_Handler
|
||||||
|
|
||||||
|
.weak SysTick_Handler
|
||||||
|
.type SysTick_Handler, %function
|
||||||
|
SysTick_Handler:
|
||||||
|
B .
|
||||||
|
.size SysTick_Handler, . - SysTick_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 DAC_IRQHandler
|
||||||
|
IRQ M0CORE_IRQHandler
|
||||||
|
IRQ DMA_IRQHandler
|
||||||
|
IRQ EZH_IRQHandler
|
||||||
|
IRQ FLASH_EEPROM_IRQHandler
|
||||||
|
IRQ ETH_IRQHandler
|
||||||
|
IRQ SDIO_IRQHandler
|
||||||
|
IRQ LCD_IRQHandler
|
||||||
|
IRQ USB0_IRQHandler
|
||||||
|
IRQ USB1_IRQHandler
|
||||||
|
IRQ SCT_IRQHandler
|
||||||
|
IRQ RIT_IRQHandler
|
||||||
|
IRQ TIMER0_IRQHandler
|
||||||
|
IRQ TIMER1_IRQHandler
|
||||||
|
IRQ TIMER2_IRQHandler
|
||||||
|
IRQ TIMER3_IRQHandler
|
||||||
|
IRQ MCPWM_IRQHandler
|
||||||
|
IRQ ADC0_IRQHandler
|
||||||
|
IRQ I2C0_IRQHandler
|
||||||
|
IRQ I2C1_IRQHandler
|
||||||
|
IRQ SPI_IRQHandler
|
||||||
|
IRQ ADC1_IRQHandler
|
||||||
|
IRQ SSP0_IRQHandler
|
||||||
|
IRQ SSP1_IRQHandler
|
||||||
|
IRQ UART0_IRQHandler
|
||||||
|
IRQ UART1_IRQHandler
|
||||||
|
IRQ UART2_IRQHandler
|
||||||
|
IRQ UART3_IRQHandler
|
||||||
|
IRQ I2S0_IRQHandler
|
||||||
|
IRQ I2S1_IRQHandler
|
||||||
|
IRQ SPIFI_IRQHandler
|
||||||
|
IRQ SGPIO_IRQHandler
|
||||||
|
IRQ GPIO0_IRQHandler
|
||||||
|
IRQ GPIO1_IRQHandler
|
||||||
|
IRQ GPIO2_IRQHandler
|
||||||
|
IRQ GPIO3_IRQHandler
|
||||||
|
IRQ GPIO4_IRQHandler
|
||||||
|
IRQ GPIO5_IRQHandler
|
||||||
|
IRQ GPIO6_IRQHandler
|
||||||
|
IRQ GPIO7_IRQHandler
|
||||||
|
IRQ GINT0_IRQHandler
|
||||||
|
IRQ GINT1_IRQHandler
|
||||||
|
IRQ EVRT_IRQHandler
|
||||||
|
IRQ CAN1_IRQHandler
|
||||||
|
IRQ VADC_IRQHandler
|
||||||
|
IRQ ATIMER_IRQHandler
|
||||||
|
IRQ RTC_IRQHandler
|
||||||
|
IRQ WDT_IRQHandler
|
||||||
|
IRQ M0s_IRQHandler
|
||||||
|
IRQ CAN0_IRQHandler
|
||||||
|
IRQ QEI_IRQHandler
|
||||||
|
|
||||||
|
.end
|
|
@ -0,0 +1,266 @@
|
||||||
|
/*****************************************************************************/
|
||||||
|
/* startup_LPC43xx.s: Startup file for LPC43xx device series */
|
||||||
|
/*****************************************************************************/
|
||||||
|
/* Version: CodeSourcery Sourcery G++ Lite (with CS3) */
|
||||||
|
/*****************************************************************************/
|
||||||
|
|
||||||
|
.syntax unified
|
||||||
|
.cpu cortex-m0
|
||||||
|
.fpu softvfp
|
||||||
|
.thumb
|
||||||
|
|
||||||
|
.word _sidata
|
||||||
|
.word _sdata
|
||||||
|
.word _edata
|
||||||
|
.word _sbss
|
||||||
|
.word _ebss
|
||||||
|
|
||||||
|
|
||||||
|
.equ Sign_Value, 0x5A5A5A5A
|
||||||
|
|
||||||
|
/* Vector Table */
|
||||||
|
|
||||||
|
.section ".interrupt_vector"
|
||||||
|
.globl __interrupt_vector
|
||||||
|
.type __interrupt_vector, %function
|
||||||
|
|
||||||
|
__interrupt_vector:
|
||||||
|
.long _estack /* Top of Stack */
|
||||||
|
.long Reset_Handler /* 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 Sign_Value /* Reserved */
|
||||||
|
.long 0 /* Reserved */
|
||||||
|
.long 0 /* Reserved */
|
||||||
|
.long 0 /* Reserved */
|
||||||
|
.long SVC_Handler /* SVCall Handler */
|
||||||
|
.long DebugMon_Handler /* Debug Monitor Handler */
|
||||||
|
.long 0 /* Reserved */
|
||||||
|
.long PendSV_Handler /* PendSV Handler */
|
||||||
|
.long SysTick_Handler /* SysTick Handler */
|
||||||
|
|
||||||
|
/* External Interrupts */
|
||||||
|
.long DAC_IRQHandler /* 16 D/A Converter */
|
||||||
|
.long M4CORE_IRQHandler /* 17 M0 Core */
|
||||||
|
.long DMA_IRQHandler /* 18 General Purpose DMA */
|
||||||
|
.long EZH_IRQHandler /* 19 EZH/EDM */
|
||||||
|
.long FLASH_EEPROM_IRQHandler /* 20 Reserved for Typhoon */
|
||||||
|
.long ETH_IRQHandler /* 21 Ethernet */
|
||||||
|
.long SDIO_IRQHandler /* 22 SD/MMC */
|
||||||
|
.long LCD_IRQHandler /* 23 LCD */
|
||||||
|
.long USB0_IRQHandler /* 24 USB0 */
|
||||||
|
.long USB1_IRQHandler /* 25 USB1 */
|
||||||
|
.long SCT_IRQHandler /* 26 State Configurable Timer */
|
||||||
|
.long RIT_IRQHandler /* 27 Repetitive Interrupt Timer*/
|
||||||
|
.long TIMER0_IRQHandler /* 28 Timer0 */
|
||||||
|
.long TIMER1_IRQHandler /* 29 Timer1 */
|
||||||
|
.long TIMER2_IRQHandler /* 30 Timer2 */
|
||||||
|
.long TIMER3_IRQHandler /* 31 Timer3 */
|
||||||
|
.long MCPWM_IRQHandler /* 32 Motor Control PWM */
|
||||||
|
.long ADC0_IRQHandler /* 33 A/D Converter 0 */
|
||||||
|
.long I2C0_IRQHandler /* 34 I2C0 */
|
||||||
|
.long I2C1_IRQHandler /* 35 I2C1 */
|
||||||
|
.long SPI_IRQHandler /* 36 SPI */
|
||||||
|
.long ADC1_IRQHandler /* 37 A/D Converter 1 */
|
||||||
|
.long SSP0_IRQHandler /* 38 SSP0 */
|
||||||
|
.long SSP1_IRQHandler /* 39 SSP1 */
|
||||||
|
.long UART0_IRQHandler /* 40 UART0 */
|
||||||
|
.long UART1_IRQHandler /* 41 UART1 */
|
||||||
|
.long UART2_IRQHandler /* 42 UART2 */
|
||||||
|
.long UART3_IRQHandler /* 43 UART3 */
|
||||||
|
.long I2S0_IRQHandler /* 44 I2S0 */
|
||||||
|
.long I2S1_IRQHandler /* 45 I2S1 */
|
||||||
|
.long SPIFI_IRQHandler /* 46 SPI Flash Interface */
|
||||||
|
.long SGPIO_IRQHandler /* 47 SGPIO */
|
||||||
|
.long GPIO0_IRQHandler /* 48 GPIO0 */
|
||||||
|
.long GPIO1_IRQHandler /* 49 GPIO1 */
|
||||||
|
.long GPIO2_IRQHandler /* 50 GPIO2 */
|
||||||
|
.long GPIO3_IRQHandler /* 51 GPIO3 */
|
||||||
|
.long GPIO4_IRQHandler /* 52 GPIO4 */
|
||||||
|
.long GPIO5_IRQHandler /* 53 GPIO5 */
|
||||||
|
.long GPIO6_IRQHandler /* 54 GPIO6 */
|
||||||
|
.long GPIO7_IRQHandler /* 55 GPIO7 */
|
||||||
|
.long GINT0_IRQHandler /* 56 GINT0 */
|
||||||
|
.long GINT1_IRQHandler /* 57 GINT1 */
|
||||||
|
.long EVRT_IRQHandler /* 58 Event Router */
|
||||||
|
.long CAN1_IRQHandler /* 59 C_CAN1 */
|
||||||
|
.long 0 /* 60 Reserved */
|
||||||
|
.long VADC_IRQHandler /* 61 VADC */
|
||||||
|
.long ATIMER_IRQHandler /* 62 ATIMER */
|
||||||
|
.long RTC_IRQHandler /* 63 RTC */
|
||||||
|
.long 0 /* 64 Reserved */
|
||||||
|
.long WDT_IRQHandler /* 65 WDT */
|
||||||
|
.long M0s_IRQHandler /* 66 M0s */
|
||||||
|
.long CAN0_IRQHandler /* 67 C_CAN0 */
|
||||||
|
.long QEI_IRQHandler /* 68 QEI */
|
||||||
|
|
||||||
|
.size __interrupt_vector, . - __interrupt_vector
|
||||||
|
|
||||||
|
|
||||||
|
.thumb
|
||||||
|
|
||||||
|
|
||||||
|
/* Reset Handler */
|
||||||
|
.section .text.Reset_Handler
|
||||||
|
.weak Reset_Handler
|
||||||
|
.type Reset_Handler, %function
|
||||||
|
Reset_Handler:
|
||||||
|
.fnstart
|
||||||
|
.ifdef RAM_MODE
|
||||||
|
/* Clear .bss section (Zero init) */
|
||||||
|
mov R0, #0
|
||||||
|
ldr R1, =__bss_start__
|
||||||
|
ldr R2, =__bss_end__
|
||||||
|
cmp R1,R2
|
||||||
|
beq BSSIsEmpty
|
||||||
|
LoopZI:
|
||||||
|
cmp R1, R2
|
||||||
|
bhs BSSIsEmpty
|
||||||
|
str R0, [R1]
|
||||||
|
add R1, #4
|
||||||
|
blo LoopZI
|
||||||
|
BSSIsEmpty:
|
||||||
|
ldr R0, =SystemInit
|
||||||
|
blx R0
|
||||||
|
ldr R0,=main
|
||||||
|
bx R0
|
||||||
|
.else
|
||||||
|
ldr R0, =SystemInit
|
||||||
|
blx R0
|
||||||
|
ldr R0,=main
|
||||||
|
bx R0
|
||||||
|
.endif
|
||||||
|
|
||||||
|
.pool
|
||||||
|
.cantunwind
|
||||||
|
.fnend
|
||||||
|
.size Reset_Handler,.-Reset_Handler
|
||||||
|
|
||||||
|
.section ".text"
|
||||||
|
|
||||||
|
/* Exception Handlers */
|
||||||
|
|
||||||
|
.weak NMI_Handler
|
||||||
|
.type NMI_Handler, %function
|
||||||
|
NMI_Handler:
|
||||||
|
B .
|
||||||
|
.size NMI_Handler, . - NMI_Handler
|
||||||
|
|
||||||
|
.weak HardFault_Handler
|
||||||
|
.type HardFault_Handler, %function
|
||||||
|
HardFault_Handler:
|
||||||
|
B .
|
||||||
|
.size HardFault_Handler, . - HardFault_Handler
|
||||||
|
|
||||||
|
.weak MemManage_Handler
|
||||||
|
.type MemManage_Handler, %function
|
||||||
|
MemManage_Handler:
|
||||||
|
B .
|
||||||
|
.size MemManage_Handler, . - MemManage_Handler
|
||||||
|
|
||||||
|
.weak BusFault_Handler
|
||||||
|
.type BusFault_Handler, %function
|
||||||
|
BusFault_Handler:
|
||||||
|
B .
|
||||||
|
.size BusFault_Handler, . - BusFault_Handler
|
||||||
|
|
||||||
|
.weak UsageFault_Handler
|
||||||
|
.type UsageFault_Handler, %function
|
||||||
|
UsageFault_Handler:
|
||||||
|
B .
|
||||||
|
.size UsageFault_Handler, . - UsageFault_Handler
|
||||||
|
|
||||||
|
.weak SVC_Handler
|
||||||
|
.type SVC_Handler, %function
|
||||||
|
SVC_Handler:
|
||||||
|
B .
|
||||||
|
.size SVC_Handler, . - SVC_Handler
|
||||||
|
|
||||||
|
.weak DebugMon_Handler
|
||||||
|
.type DebugMon_Handler, %function
|
||||||
|
DebugMon_Handler:
|
||||||
|
B .
|
||||||
|
.size DebugMon_Handler, . - DebugMon_Handler
|
||||||
|
|
||||||
|
.weak PendSV_Handler
|
||||||
|
.type PendSV_Handler, %function
|
||||||
|
PendSV_Handler:
|
||||||
|
B .
|
||||||
|
.size PendSV_Handler, . - PendSV_Handler
|
||||||
|
|
||||||
|
.weak SysTick_Handler
|
||||||
|
.type SysTick_Handler, %function
|
||||||
|
SysTick_Handler:
|
||||||
|
B .
|
||||||
|
.size SysTick_Handler, . - SysTick_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 DAC_IRQHandler
|
||||||
|
IRQ M0CORE_IRQHandler
|
||||||
|
IRQ DMA_IRQHandler
|
||||||
|
IRQ EZH_IRQHandler
|
||||||
|
IRQ FLASH_EEPROM_IRQHandler
|
||||||
|
IRQ ETH_IRQHandler
|
||||||
|
IRQ SDIO_IRQHandler
|
||||||
|
IRQ LCD_IRQHandler
|
||||||
|
IRQ USB0_IRQHandler
|
||||||
|
IRQ USB1_IRQHandler
|
||||||
|
IRQ SCT_IRQHandler
|
||||||
|
IRQ RIT_IRQHandler
|
||||||
|
IRQ TIMER0_IRQHandler
|
||||||
|
IRQ TIMER1_IRQHandler
|
||||||
|
IRQ TIMER2_IRQHandler
|
||||||
|
IRQ TIMER3_IRQHandler
|
||||||
|
IRQ MCPWM_IRQHandler
|
||||||
|
IRQ ADC0_IRQHandler
|
||||||
|
IRQ I2C0_IRQHandler
|
||||||
|
IRQ I2C1_IRQHandler
|
||||||
|
IRQ SPI_IRQHandler
|
||||||
|
IRQ ADC1_IRQHandler
|
||||||
|
IRQ SSP0_IRQHandler
|
||||||
|
IRQ SSP1_IRQHandler
|
||||||
|
IRQ UART0_IRQHandler
|
||||||
|
IRQ UART1_IRQHandler
|
||||||
|
IRQ UART2_IRQHandler
|
||||||
|
IRQ UART3_IRQHandler
|
||||||
|
IRQ I2S0_IRQHandler
|
||||||
|
IRQ I2S1_IRQHandler
|
||||||
|
IRQ SPIFI_IRQHandler
|
||||||
|
IRQ SGPIO_IRQHandler
|
||||||
|
IRQ GPIO0_IRQHandler
|
||||||
|
IRQ GPIO1_IRQHandler
|
||||||
|
IRQ GPIO2_IRQHandler
|
||||||
|
IRQ GPIO3_IRQHandler
|
||||||
|
IRQ GPIO4_IRQHandler
|
||||||
|
IRQ GPIO5_IRQHandler
|
||||||
|
IRQ GPIO6_IRQHandler
|
||||||
|
IRQ GPIO7_IRQHandler
|
||||||
|
IRQ GINT0_IRQHandler
|
||||||
|
IRQ GINT1_IRQHandler
|
||||||
|
IRQ EVRT_IRQHandler
|
||||||
|
IRQ CAN1_IRQHandler
|
||||||
|
IRQ VADC_IRQHandler
|
||||||
|
IRQ ATIMER_IRQHandler
|
||||||
|
IRQ RTC_IRQHandler
|
||||||
|
IRQ WDT_IRQHandler
|
||||||
|
IRQ M0s_IRQHandler
|
||||||
|
IRQ CAN0_IRQHandler
|
||||||
|
IRQ QEI_IRQHandler
|
||||||
|
|
||||||
|
.end
|
|
@ -0,0 +1,242 @@
|
||||||
|
/**************************************************
|
||||||
|
*
|
||||||
|
* Part one of the system initialization code, contains low-level
|
||||||
|
* initialization, plain thumb variant.
|
||||||
|
*
|
||||||
|
* Copyright 2011 IAR Systems. All rights reserved.
|
||||||
|
*
|
||||||
|
* $Revision: 47876 $
|
||||||
|
*
|
||||||
|
**************************************************/
|
||||||
|
|
||||||
|
;
|
||||||
|
; The modules in this file are included in the libraries, and may be replaced
|
||||||
|
; by any user-defined modules that define the PUBLIC symbol _program_start or
|
||||||
|
; a user defined start symbol.
|
||||||
|
; To override the cstartup defined in the library, simply add your modified
|
||||||
|
; version to the workbench project.
|
||||||
|
;
|
||||||
|
; The vector table is normally located at address 0.
|
||||||
|
; When debugging in RAM, it can be located in RAM, aligned to at least 2^6.
|
||||||
|
; The name "__vector_table" has special meaning for C-SPY:
|
||||||
|
; it is where the SP start value is found, and the NVIC vector
|
||||||
|
; table register (VTOR) is initialized to this address if != 0.
|
||||||
|
;
|
||||||
|
; Cortex-M version
|
||||||
|
;
|
||||||
|
|
||||||
|
|
||||||
|
MODULE ?cstartup
|
||||||
|
|
||||||
|
;; Forward declaration of sections.
|
||||||
|
SECTION CSTACK:DATA:NOROOT(3)
|
||||||
|
|
||||||
|
SECTION .intvec:CODE:NOROOT(2)
|
||||||
|
|
||||||
|
EXTERN __iar_program_start
|
||||||
|
EXTERN SystemInit
|
||||||
|
PUBLIC __vector_table
|
||||||
|
PUBLIC __vector_table_0x1c
|
||||||
|
PUBLIC __Vectors
|
||||||
|
PUBLIC __Vectors_End
|
||||||
|
PUBLIC __Vectors_Size
|
||||||
|
|
||||||
|
|
||||||
|
DATA
|
||||||
|
|
||||||
|
__vector_table
|
||||||
|
DCD sfe(CSTACK)
|
||||||
|
DCD Reset_Handler
|
||||||
|
DCD NMI_Handler
|
||||||
|
DCD HardFault_Handler
|
||||||
|
DCD MemManage_Handler
|
||||||
|
DCD BusFault_Handler
|
||||||
|
DCD UsageFault_Handler
|
||||||
|
__vector_table_0x1c
|
||||||
|
DCD 0
|
||||||
|
DCD 0
|
||||||
|
DCD 0
|
||||||
|
DCD 0
|
||||||
|
DCD SVC_Handler
|
||||||
|
DCD DebugMon_Handler
|
||||||
|
DCD 0
|
||||||
|
DCD PendSV_Handler
|
||||||
|
DCD SysTick_Handler
|
||||||
|
|
||||||
|
; External Interrupts
|
||||||
|
DCD DAC_IRQHandler
|
||||||
|
DCD M4_IRQHandler
|
||||||
|
DCD DMA_IRQHandler
|
||||||
|
DCD 0
|
||||||
|
DCD SGPIO_INPUT_IRQHandler
|
||||||
|
DCD SGPIO_MATCH_IRQHandler
|
||||||
|
DCD SGPIO_SHIFT_IRQHandler
|
||||||
|
DCD SGPIO_POS_IRQHandler
|
||||||
|
DCD USB0_IRQHandler
|
||||||
|
DCD USB1_IRQHandler
|
||||||
|
DCD SCT_IRQHandler
|
||||||
|
DCD RIT_IRQHandler
|
||||||
|
DCD GINT1_IRQHandler
|
||||||
|
DCD TIMER1_IRQHandler
|
||||||
|
DCD TIMER2_IRQHandler
|
||||||
|
DCD GPIO5_IRQHandler
|
||||||
|
DCD MCPWM_IRQHandler
|
||||||
|
DCD ADC0_IRQHandler
|
||||||
|
DCD I2C0_IRQHandler
|
||||||
|
DCD I2C1_IRQHandler
|
||||||
|
DCD SPI_IRQHandler
|
||||||
|
DCD ADC1_IRQHandler
|
||||||
|
DCD SSP0_SSP1_IRQHandler
|
||||||
|
DCD EVRT_IRQHandler
|
||||||
|
DCD UART0_IRQHandler
|
||||||
|
DCD UART1_IRQHandler
|
||||||
|
DCD UART2_CAN1_IRQHandler
|
||||||
|
DCD UART3_IRQHandler
|
||||||
|
DCD I2S0_I2S1_QEI_IRQHandler
|
||||||
|
DCD CAN0_IRQHandler
|
||||||
|
DCD SPIFI_ADCHS_IRQHandler
|
||||||
|
DCD M0APP_IRQHandler
|
||||||
|
__Vectors_End
|
||||||
|
|
||||||
|
__Vectors EQU __vector_table
|
||||||
|
__Vectors_Size EQU __Vectors_End - __Vectors
|
||||||
|
|
||||||
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
;;
|
||||||
|
;; Default interrupt handlers.
|
||||||
|
;;
|
||||||
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
|
||||||
|
THUMB
|
||||||
|
|
||||||
|
PUBWEAK Reset_Handler
|
||||||
|
SECTION .text:CODE:REORDER(2)
|
||||||
|
Reset_Handler
|
||||||
|
LDR R0, =SystemInit
|
||||||
|
BLX R0
|
||||||
|
LDR R0, =__iar_program_start
|
||||||
|
BX R0
|
||||||
|
|
||||||
|
PUBWEAK NMI_Handler
|
||||||
|
PUBWEAK HardFault_Handler
|
||||||
|
PUBWEAK MemManage_Handler
|
||||||
|
PUBWEAK BusFault_Handler
|
||||||
|
PUBWEAK UsageFault_Handler
|
||||||
|
PUBWEAK SVC_Handler
|
||||||
|
PUBWEAK DebugMon_Handler
|
||||||
|
PUBWEAK PendSV_Handler
|
||||||
|
PUBWEAK SysTick_Handler
|
||||||
|
|
||||||
|
PUBWEAK DAC_IRQHandler
|
||||||
|
PUBWEAK M4_IRQHandler
|
||||||
|
PUBWEAK DMA_IRQHandler
|
||||||
|
PUBWEAK UnHandled_Vector
|
||||||
|
PUBWEAK SGPIO_INPUT_IRQHandler
|
||||||
|
PUBWEAK SGPIO_MATCH_IRQHandler
|
||||||
|
PUBWEAK SGPIO_SHIFT_IRQHandler
|
||||||
|
PUBWEAK SGPIO_POS_IRQHandler
|
||||||
|
PUBWEAK USB0_IRQHandler
|
||||||
|
PUBWEAK USB1_IRQHandler
|
||||||
|
PUBWEAK SCT_IRQHandler
|
||||||
|
PUBWEAK RIT_IRQHandler
|
||||||
|
PUBWEAK GINT1_IRQHandler
|
||||||
|
PUBWEAK TIMER1_IRQHandler
|
||||||
|
PUBWEAK TIMER2_IRQHandler
|
||||||
|
PUBWEAK GPIO5_IRQHandler
|
||||||
|
PUBWEAK MCPWM_IRQHandler
|
||||||
|
PUBWEAK ADC0_IRQHandler
|
||||||
|
PUBWEAK I2C0_IRQHandler
|
||||||
|
PUBWEAK I2C1_IRQHandler
|
||||||
|
PUBWEAK SPI_IRQHandler
|
||||||
|
PUBWEAK ADC1_IRQHandler
|
||||||
|
PUBWEAK SSP0_SSP1_IRQHandler
|
||||||
|
PUBWEAK EVRT_IRQHandler
|
||||||
|
PUBWEAK UART0_IRQHandler
|
||||||
|
PUBWEAK UART1_IRQHandler
|
||||||
|
PUBWEAK UART2_CAN1_IRQHandler
|
||||||
|
PUBWEAK UART3_IRQHandler
|
||||||
|
PUBWEAK I2S0_I2S1_QEI_IRQHandler
|
||||||
|
PUBWEAK CAN0_IRQHandler
|
||||||
|
PUBWEAK SPIFI_ADCHS_IRQHandler
|
||||||
|
PUBWEAK M0APP_IRQHandler
|
||||||
|
|
||||||
|
SECTION .text:CODE:REORDER(1)
|
||||||
|
NMI_Handler
|
||||||
|
B .
|
||||||
|
SVC_Handler
|
||||||
|
B .
|
||||||
|
DebugMon_Handler
|
||||||
|
B .
|
||||||
|
PendSV_Handler
|
||||||
|
B .
|
||||||
|
SysTick_Handler
|
||||||
|
B .
|
||||||
|
HardFault_Handler
|
||||||
|
B .
|
||||||
|
MemManage_Handler
|
||||||
|
B .
|
||||||
|
BusFault_Handler
|
||||||
|
B .
|
||||||
|
UsageFault_Handler
|
||||||
|
DAC_IRQHandler
|
||||||
|
M4_IRQHandler
|
||||||
|
DMA_IRQHandler
|
||||||
|
UnHandled_Vector
|
||||||
|
SGPIO_INPUT_IRQHandler
|
||||||
|
SGPIO_MATCH_IRQHandler
|
||||||
|
SGPIO_SHIFT_IRQHandler
|
||||||
|
SGPIO_POS_IRQHandler
|
||||||
|
USB0_IRQHandler
|
||||||
|
USB1_IRQHandler
|
||||||
|
SCT_IRQHandler
|
||||||
|
RIT_IRQHandler
|
||||||
|
GINT1_IRQHandler
|
||||||
|
TIMER1_IRQHandler
|
||||||
|
TIMER2_IRQHandler
|
||||||
|
GPIO5_IRQHandler
|
||||||
|
MCPWM_IRQHandler
|
||||||
|
ADC0_IRQHandler
|
||||||
|
I2C0_IRQHandler
|
||||||
|
I2C1_IRQHandler
|
||||||
|
SPI_IRQHandler
|
||||||
|
ADC1_IRQHandler
|
||||||
|
SSP0_SSP1_IRQHandler
|
||||||
|
EVRT_IRQHandler
|
||||||
|
UART0_IRQHandler
|
||||||
|
UART1_IRQHandler
|
||||||
|
UART2_CAN1_IRQHandler
|
||||||
|
UART3_IRQHandler
|
||||||
|
I2S0_I2S1_QEI_IRQHandler
|
||||||
|
CAN0_IRQHandler
|
||||||
|
SPIFI_ADCHS_IRQHandler
|
||||||
|
M0APP_IRQHandler
|
||||||
|
Default_IRQHandler
|
||||||
|
B .
|
||||||
|
|
||||||
|
/* CRP Section - not needed for flashless devices */
|
||||||
|
|
||||||
|
;;; SECTION .crp:CODE:ROOT(2)
|
||||||
|
;;; DATA
|
||||||
|
/* Code Read Protection
|
||||||
|
NO_ISP 0x4E697370 - Prevents sampling of pin PIO0_1 for entering ISP mode
|
||||||
|
CRP1 0x12345678 - Write to RAM command cannot access RAM below 0x10000300.
|
||||||
|
- Copy RAM to flash command can not write to Sector 0.
|
||||||
|
- Erase command can erase Sector 0 only when all sectors
|
||||||
|
are selected for erase.
|
||||||
|
- Compare command is disabled.
|
||||||
|
- Read Memory command is disabled.
|
||||||
|
CRP2 0x87654321 - Read Memory is disabled.
|
||||||
|
- Write to RAM is disabled.
|
||||||
|
- "Go" command is disabled.
|
||||||
|
- Copy RAM to flash is disabled.
|
||||||
|
- Compare is disabled.
|
||||||
|
CRP3 0x43218765 - Access to chip via the SWD pins is disabled. ISP entry
|
||||||
|
by pulling PIO0_1 LOW is disabled if a valid user code is
|
||||||
|
present in flash sector 0.
|
||||||
|
Caution: If CRP3 is selected, no future factory testing can be
|
||||||
|
performed on the device.
|
||||||
|
*/
|
||||||
|
;;; DCD 0xFFFFFFFF
|
||||||
|
;;;
|
||||||
|
|
||||||
|
END
|
|
@ -863,7 +863,6 @@ void SystemCoreClockUpdate (void) {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
extern uint32_t getPC (void);
|
|
||||||
|
|
||||||
/*----------------------------------------------------------------------------
|
/*----------------------------------------------------------------------------
|
||||||
Initialize the system
|
Initialize the system
|
||||||
|
@ -877,10 +876,7 @@ void SystemInit (void) {
|
||||||
|
|
||||||
/* Disable SysTick timer */
|
/* Disable SysTick timer */
|
||||||
SysTick->CTRL &= ~(SysTick_CTRL_TICKINT_Msk | SysTick_CTRL_ENABLE_Msk);
|
SysTick->CTRL &= ~(SysTick_CTRL_TICKINT_Msk | SysTick_CTRL_ENABLE_Msk);
|
||||||
#ifdef CORE_M4
|
|
||||||
/* Set vector table pointer */
|
|
||||||
SCB->VTOR = getPC() & 0xFFF00000;
|
|
||||||
#endif
|
|
||||||
/* Configure PLL0 and PLL1, connect CPU clock to selected clock source */
|
/* Configure PLL0 and PLL1, connect CPU clock to selected clock source */
|
||||||
SetClock();
|
SetClock();
|
||||||
|
|
||||||
|
|
|
@ -8,19 +8,19 @@ src = Split('''
|
||||||
NXP/LPC43xx/Source/Templates/system_LPC43xx.c
|
NXP/LPC43xx/Source/Templates/system_LPC43xx.c
|
||||||
''')
|
''')
|
||||||
CPPPATH = [cwd + '/NXP/LPC43xx/Include', cwd + '/../CMSIS/Include']
|
CPPPATH = [cwd + '/NXP/LPC43xx/Include', cwd + '/../CMSIS/Include']
|
||||||
CPPDEFINES = [rtconfig.USE_CORE + ' USE_SPIFI']
|
CPPDEFINES = [rtconfig.USE_CORE]
|
||||||
|
CPPDEFINES += ['USE_SPIFI']
|
||||||
# add for startup script
|
# add for startup script
|
||||||
if rtconfig.USE_CORE =='CORE_M4':
|
if rtconfig.USE_CORE =='CORE_M4':
|
||||||
if rtconfig.CROSS_TOOL == 'gcc':
|
if rtconfig.CROSS_TOOL == 'gcc':
|
||||||
src += ['NXP/LPC43xx/Source/Templates/GCC/cr_startup_lpc43xx.c']
|
src += ['NXP/LPC43xx/Source/Templates/GCC/startup_LPC43xx.s']
|
||||||
elif rtconfig.CROSS_TOOL == 'keil':
|
elif rtconfig.CROSS_TOOL == 'keil':
|
||||||
src += ['NXP/LPC43xx/Source/Templates/ARM/startup_LPC43xx.s']
|
src += ['NXP/LPC43xx/Source/Templates/ARM/startup_LPC43xx.s']
|
||||||
elif rtconfig.CROSS_TOOL == 'iar':
|
elif rtconfig.CROSS_TOOL == 'iar':
|
||||||
src += ['NXP/LPC43xx/Source/Templates/IAR/startup_LPC43xx.s']
|
src += ['NXP/LPC43xx/Source/Templates/IAR/startup_LPC43xx.s']
|
||||||
else:
|
else:
|
||||||
if rtconfig.CROSS_TOOL == 'gcc':
|
if rtconfig.CROSS_TOOL == 'gcc':
|
||||||
src += ['NXP/LPC43xx/Source/Templates/GCC/cr_startup_lpc43xx_m0sub.c']
|
src += ['NXP/LPC43xx/Source/Templates/GCC/startup_LPC43xx_M0.s']
|
||||||
elif rtconfig.CROSS_TOOL == 'keil':
|
elif rtconfig.CROSS_TOOL == 'keil':
|
||||||
src += ['NXP/LPC43xx/Source/Templates/ARM/startup_LPC43xx_M0.s']
|
src += ['NXP/LPC43xx/Source/Templates/ARM/startup_LPC43xx_M0.s']
|
||||||
elif rtconfig.CROSS_TOOL == 'iar':
|
elif rtconfig.CROSS_TOOL == 'iar':
|
||||||
|
|
|
@ -53,7 +53,7 @@ if PLATFORM == 'gcc':
|
||||||
DEVICE += ' -mfpu=fpv4-sp-d16 -mfloat-abi=softfp'
|
DEVICE += ' -mfpu=fpv4-sp-d16 -mfloat-abi=softfp'
|
||||||
CFLAGS = DEVICE
|
CFLAGS = DEVICE
|
||||||
AFLAGS = ' -c' + DEVICE + ' -x assembler-with-cpp -Wa,-mimplicit-it=thumb '
|
AFLAGS = ' -c' + DEVICE + ' -x assembler-with-cpp -Wa,-mimplicit-it=thumb '
|
||||||
LFLAGS = DEVICE + ' -Wl,--gc-sections,-Map=rtthread-lpc43xx.map,-cref,-u,Reset_Handler -T lpc43xx_spifi.ld'
|
LFLAGS = DEVICE + ' -Wl,--gc-sections,-Map=rtthread-lpc43xx.map,-cref,-u,Reset_Handler -T rtthread-lpc43xx_spifi.ld'
|
||||||
|
|
||||||
CPATH = ''
|
CPATH = ''
|
||||||
LPATH = ''
|
LPATH = ''
|
||||||
|
|
|
@ -0,0 +1,133 @@
|
||||||
|
/*
|
||||||
|
* linker script for LPC43xx SPIFI (4Mb NorFlash, 32kB SRAM ) with GNU ld
|
||||||
|
* yiyue.fang 2012-04-14
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Program Entry, set to mark it as "used" and avoid gc */
|
||||||
|
MEMORY
|
||||||
|
{
|
||||||
|
CODE (rx) : ORIGIN = 0x14000000, LENGTH = 0x00400000
|
||||||
|
DATA (rw) : ORIGIN = 0x10000000, LENGTH = 0x00008000
|
||||||
|
}
|
||||||
|
ENTRY(Reset_Handler)
|
||||||
|
_system_stack_size = 0x200;
|
||||||
|
|
||||||
|
SECTIONS
|
||||||
|
{
|
||||||
|
.text :
|
||||||
|
{
|
||||||
|
. = ALIGN(4);
|
||||||
|
KEEP(*(.interrupt_vector)) /* Startup code */
|
||||||
|
. = ALIGN(4);
|
||||||
|
*(.text) /* remaining code */
|
||||||
|
*(.text.*) /* remaining code */
|
||||||
|
*(.rodata) /* read-only data (constants) */
|
||||||
|
*(.rodata*)
|
||||||
|
*(.glue_7)
|
||||||
|
*(.glue_7t)
|
||||||
|
*(.gnu.linkonce.t*)
|
||||||
|
|
||||||
|
/* section information for finsh shell */
|
||||||
|
. = ALIGN(4);
|
||||||
|
__fsymtab_start = .;
|
||||||
|
KEEP(*(FSymTab))
|
||||||
|
__fsymtab_end = .;
|
||||||
|
. = ALIGN(4);
|
||||||
|
__vsymtab_start = .;
|
||||||
|
KEEP(*(VSymTab))
|
||||||
|
__vsymtab_end = .;
|
||||||
|
. = ALIGN(4);
|
||||||
|
|
||||||
|
. = ALIGN(4);
|
||||||
|
_etext = .;
|
||||||
|
} > CODE = 0
|
||||||
|
|
||||||
|
/* .ARM.exidx is sorted, so has to go in its own output section. */
|
||||||
|
__exidx_start = .;
|
||||||
|
.ARM.exidx :
|
||||||
|
{
|
||||||
|
*(.ARM.exidx* .gnu.linkonce.armexidx.*)
|
||||||
|
|
||||||
|
/* This is used by the startup in order to initialize the .data secion */
|
||||||
|
_sidata = .;
|
||||||
|
} > CODE
|
||||||
|
__exidx_end = .;
|
||||||
|
|
||||||
|
/* .data section which is used for initialized data */
|
||||||
|
|
||||||
|
.data : AT (_sidata)
|
||||||
|
{
|
||||||
|
. = ALIGN(4);
|
||||||
|
/* This is used by the startup in order to initialize the .data secion */
|
||||||
|
_sdata = . ;
|
||||||
|
|
||||||
|
*(.data)
|
||||||
|
*(.data.*)
|
||||||
|
*(.gnu.linkonce.d*)
|
||||||
|
|
||||||
|
. = ALIGN(4);
|
||||||
|
/* This is used by the startup in order to initialize the .data secion */
|
||||||
|
_edata = . ;
|
||||||
|
} >DATA
|
||||||
|
|
||||||
|
.stack :
|
||||||
|
{
|
||||||
|
. = . + _system_stack_size;
|
||||||
|
. = ALIGN(4);
|
||||||
|
_estack = .;
|
||||||
|
} >DATA
|
||||||
|
|
||||||
|
__bss_start = .;
|
||||||
|
.bss :
|
||||||
|
{
|
||||||
|
. = ALIGN(4);
|
||||||
|
/* This is used by the startup in order to initialize the .bss secion */
|
||||||
|
_sbss = .;
|
||||||
|
|
||||||
|
*(.bss)
|
||||||
|
*(.bss.*)
|
||||||
|
*(COMMON)
|
||||||
|
|
||||||
|
. = ALIGN(4);
|
||||||
|
/* This is used by the startup in order to initialize the .bss secion */
|
||||||
|
_ebss = . ;
|
||||||
|
*(.bss.init)
|
||||||
|
} > DATA
|
||||||
|
__bss_end = .;
|
||||||
|
|
||||||
|
_end = .;
|
||||||
|
|
||||||
|
/* Stabs debugging sections. */
|
||||||
|
.stab 0 : { *(.stab) }
|
||||||
|
.stabstr 0 : { *(.stabstr) }
|
||||||
|
.stab.excl 0 : { *(.stab.excl) }
|
||||||
|
.stab.exclstr 0 : { *(.stab.exclstr) }
|
||||||
|
.stab.index 0 : { *(.stab.index) }
|
||||||
|
.stab.indexstr 0 : { *(.stab.indexstr) }
|
||||||
|
.comment 0 : { *(.comment) }
|
||||||
|
/* DWARF debug sections.
|
||||||
|
* Symbols in the DWARF debugging sections are relative to the beginning
|
||||||
|
* of the section so we begin them at 0. */
|
||||||
|
/* DWARF 1 */
|
||||||
|
.debug 0 : { *(.debug) }
|
||||||
|
.line 0 : { *(.line) }
|
||||||
|
/* GNU DWARF 1 extensions */
|
||||||
|
.debug_srcinfo 0 : { *(.debug_srcinfo) }
|
||||||
|
.debug_sfnames 0 : { *(.debug_sfnames) }
|
||||||
|
/* DWARF 1.1 and DWARF 2 */
|
||||||
|
.debug_aranges 0 : { *(.debug_aranges) }
|
||||||
|
.debug_pubnames 0 : { *(.debug_pubnames) }
|
||||||
|
/* DWARF 2 */
|
||||||
|
.debug_info 0 : { *(.debug_info .gnu.linkonce.wi.*) }
|
||||||
|
.debug_abbrev 0 : { *(.debug_abbrev) }
|
||||||
|
.debug_line 0 : { *(.debug_line) }
|
||||||
|
.debug_frame 0 : { *(.debug_frame) }
|
||||||
|
.debug_str 0 : { *(.debug_str) }
|
||||||
|
.debug_loc 0 : { *(.debug_loc) }
|
||||||
|
.debug_macinfo 0 : { *(.debug_macinfo) }
|
||||||
|
/* SGI/MIPS DWARF 2 extensions */
|
||||||
|
.debug_weaknames 0 : { *(.debug_weaknames) }
|
||||||
|
.debug_funcnames 0 : { *(.debug_funcnames) }
|
||||||
|
.debug_typenames 0 : { *(.debug_typenames) }
|
||||||
|
.debug_varnames 0 : { *(.debug_varnames) }
|
||||||
|
}
|
|
@ -0,0 +1,15 @@
|
||||||
|
; *************************************************************
|
||||||
|
; *** Scatter-Loading Description File generated by uVision ***
|
||||||
|
; *************************************************************
|
||||||
|
|
||||||
|
LR_ROM1 0x14000000 0x00400000 { ; load region size_region
|
||||||
|
ER_ROM1 0x14000000 0x00400000 { ; load address = execution address
|
||||||
|
*.o (RESET, +First)
|
||||||
|
*(InRoot$$Sections)
|
||||||
|
.ANY (+RO)
|
||||||
|
}
|
||||||
|
RW_IRAM1 0x10000000 0x00008000 { ; RW data
|
||||||
|
.ANY (+RW +ZI)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -53,7 +53,7 @@ if PLATFORM == 'gcc':
|
||||||
DEVICE += ' -mfpu=fpv4-sp-d16 -mfloat-abi=softfp'
|
DEVICE += ' -mfpu=fpv4-sp-d16 -mfloat-abi=softfp'
|
||||||
CFLAGS = DEVICE
|
CFLAGS = DEVICE
|
||||||
AFLAGS = ' -c' + DEVICE + ' -x assembler-with-cpp -Wa,-mimplicit-it=thumb '
|
AFLAGS = ' -c' + DEVICE + ' -x assembler-with-cpp -Wa,-mimplicit-it=thumb '
|
||||||
LFLAGS = DEVICE + ' -Wl,--gc-sections,-Map=rtthread-lpc43xx.map,-cref,-u,Reset_Handler -T lpc43xx_spifi.ld'
|
LFLAGS = DEVICE + ' -Wl,--gc-sections,-Map=rtthread-lpc43xx.map,-cref,-u,Reset_Handler -T rtthread-lpc43xx_spifi.ld'
|
||||||
|
|
||||||
CPATH = ''
|
CPATH = ''
|
||||||
LPATH = ''
|
LPATH = ''
|
||||||
|
@ -75,8 +75,8 @@ elif PLATFORM == 'armcc':
|
||||||
TARGET_EXT = 'axf'
|
TARGET_EXT = 'axf'
|
||||||
|
|
||||||
DEVICE = ' --device DARMSTM'
|
DEVICE = ' --device DARMSTM'
|
||||||
CFLAGS = DEVICE + ' --apcs=interwork'
|
CFLAGS = DEVICE + ' --apcs=interwork '
|
||||||
AFLAGS = DEVICE
|
AFLAGS = DEVICE
|
||||||
LFLAGS = DEVICE + ' --info sizes --info totals --info unused --info veneers --list rtthread-lpc43xx.map --scatter rtthread-lpc43xx_spifi.sct'
|
LFLAGS = DEVICE + ' --info sizes --info totals --info unused --info veneers --list rtthread-lpc43xx.map --scatter rtthread-lpc43xx_spifi.sct'
|
||||||
|
|
||||||
CFLAGS += ' -I' + EXEC_PATH + '/ARM/RV31/INC'
|
CFLAGS += ' -I' + EXEC_PATH + '/ARM/RV31/INC'
|
||||||
|
|
|
@ -0,0 +1,133 @@
|
||||||
|
/*
|
||||||
|
* linker script for LPC43xx SPIFI (4Mb NorFlash, 32kB SRAM ) with GNU ld
|
||||||
|
* yiyue.fang 2012-04-14
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Program Entry, set to mark it as "used" and avoid gc */
|
||||||
|
MEMORY
|
||||||
|
{
|
||||||
|
CODE (rx) : ORIGIN = 0x14000000, LENGTH = 0x00400000
|
||||||
|
DATA (rw) : ORIGIN = 0x10000000, LENGTH = 0x00008000
|
||||||
|
}
|
||||||
|
ENTRY(Reset_Handler)
|
||||||
|
_system_stack_size = 0x200;
|
||||||
|
|
||||||
|
SECTIONS
|
||||||
|
{
|
||||||
|
.text :
|
||||||
|
{
|
||||||
|
. = ALIGN(4);
|
||||||
|
KEEP(*(.interrupt_vector)) /* Startup code */
|
||||||
|
. = ALIGN(4);
|
||||||
|
*(.text) /* remaining code */
|
||||||
|
*(.text.*) /* remaining code */
|
||||||
|
*(.rodata) /* read-only data (constants) */
|
||||||
|
*(.rodata*)
|
||||||
|
*(.glue_7)
|
||||||
|
*(.glue_7t)
|
||||||
|
*(.gnu.linkonce.t*)
|
||||||
|
|
||||||
|
/* section information for finsh shell */
|
||||||
|
. = ALIGN(4);
|
||||||
|
__fsymtab_start = .;
|
||||||
|
KEEP(*(FSymTab))
|
||||||
|
__fsymtab_end = .;
|
||||||
|
. = ALIGN(4);
|
||||||
|
__vsymtab_start = .;
|
||||||
|
KEEP(*(VSymTab))
|
||||||
|
__vsymtab_end = .;
|
||||||
|
. = ALIGN(4);
|
||||||
|
|
||||||
|
. = ALIGN(4);
|
||||||
|
_etext = .;
|
||||||
|
} > CODE = 0
|
||||||
|
|
||||||
|
/* .ARM.exidx is sorted, so has to go in its own output section. */
|
||||||
|
__exidx_start = .;
|
||||||
|
.ARM.exidx :
|
||||||
|
{
|
||||||
|
*(.ARM.exidx* .gnu.linkonce.armexidx.*)
|
||||||
|
|
||||||
|
/* This is used by the startup in order to initialize the .data secion */
|
||||||
|
_sidata = .;
|
||||||
|
} > CODE
|
||||||
|
__exidx_end = .;
|
||||||
|
|
||||||
|
/* .data section which is used for initialized data */
|
||||||
|
|
||||||
|
.data : AT (_sidata)
|
||||||
|
{
|
||||||
|
. = ALIGN(4);
|
||||||
|
/* This is used by the startup in order to initialize the .data secion */
|
||||||
|
_sdata = . ;
|
||||||
|
|
||||||
|
*(.data)
|
||||||
|
*(.data.*)
|
||||||
|
*(.gnu.linkonce.d*)
|
||||||
|
|
||||||
|
. = ALIGN(4);
|
||||||
|
/* This is used by the startup in order to initialize the .data secion */
|
||||||
|
_edata = . ;
|
||||||
|
} >DATA
|
||||||
|
|
||||||
|
.stack :
|
||||||
|
{
|
||||||
|
. = . + _system_stack_size;
|
||||||
|
. = ALIGN(4);
|
||||||
|
_estack = .;
|
||||||
|
} >DATA
|
||||||
|
|
||||||
|
__bss_start = .;
|
||||||
|
.bss :
|
||||||
|
{
|
||||||
|
. = ALIGN(4);
|
||||||
|
/* This is used by the startup in order to initialize the .bss secion */
|
||||||
|
_sbss = .;
|
||||||
|
|
||||||
|
*(.bss)
|
||||||
|
*(.bss.*)
|
||||||
|
*(COMMON)
|
||||||
|
|
||||||
|
. = ALIGN(4);
|
||||||
|
/* This is used by the startup in order to initialize the .bss secion */
|
||||||
|
_ebss = . ;
|
||||||
|
*(.bss.init)
|
||||||
|
} > DATA
|
||||||
|
__bss_end = .;
|
||||||
|
|
||||||
|
_end = .;
|
||||||
|
|
||||||
|
/* Stabs debugging sections. */
|
||||||
|
.stab 0 : { *(.stab) }
|
||||||
|
.stabstr 0 : { *(.stabstr) }
|
||||||
|
.stab.excl 0 : { *(.stab.excl) }
|
||||||
|
.stab.exclstr 0 : { *(.stab.exclstr) }
|
||||||
|
.stab.index 0 : { *(.stab.index) }
|
||||||
|
.stab.indexstr 0 : { *(.stab.indexstr) }
|
||||||
|
.comment 0 : { *(.comment) }
|
||||||
|
/* DWARF debug sections.
|
||||||
|
* Symbols in the DWARF debugging sections are relative to the beginning
|
||||||
|
* of the section so we begin them at 0. */
|
||||||
|
/* DWARF 1 */
|
||||||
|
.debug 0 : { *(.debug) }
|
||||||
|
.line 0 : { *(.line) }
|
||||||
|
/* GNU DWARF 1 extensions */
|
||||||
|
.debug_srcinfo 0 : { *(.debug_srcinfo) }
|
||||||
|
.debug_sfnames 0 : { *(.debug_sfnames) }
|
||||||
|
/* DWARF 1.1 and DWARF 2 */
|
||||||
|
.debug_aranges 0 : { *(.debug_aranges) }
|
||||||
|
.debug_pubnames 0 : { *(.debug_pubnames) }
|
||||||
|
/* DWARF 2 */
|
||||||
|
.debug_info 0 : { *(.debug_info .gnu.linkonce.wi.*) }
|
||||||
|
.debug_abbrev 0 : { *(.debug_abbrev) }
|
||||||
|
.debug_line 0 : { *(.debug_line) }
|
||||||
|
.debug_frame 0 : { *(.debug_frame) }
|
||||||
|
.debug_str 0 : { *(.debug_str) }
|
||||||
|
.debug_loc 0 : { *(.debug_loc) }
|
||||||
|
.debug_macinfo 0 : { *(.debug_macinfo) }
|
||||||
|
/* SGI/MIPS DWARF 2 extensions */
|
||||||
|
.debug_weaknames 0 : { *(.debug_weaknames) }
|
||||||
|
.debug_funcnames 0 : { *(.debug_funcnames) }
|
||||||
|
.debug_typenames 0 : { *(.debug_typenames) }
|
||||||
|
.debug_varnames 0 : { *(.debug_varnames) }
|
||||||
|
}
|
|
@ -0,0 +1,15 @@
|
||||||
|
; *************************************************************
|
||||||
|
; *** Scatter-Loading Description File generated by uVision ***
|
||||||
|
; *************************************************************
|
||||||
|
|
||||||
|
LR_ROM1 0x14000000 0x00400000 { ; load region size_region
|
||||||
|
ER_ROM1 0x14000000 0x00400000 { ; load address = execution address
|
||||||
|
*.o (RESET, +First)
|
||||||
|
*(InRoot$$Sections)
|
||||||
|
.ANY (+RO)
|
||||||
|
}
|
||||||
|
RW_IRAM1 0x10000000 0x00008000 { ; RW data
|
||||||
|
.ANY (+RW +ZI)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue