mirror of https://github.com/ARMmbed/mbed-os.git
parent
15386a368c
commit
b066ebff90
|
@ -0,0 +1,199 @@
|
||||||
|
/*Based on following file
|
||||||
|
* (c) Code Red Technologies Ltd, 2008-13
|
||||||
|
* (c) NXP Semiconductors 2013-2015
|
||||||
|
* Generated linker script file for LPC824
|
||||||
|
* Created from generic_c.ld (LPCXpresso v7.4 (0 [Build 229] [2014-09-16] ))
|
||||||
|
* By LPCXpresso v7.4.0 [Build 229] [2014-09-16] on Fri Jan 02 03:36:48 JST 2015
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Linker script to configure memory regions. */
|
||||||
|
MEMORY
|
||||||
|
{
|
||||||
|
/* Define each memory region */
|
||||||
|
MFlash32 (rx) : ORIGIN = 0x0, LENGTH = 0x8000 /* 32K bytes */
|
||||||
|
RamLoc8 (rwx) : ORIGIN = 0x10000000+0xC0, LENGTH = 0x2000-0xC0 /* 8K bytes */
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Define a symbol for the top of each memory region */
|
||||||
|
__top_MFlash32 = 0x0 + 0x8000;
|
||||||
|
__top_RamLoc8 = 0x10000000 + 0x2000;
|
||||||
|
|
||||||
|
GROUP(libgcc.a libc.a libstdc++.a libm.a libcr_newlib_nohost.a crti.o crtn.o crtbegin.o crtend.o)
|
||||||
|
/*GROUP(libcr_nohost.a libcr_c.a libcr_eabihelpers.a libm.a)*/
|
||||||
|
/* Linker script to place sections and symbol values. Should be used together
|
||||||
|
* with other linker script that defines memory regions FLASH and RAM.
|
||||||
|
* It references following symbols, which must be defined in code:
|
||||||
|
* Reset_Handler : Entry of reset handler
|
||||||
|
*
|
||||||
|
* It defines following symbols, which code can use without definition:
|
||||||
|
* __exidx_start
|
||||||
|
* __exidx_end
|
||||||
|
* __etext
|
||||||
|
* __data_start__
|
||||||
|
* __preinit_array_start
|
||||||
|
* __preinit_array_end
|
||||||
|
* __init_array_start
|
||||||
|
* __init_array_end
|
||||||
|
* __fini_array_start
|
||||||
|
* __fini_array_end
|
||||||
|
* __data_end__
|
||||||
|
* __bss_start__
|
||||||
|
* __bss_end__
|
||||||
|
* __end__
|
||||||
|
* end
|
||||||
|
* __HeapLimit
|
||||||
|
* __StackLimit
|
||||||
|
* __StackTop
|
||||||
|
* __stack
|
||||||
|
*/
|
||||||
|
ENTRY(ResetISR)
|
||||||
|
|
||||||
|
SECTIONS
|
||||||
|
{
|
||||||
|
|
||||||
|
/* MAIN TEXT SECTION */
|
||||||
|
.text : ALIGN(4)
|
||||||
|
{
|
||||||
|
FILL(0xff)
|
||||||
|
__vectors_start__ = ABSOLUTE(.) ;
|
||||||
|
KEEP(*(.isr_vector))
|
||||||
|
|
||||||
|
/* Global Section Table */
|
||||||
|
. = ALIGN(4) ;
|
||||||
|
__section_table_start = .;
|
||||||
|
__data_section_table = .;
|
||||||
|
LONG(LOADADDR(.data));
|
||||||
|
LONG( ADDR(.data));
|
||||||
|
LONG( SIZEOF(.data));
|
||||||
|
__data_section_table_end = .;
|
||||||
|
__bss_section_table = .;
|
||||||
|
LONG( ADDR(.bss));
|
||||||
|
LONG( SIZEOF(.bss));
|
||||||
|
__bss_section_table_end = .;
|
||||||
|
__section_table_end = . ;
|
||||||
|
/* End of Global Section Table */
|
||||||
|
|
||||||
|
|
||||||
|
*(.after_vectors*)
|
||||||
|
} >MFlash32
|
||||||
|
|
||||||
|
.text : ALIGN(4)
|
||||||
|
{
|
||||||
|
*(.text*)
|
||||||
|
*(.rodata .rodata.* .constdata .constdata.*)
|
||||||
|
. = ALIGN(4);
|
||||||
|
|
||||||
|
|
||||||
|
/* C++ constructors etc */
|
||||||
|
. = ALIGN(4);
|
||||||
|
KEEP(*(.init))
|
||||||
|
|
||||||
|
. = ALIGN(4);
|
||||||
|
__preinit_array_start = .;
|
||||||
|
KEEP (*(.preinit_array))
|
||||||
|
__preinit_array_end = .;
|
||||||
|
|
||||||
|
. = ALIGN(4);
|
||||||
|
__init_array_start = .;
|
||||||
|
KEEP (*(SORT(.init_array.*)))
|
||||||
|
KEEP (*(.init_array))
|
||||||
|
__init_array_end = .;
|
||||||
|
|
||||||
|
KEEP(*(.fini));
|
||||||
|
|
||||||
|
/* .ctors */
|
||||||
|
*crtbegin.o(.ctors)
|
||||||
|
*crtbegin?.o(.ctors)
|
||||||
|
*(EXCLUDE_FILE(*crtend?.o *crtend.o) .ctors)
|
||||||
|
*(SORT(.ctors.*))
|
||||||
|
*(.ctors)
|
||||||
|
|
||||||
|
/* .dtors */
|
||||||
|
*crtbegin.o(.dtors)
|
||||||
|
*crtbegin?.o(.dtors)
|
||||||
|
*(EXCLUDE_FILE(*crtend?.o *crtend.o) .dtors)
|
||||||
|
*(SORT(.dtors.*))
|
||||||
|
*(.dtors)
|
||||||
|
|
||||||
|
*(.rodata*)
|
||||||
|
|
||||||
|
KEEP(*(.eh_frame*))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
} > MFlash32
|
||||||
|
|
||||||
|
/*
|
||||||
|
* for exception handling/unwind - some Newlib functions (in common
|
||||||
|
* with C++ and STDC++) use this.
|
||||||
|
*/
|
||||||
|
.ARM.extab : ALIGN(4)
|
||||||
|
{
|
||||||
|
*(.ARM.extab* .gnu.linkonce.armextab.*)
|
||||||
|
} > MFlash32
|
||||||
|
__exidx_start = .;
|
||||||
|
|
||||||
|
.ARM.exidx : ALIGN(4)
|
||||||
|
{
|
||||||
|
*(.ARM.exidx* .gnu.linkonce.armexidx.*)
|
||||||
|
} > MFlash32
|
||||||
|
__exidx_end = .;
|
||||||
|
|
||||||
|
_etext = .;
|
||||||
|
|
||||||
|
|
||||||
|
/* MAIN DATA SECTION */
|
||||||
|
|
||||||
|
/* Default MTB section */
|
||||||
|
.mtb_buffer_default (NOLOAD) :
|
||||||
|
{
|
||||||
|
KEEP(*(.mtb*))
|
||||||
|
} > RamLoc8
|
||||||
|
|
||||||
|
.uninit_RESERVED : ALIGN(4)
|
||||||
|
{
|
||||||
|
KEEP(*(.bss.$RESERVED*))
|
||||||
|
. = ALIGN(4) ;
|
||||||
|
_end_uninit_RESERVED = .;
|
||||||
|
} > RamLoc8
|
||||||
|
|
||||||
|
|
||||||
|
/* Main DATA section (RamLoc8) */
|
||||||
|
.data : ALIGN(4)
|
||||||
|
{
|
||||||
|
FILL(0xff)
|
||||||
|
_data = . ;
|
||||||
|
*(vtable)
|
||||||
|
*(.ramfunc*)
|
||||||
|
*(.data*)
|
||||||
|
. = ALIGN(4) ;
|
||||||
|
_edata = . ;
|
||||||
|
} > RamLoc8 AT>MFlash32
|
||||||
|
|
||||||
|
|
||||||
|
/* MAIN BSS SECTION */
|
||||||
|
.bss : ALIGN(4)
|
||||||
|
{
|
||||||
|
_bss = .;
|
||||||
|
*(.bss*)
|
||||||
|
*(COMMON)
|
||||||
|
. = ALIGN(4) ;
|
||||||
|
_ebss = .;
|
||||||
|
PROVIDE(end = .);
|
||||||
|
} > RamLoc8
|
||||||
|
|
||||||
|
|
||||||
|
/* DEFAULT NOINIT SECTION */
|
||||||
|
.noinit (NOLOAD): ALIGN(4)
|
||||||
|
{
|
||||||
|
_noinit = .;
|
||||||
|
*(.noinit*)
|
||||||
|
. = ALIGN(4) ;
|
||||||
|
_end_noinit = .;
|
||||||
|
} > RamLoc8
|
||||||
|
|
||||||
|
PROVIDE(_pvHeapStart = DEFINED(__user_heap_base) ? __user_heap_base : .);
|
||||||
|
PROVIDE(_vStackTop = DEFINED(__user_stack_top) ? __user_stack_top : __top_RamLoc8 - 0);
|
||||||
|
}
|
|
@ -0,0 +1,351 @@
|
||||||
|
//*****************************************************************************
|
||||||
|
// LPC82x Microcontroller Startup code for use with LPCXpresso IDE
|
||||||
|
//
|
||||||
|
// Version : 140901
|
||||||
|
//*****************************************************************************
|
||||||
|
//
|
||||||
|
// Copyright(C) NXP Semiconductors, 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
|
||||||
|
|
||||||
|
// Patch the AEABI integer divide functions to use MCU's romdivide library
|
||||||
|
#ifdef __USE_ROMDIVIDE
|
||||||
|
// Location in memory that holds the address of the ROM Driver table
|
||||||
|
#define PTR_ROM_DRIVER_TABLE ((unsigned int *)(0x1FFF1FF8))
|
||||||
|
// Variables to store addresses of idiv and udiv functions within MCU ROM
|
||||||
|
unsigned int *pDivRom_idiv;
|
||||||
|
unsigned int *pDivRom_uidiv;
|
||||||
|
#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 SVC_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 SPI0_IRQHandler(void) ALIAS(IntDefaultHandler);
|
||||||
|
void SPI1_IRQHandler(void) ALIAS(IntDefaultHandler);
|
||||||
|
void UART0_IRQHandler(void) ALIAS(IntDefaultHandler);
|
||||||
|
void UART1_IRQHandler(void) ALIAS(IntDefaultHandler);
|
||||||
|
void UART2_IRQHandler(void) ALIAS(IntDefaultHandler);
|
||||||
|
void I2C1_IRQHandler(void) ALIAS(IntDefaultHandler);
|
||||||
|
void I2C0_IRQHandler(void) ALIAS(IntDefaultHandler);
|
||||||
|
void SCT_IRQHandler(void) ALIAS(IntDefaultHandler);
|
||||||
|
void MRT_IRQHandler(void) ALIAS(IntDefaultHandler);
|
||||||
|
void CMP_IRQHandler(void) ALIAS(IntDefaultHandler);
|
||||||
|
void WDT_IRQHandler(void) ALIAS(IntDefaultHandler);
|
||||||
|
void BOD_IRQHandler(void) ALIAS(IntDefaultHandler);
|
||||||
|
void FLASH_IRQHandler(void) ALIAS(IntDefaultHandler);
|
||||||
|
void WKT_IRQHandler(void) ALIAS(IntDefaultHandler);
|
||||||
|
void ADC_SEQA_IRQHandler(void) ALIAS(IntDefaultHandler);
|
||||||
|
void ADC_SEQB_IRQHandler(void) ALIAS(IntDefaultHandler);
|
||||||
|
void ADC_THCMP_IRQHandler(void) ALIAS(IntDefaultHandler);
|
||||||
|
void ADC_OVR_IRQHandler(void) ALIAS(IntDefaultHandler);
|
||||||
|
void DMA_IRQHandler(void) ALIAS(IntDefaultHandler);
|
||||||
|
void I2C2_IRQHandler(void) ALIAS(IntDefaultHandler);
|
||||||
|
void I2C3_IRQHandler(void) ALIAS(IntDefaultHandler);
|
||||||
|
void PIN_INT0_IRQHandler(void) ALIAS(IntDefaultHandler);
|
||||||
|
void PIN_INT1_IRQHandler(void) ALIAS(IntDefaultHandler);
|
||||||
|
void PIN_INT2_IRQHandler(void) ALIAS(IntDefaultHandler);
|
||||||
|
void PIN_INT3_IRQHandler(void) ALIAS(IntDefaultHandler);
|
||||||
|
void PIN_INT4_IRQHandler(void) ALIAS(IntDefaultHandler);
|
||||||
|
void PIN_INT5_IRQHandler(void) ALIAS(IntDefaultHandler);
|
||||||
|
void PIN_INT6_IRQHandler(void) ALIAS(IntDefaultHandler);
|
||||||
|
void PIN_INT7_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);
|
||||||
|
#else
|
||||||
|
extern int main(void);
|
||||||
|
#endif
|
||||||
|
//*****************************************************************************
|
||||||
|
//
|
||||||
|
// 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 - CM0plus
|
||||||
|
&_vStackTop, // The initial stack pointer
|
||||||
|
ResetISR, // The reset handler
|
||||||
|
NMI_Handler, // The NMI handler
|
||||||
|
HardFault_Handler, // The hard fault handler
|
||||||
|
0, // Reserved
|
||||||
|
0, // Reserved
|
||||||
|
0, // Reserved
|
||||||
|
0, // Reserved
|
||||||
|
0, // Reserved
|
||||||
|
0, // Reserved
|
||||||
|
0, // Reserved
|
||||||
|
SVC_Handler, // SVCall handler
|
||||||
|
0, // Reserved
|
||||||
|
0, // Reserved
|
||||||
|
PendSV_Handler, // The PendSV handler
|
||||||
|
SysTick_Handler, // The SysTick handler
|
||||||
|
|
||||||
|
// Chip Level - LPC82x
|
||||||
|
SPI0_IRQHandler, // SPI0 controller
|
||||||
|
SPI1_IRQHandler, // SPI1 controller
|
||||||
|
0, // Reserved
|
||||||
|
UART0_IRQHandler, // UART0
|
||||||
|
UART1_IRQHandler, // UART1
|
||||||
|
UART2_IRQHandler, // UART2
|
||||||
|
0, // Reserved
|
||||||
|
I2C1_IRQHandler, // I2C1 controller
|
||||||
|
I2C0_IRQHandler, // I2C0 controller
|
||||||
|
SCT_IRQHandler, // Smart Counter Timer
|
||||||
|
MRT_IRQHandler, // Multi-Rate Timer
|
||||||
|
CMP_IRQHandler, // Comparator
|
||||||
|
WDT_IRQHandler, // Watchdog
|
||||||
|
BOD_IRQHandler, // Brown Out Detect
|
||||||
|
FLASH_IRQHandler, // Flash Interrupt
|
||||||
|
WKT_IRQHandler, // Wakeup timer
|
||||||
|
ADC_SEQA_IRQHandler, // ADC sequence A completion
|
||||||
|
ADC_SEQB_IRQHandler, // ADC sequence B completion
|
||||||
|
ADC_THCMP_IRQHandler, // ADC threshold compare
|
||||||
|
ADC_OVR_IRQHandler, // ADC overrun
|
||||||
|
DMA_IRQHandler, // DMA
|
||||||
|
I2C2_IRQHandler, // I2C2 controller
|
||||||
|
I2C3_IRQHandler, // I2C3 controller
|
||||||
|
0, // Reserved
|
||||||
|
PIN_INT0_IRQHandler, // PIO INT0
|
||||||
|
PIN_INT1_IRQHandler, // PIO INT1
|
||||||
|
PIN_INT2_IRQHandler, // PIO INT2
|
||||||
|
PIN_INT3_IRQHandler, // PIO INT3
|
||||||
|
PIN_INT4_IRQHandler, // PIO INT4
|
||||||
|
PIN_INT5_IRQHandler, // PIO INT5
|
||||||
|
PIN_INT6_IRQHandler, // PIO INT6
|
||||||
|
PIN_INT7_IRQHandler, // PIO INT7
|
||||||
|
}; /* End of g_pfnVectors */
|
||||||
|
|
||||||
|
//*****************************************************************************
|
||||||
|
// 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.
|
||||||
|
//*****************************************************************************
|
||||||
|
__attribute__ ((section(".after_vectors")))
|
||||||
|
void
|
||||||
|
ResetISR(void) {
|
||||||
|
|
||||||
|
//
|
||||||
|
// 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);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Patch the AEABI integer divide functions to use MCU's romdivide library
|
||||||
|
#ifdef __USE_ROMDIVIDE
|
||||||
|
// Get address of Integer division routines function table in ROM
|
||||||
|
unsigned int *div_ptr = (unsigned int *)((unsigned int *)*(PTR_ROM_DRIVER_TABLE))[4];
|
||||||
|
// Get addresses of integer divide routines in ROM
|
||||||
|
// These address are then used by the code in aeabi_romdiv_patch.s
|
||||||
|
pDivRom_idiv = (unsigned int *)div_ptr[0];
|
||||||
|
pDivRom_uidiv = (unsigned int *)div_ptr[1];
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined (__USE_CMSIS) || defined (__USE_LPCOPEN)
|
||||||
|
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 SVC_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) {}
|
||||||
|
}
|
||||||
|
|
|
@ -184,7 +184,7 @@ int spi_master_write(spi_t *obj, int value)
|
||||||
return spi_read(obj);
|
return spi_read(obj);
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline int spi_busy(spi_t *obj)
|
int spi_busy(spi_t *obj)
|
||||||
{
|
{
|
||||||
// checking RXOV(Receiver Overrun interrupt flag)
|
// checking RXOV(Receiver Overrun interrupt flag)
|
||||||
return obj->spi->STAT & (1 << 2);
|
return obj->spi->STAT & (1 << 2);
|
||||||
|
|
|
@ -34,6 +34,7 @@ class CodeRed(Exporter):
|
||||||
'LPC1549',
|
'LPC1549',
|
||||||
'LPC11U68',
|
'LPC11U68',
|
||||||
'LPCCAPPUCCINO',
|
'LPCCAPPUCCINO',
|
||||||
|
'LPC824',
|
||||||
]
|
]
|
||||||
|
|
||||||
def generate(self):
|
def generate(self):
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,83 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<projectDescription>
|
||||||
|
<name>{{name}}</name>
|
||||||
|
<comment>This file was automagically generated by mbed.org. For more information, see http://mbed.org/handbook/Exporting-To-Code-Red</comment>
|
||||||
|
<projects>
|
||||||
|
</projects>
|
||||||
|
<buildSpec>
|
||||||
|
<buildCommand>
|
||||||
|
<name>org.eclipse.cdt.managedbuilder.core.genmakebuilder</name>
|
||||||
|
<triggers>clean,full,incremental,</triggers>
|
||||||
|
<arguments>
|
||||||
|
<dictionary>
|
||||||
|
<key>?name?</key>
|
||||||
|
<value></value>
|
||||||
|
</dictionary>
|
||||||
|
<dictionary>
|
||||||
|
<key>org.eclipse.cdt.make.core.append_environment</key>
|
||||||
|
<value>true</value>
|
||||||
|
</dictionary>
|
||||||
|
<dictionary>
|
||||||
|
<key>org.eclipse.cdt.make.core.autoBuildTarget</key>
|
||||||
|
<value>all</value>
|
||||||
|
</dictionary>
|
||||||
|
<dictionary>
|
||||||
|
<key>org.eclipse.cdt.make.core.buildArguments</key>
|
||||||
|
<value></value>
|
||||||
|
</dictionary>
|
||||||
|
<dictionary>
|
||||||
|
<key>org.eclipse.cdt.make.core.buildCommand</key>
|
||||||
|
<value>make</value>
|
||||||
|
</dictionary>
|
||||||
|
<dictionary>
|
||||||
|
<key>org.eclipse.cdt.make.core.buildLocation</key>
|
||||||
|
<value>${workspace_loc:/{{name}}/Debug}</value>
|
||||||
|
</dictionary>
|
||||||
|
<dictionary>
|
||||||
|
<key>org.eclipse.cdt.make.core.cleanBuildTarget</key>
|
||||||
|
<value>clean</value>
|
||||||
|
</dictionary>
|
||||||
|
<dictionary>
|
||||||
|
<key>org.eclipse.cdt.make.core.contents</key>
|
||||||
|
<value>org.eclipse.cdt.make.core.activeConfigSettings</value>
|
||||||
|
</dictionary>
|
||||||
|
<dictionary>
|
||||||
|
<key>org.eclipse.cdt.make.core.enableAutoBuild</key>
|
||||||
|
<value>false</value>
|
||||||
|
</dictionary>
|
||||||
|
<dictionary>
|
||||||
|
<key>org.eclipse.cdt.make.core.enableCleanBuild</key>
|
||||||
|
<value>true</value>
|
||||||
|
</dictionary>
|
||||||
|
<dictionary>
|
||||||
|
<key>org.eclipse.cdt.make.core.enableFullBuild</key>
|
||||||
|
<value>true</value>
|
||||||
|
</dictionary>
|
||||||
|
<dictionary>
|
||||||
|
<key>org.eclipse.cdt.make.core.fullBuildTarget</key>
|
||||||
|
<value>all</value>
|
||||||
|
</dictionary>
|
||||||
|
<dictionary>
|
||||||
|
<key>org.eclipse.cdt.make.core.stopOnError</key>
|
||||||
|
<value>true</value>
|
||||||
|
</dictionary>
|
||||||
|
<dictionary>
|
||||||
|
<key>org.eclipse.cdt.make.core.useDefaultBuildCmd</key>
|
||||||
|
<value>true</value>
|
||||||
|
</dictionary>
|
||||||
|
</arguments>
|
||||||
|
</buildCommand>
|
||||||
|
<buildCommand>
|
||||||
|
<name>org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder</name>
|
||||||
|
<triggers>full,incremental,</triggers>
|
||||||
|
<arguments>
|
||||||
|
</arguments>
|
||||||
|
</buildCommand>
|
||||||
|
</buildSpec>
|
||||||
|
<natures>
|
||||||
|
<nature>org.eclipse.cdt.core.cnature</nature>
|
||||||
|
<nature>org.eclipse.cdt.core.ccnature</nature>
|
||||||
|
<nature>org.eclipse.cdt.managedbuilder.core.managedBuildNature</nature>
|
||||||
|
<nature>org.eclipse.cdt.managedbuilder.core.ScannerConfigNature</nature>
|
||||||
|
</natures>
|
||||||
|
</projectDescription>
|
|
@ -250,7 +250,7 @@ class LPC824(LPCTarget):
|
||||||
LPCTarget.__init__(self)
|
LPCTarget.__init__(self)
|
||||||
self.core = "Cortex-M0+"
|
self.core = "Cortex-M0+"
|
||||||
self.extra_labels = ['NXP', 'LPC82X']
|
self.extra_labels = ['NXP', 'LPC82X']
|
||||||
self.supported_toolchains = ["uARM", "GCC_ARM"]
|
self.supported_toolchains = ["uARM", "GCC_ARM","GCC_CR"]
|
||||||
self.default_toolchain = "uARM"
|
self.default_toolchain = "uARM"
|
||||||
self.supported_form_factors = ["ARDUINO"]
|
self.supported_form_factors = ["ARDUINO"]
|
||||||
self.is_disk_virtual = True
|
self.is_disk_virtual = True
|
||||||
|
|
Loading…
Reference in New Issue