mirror of https://github.com/ARMmbed/mbed-os.git
LPC2368 [GCC_ARM, GCC_CR]:
1. Added: GCC_CR toolchain ID for LPC2368. (targets.py) 2. Modified: Startup codes for GCC_ARM and GCC_CR toolchain. 3. Verified: "ticker" and "basic" test program works well, so far.pull/50/head
parent
e23be8a1b3
commit
7bcdf0b980
|
|
@ -48,7 +48,7 @@ SECTIONS
|
|||
.text : {
|
||||
__privileged_code_start__ = . ;
|
||||
KEEP( *( .vectors ) )
|
||||
*( .privileged_code )
|
||||
KEEP( *( .privileged_code ) )
|
||||
|
||||
__privileged_code_end__ = .;
|
||||
|
||||
|
|
@ -142,6 +142,7 @@ SECTIONS
|
|||
/* Heap starts here and grows up in memory */
|
||||
. = ALIGN( 8 ) ;
|
||||
__heap_start__ = . ;
|
||||
end = . ;
|
||||
|
||||
.stab 0 (NOLOAD) : { *(.stab) }
|
||||
.stabstr 0 (NOLOAD) : { *(.stabstr) }
|
||||
|
|
|
|||
|
|
@ -1,180 +1,149 @@
|
|||
# 1 "vector_functions.s"
|
||||
# 1 "<built-in>"
|
||||
# 1 "<command line>"
|
||||
# 1 "vector_functions.s"
|
||||
;
|
||||
;
|
||||
;
|
||||
/* .include "vector_defns.h" */
|
||||
|
||||
# 1 "vector_defns.h" 1
|
||||
# 6 "vector_functions.s" 2
|
||||
|
||||
|
||||
.section .plivileged_code, "ax"
|
||||
.arm
|
||||
|
||||
|
||||
.weak __mbed_fiq
|
||||
.weak __mbed_undef
|
||||
.weak __mbed_prefetch_abort
|
||||
.weak __mbed_data_abort
|
||||
.weak __mbed_irq
|
||||
.weak __mbed_swi
|
||||
.weak __mbed_dcc_irq
|
||||
.weak __mbed_reset
|
||||
.global __mbed_init_realmonitor
|
||||
/* .global __mbed_init */
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
.section VECFUNCS, "ax"
|
||||
.arm
|
||||
|
||||
|
||||
.weak __mbed_fiq
|
||||
.weak __mbed_undef
|
||||
.weak __mbed_prefetch_abort
|
||||
.weak __mbed_data_abort
|
||||
.weak __mbed_irq
|
||||
.weak __mbed_swi
|
||||
.weak __mbed_dcc_irq
|
||||
.weak __mbed_reset
|
||||
.global __mbed_init_realmonitor
|
||||
.global __mbed_init
|
||||
|
||||
;
|
||||
;
|
||||
__mbed_fiq:
|
||||
B __mbed_fiq
|
||||
|
||||
;
|
||||
;
|
||||
__mbed_undef:
|
||||
LDR PC, =0x7fffffa0
|
||||
|
||||
;
|
||||
;
|
||||
__mbed_prefetch_abort:
|
||||
LDR PC, =0x7fffffb0
|
||||
|
||||
;
|
||||
;
|
||||
__mbed_data_abort:
|
||||
LDR PC, =0x7fffffc0
|
||||
|
||||
;
|
||||
;
|
||||
;
|
||||
;
|
||||
;
|
||||
;
|
||||
;
|
||||
;
|
||||
;
|
||||
__mbed_irq:
|
||||
;
|
||||
MSR CPSR_c, #0x1F|0x80|0x40
|
||||
|
||||
;
|
||||
|
||||
STMDB sp!, {r0-r3,r12,lr}
|
||||
|
||||
;
|
||||
|
||||
MOV r0, #0xFFFFFF00
|
||||
LDR r0, [r0]
|
||||
|
||||
;
|
||||
|
||||
MOV lr, pc
|
||||
BX r0
|
||||
|
||||
;
|
||||
|
||||
MOV r0, #0xFFFFFF00
|
||||
STR r0, [r0] ;
|
||||
|
||||
;
|
||||
STR r0, [r0]
|
||||
|
||||
LDMFD sp!,{r0-r3,r12,lr}
|
||||
|
||||
;
|
||||
|
||||
MSR CPSR_c, #0x12|0x80|0x40
|
||||
|
||||
;
|
||||
|
||||
SUBS pc, lr, #4
|
||||
|
||||
;
|
||||
;
|
||||
;
|
||||
;
|
||||
__mbed_swi:
|
||||
;
|
||||
;
|
||||
STMFD sp!, {a4, r4, ip, lr}
|
||||
|
||||
;
|
||||
|
||||
LDR r4, =0x40000040
|
||||
|
||||
;
|
||||
;
|
||||
|
||||
LDR a4, =0x00940000
|
||||
LDR PC, =0x7ffff820
|
||||
|
||||
;
|
||||
;
|
||||
;
|
||||
;
|
||||
__mbed_dcc_irq:
|
||||
|
||||
;
|
||||
|
||||
;
|
||||
LDMFD sp!,{r0-r3,r12,lr}
|
||||
|
||||
;
|
||||
|
||||
MSR CPSR_c, #0x12|0x80|0x40
|
||||
|
||||
;
|
||||
|
||||
;
|
||||
SUB lr, lr, #4 ;
|
||||
STMFD sp!, {ip,lr} ;
|
||||
|
||||
;
|
||||
|
||||
SUB lr, lr, #4
|
||||
STMFD sp!, {ip,lr}
|
||||
|
||||
LDR LR, =0xfffff000
|
||||
STR LR, [LR, #0xf00]
|
||||
|
||||
;
|
||||
;
|
||||
;
|
||||
;
|
||||
|
||||
LDR PC, =0x7fffffe0
|
||||
/*
|
||||
__mbed_reset is called after reset
|
||||
we setup the stacks and realmonitor, then call Reset_Handler like on M3
|
||||
*/
|
||||
|
||||
.section .text, "ax"
|
||||
.arm
|
||||
.global Reset_handler
|
||||
Reset_Handler:
|
||||
.extern __libc_init_array
|
||||
.extern SystemInit
|
||||
.extern __wrap_main
|
||||
LDR R0, =SystemInit
|
||||
MOV LR, PC
|
||||
BX R0
|
||||
|
||||
LDR R0, =__libc_init_array
|
||||
MOV LR, PC
|
||||
BX R0
|
||||
|
||||
LDR R0, =__wrap_main
|
||||
BX R0
|
||||
|
||||
;
|
||||
;
|
||||
__mbed_reset:
|
||||
|
||||
;
|
||||
|
||||
LDR R0, =(0x40000000 + 0x8000)
|
||||
|
||||
;
|
||||
LDR R0, =( __SRAM_segment_end__ )
|
||||
|
||||
MSR CPSR_c, #0x1B|0x80|0x40
|
||||
MOV SP, R0
|
||||
SUB R0, R0, #0x00000040
|
||||
|
||||
;
|
||||
|
||||
MSR CPSR_c, #0x17|0x80|0x40
|
||||
MOV SP, R0
|
||||
SUB R0, R0, #0x00000040
|
||||
|
||||
;
|
||||
|
||||
MSR CPSR_c, #0x11|0x80|0x40
|
||||
MOV SP, R0
|
||||
SUB R0, R0, #0x00000000
|
||||
|
||||
;
|
||||
|
||||
MSR CPSR_c, #0x12|0x80|0x40
|
||||
MOV SP, R0
|
||||
SUB R0, R0, #0x00000040
|
||||
|
||||
;
|
||||
|
||||
MSR CPSR_c, #0x13|0x80|0x40
|
||||
MOV SP, R0
|
||||
SUB R0, R0, #0x00000040
|
||||
|
||||
;
|
||||
|
||||
MSR CPSR_c, #0x10
|
||||
MOV SP, R0
|
||||
|
||||
/* Relocate .data section (Copy from ROM to RAM) */
|
||||
LDR R1, =__text_end__ /* _etext */
|
||||
LDR R2, =__data_start__ /* _data */
|
||||
LDR R3, =__data_end__ /* _edata */
|
||||
CMP R2, R3
|
||||
BEQ DataIsEmpty
|
||||
LoopRel: CMP R2, R3
|
||||
LDRLO R0, [R1], #4
|
||||
STRLO R0, [R2], #4
|
||||
BLO LoopRel
|
||||
DataIsEmpty:
|
||||
|
||||
;
|
||||
/* 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
|
||||
STRLO R0, [R1], #4
|
||||
BLO LoopZI
|
||||
BSSIsEmpty:
|
||||
|
||||
|
||||
/* Init realmonitor */
|
||||
LDR R0, =__mbed_init_realmonitor
|
||||
MOV LR, PC
|
||||
BX R0
|
||||
|
||||
;
|
||||
LDR R0, =__mbed_init
|
||||
|
||||
/* Go to Reset_Handler */
|
||||
LDR R0, =Reset_Handler
|
||||
BX R0
|
||||
|
|
|
|||
|
|
@ -18,7 +18,7 @@
|
|||
|
||||
|
||||
|
||||
.section VECTOR_TABLE, "ax"
|
||||
.section .vectors, "ax"
|
||||
.arm
|
||||
|
||||
|
||||
|
|
@ -34,7 +34,7 @@
|
|||
;
|
||||
|
||||
|
||||
__main:
|
||||
_start:
|
||||
LDR PC, =__mbed_reset
|
||||
LDR PC, =__mbed_undef
|
||||
LDR PC, =__mbed_swi
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@ OUTPUT_FORMAT("elf32-littlearm", "elf32-bigarm", "elf32-littlearm")
|
|||
OUTPUT_ARCH(arm)
|
||||
ENTRY(vectors)
|
||||
|
||||
GROUP(-lsupc++ -lm -lc -lgcc)
|
||||
GROUP( libgcc.a libc.a libm.a libcr_newlib_nohost.a crti.o crtn.o crtbegin.o crtend.o )
|
||||
|
||||
/* Memory Definitions: */
|
||||
MEMORY
|
||||
|
|
@ -50,7 +50,7 @@ SECTIONS
|
|||
.text : {
|
||||
__privileged_code_start__ = . ;
|
||||
KEEP( *( .vectors ) )
|
||||
*( .privileged_code )
|
||||
KEEP( *( .privileged_code ) )
|
||||
|
||||
__privileged_code_end__ = .;
|
||||
|
||||
|
|
@ -144,6 +144,8 @@ SECTIONS
|
|||
/* Heap starts here and grows up in memory */
|
||||
. = ALIGN( 8 ) ;
|
||||
__heap_start__ = . ;
|
||||
_pvHeapStart = . ;
|
||||
end = . ;
|
||||
|
||||
.stab 0 (NOLOAD) : { *(.stab) }
|
||||
.stabstr 0 (NOLOAD) : { *(.stabstr) }
|
||||
|
|
|
|||
|
|
@ -1,180 +1,149 @@
|
|||
# 1 "vector_functions.s"
|
||||
# 1 "<built-in>"
|
||||
# 1 "<command line>"
|
||||
# 1 "vector_functions.s"
|
||||
;
|
||||
;
|
||||
;
|
||||
/* .include "vector_defns.h" */
|
||||
|
||||
# 1 "vector_defns.h" 1
|
||||
# 6 "vector_functions.s" 2
|
||||
|
||||
|
||||
.section .plivileged_code, "ax"
|
||||
.arm
|
||||
|
||||
|
||||
.weak __mbed_fiq
|
||||
.weak __mbed_undef
|
||||
.weak __mbed_prefetch_abort
|
||||
.weak __mbed_data_abort
|
||||
.weak __mbed_irq
|
||||
.weak __mbed_swi
|
||||
.weak __mbed_dcc_irq
|
||||
.weak __mbed_reset
|
||||
.global __mbed_init_realmonitor
|
||||
/* .global __mbed_init */
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
.section VECFUNCS, "ax"
|
||||
.arm
|
||||
|
||||
|
||||
.weak __mbed_fiq
|
||||
.weak __mbed_undef
|
||||
.weak __mbed_prefetch_abort
|
||||
.weak __mbed_data_abort
|
||||
.weak __mbed_irq
|
||||
.weak __mbed_swi
|
||||
.weak __mbed_dcc_irq
|
||||
.weak __mbed_reset
|
||||
.global __mbed_init_realmonitor
|
||||
.global __mbed_init
|
||||
|
||||
;
|
||||
;
|
||||
__mbed_fiq:
|
||||
B __mbed_fiq
|
||||
|
||||
;
|
||||
;
|
||||
__mbed_undef:
|
||||
LDR PC, =0x7fffffa0
|
||||
|
||||
;
|
||||
;
|
||||
__mbed_prefetch_abort:
|
||||
LDR PC, =0x7fffffb0
|
||||
|
||||
;
|
||||
;
|
||||
__mbed_data_abort:
|
||||
LDR PC, =0x7fffffc0
|
||||
|
||||
;
|
||||
;
|
||||
;
|
||||
;
|
||||
;
|
||||
;
|
||||
;
|
||||
;
|
||||
;
|
||||
__mbed_irq:
|
||||
;
|
||||
MSR CPSR_c, #0x1F|0x80|0x40
|
||||
|
||||
;
|
||||
|
||||
STMDB sp!, {r0-r3,r12,lr}
|
||||
|
||||
;
|
||||
|
||||
MOV r0, #0xFFFFFF00
|
||||
LDR r0, [r0]
|
||||
|
||||
;
|
||||
|
||||
MOV lr, pc
|
||||
BX r0
|
||||
|
||||
;
|
||||
|
||||
MOV r0, #0xFFFFFF00
|
||||
STR r0, [r0] ;
|
||||
|
||||
;
|
||||
STR r0, [r0]
|
||||
|
||||
LDMFD sp!,{r0-r3,r12,lr}
|
||||
|
||||
;
|
||||
|
||||
MSR CPSR_c, #0x12|0x80|0x40
|
||||
|
||||
;
|
||||
|
||||
SUBS pc, lr, #4
|
||||
|
||||
;
|
||||
;
|
||||
;
|
||||
;
|
||||
__mbed_swi:
|
||||
;
|
||||
;
|
||||
STMFD sp!, {a4, r4, ip, lr}
|
||||
|
||||
;
|
||||
|
||||
LDR r4, =0x40000040
|
||||
|
||||
;
|
||||
;
|
||||
|
||||
LDR a4, =0x00940000
|
||||
LDR PC, =0x7ffff820
|
||||
|
||||
;
|
||||
;
|
||||
;
|
||||
;
|
||||
__mbed_dcc_irq:
|
||||
|
||||
;
|
||||
|
||||
;
|
||||
LDMFD sp!,{r0-r3,r12,lr}
|
||||
|
||||
;
|
||||
|
||||
MSR CPSR_c, #0x12|0x80|0x40
|
||||
|
||||
;
|
||||
|
||||
;
|
||||
SUB lr, lr, #4 ;
|
||||
STMFD sp!, {ip,lr} ;
|
||||
|
||||
;
|
||||
|
||||
SUB lr, lr, #4
|
||||
STMFD sp!, {ip,lr}
|
||||
|
||||
LDR LR, =0xfffff000
|
||||
STR LR, [LR, #0xf00]
|
||||
|
||||
;
|
||||
;
|
||||
;
|
||||
;
|
||||
|
||||
LDR PC, =0x7fffffe0
|
||||
/*
|
||||
__mbed_reset is called after reset
|
||||
we setup the stacks and realmonitor, then call Reset_Handler like on M3
|
||||
*/
|
||||
|
||||
.section .text, "ax"
|
||||
.arm
|
||||
.global Reset_handler
|
||||
Reset_Handler:
|
||||
.extern __libc_init_array
|
||||
.extern SystemInit
|
||||
.extern __wrap_main
|
||||
LDR R0, =SystemInit
|
||||
MOV LR, PC
|
||||
BX R0
|
||||
|
||||
LDR R0, =__libc_init_array
|
||||
MOV LR, PC
|
||||
BX R0
|
||||
|
||||
LDR R0, =__wrap_main
|
||||
BX R0
|
||||
|
||||
;
|
||||
;
|
||||
__mbed_reset:
|
||||
|
||||
;
|
||||
|
||||
LDR R0, =(0x40000000 + 0x8000)
|
||||
|
||||
;
|
||||
LDR R0, =( __SRAM_segment_end__ )
|
||||
|
||||
MSR CPSR_c, #0x1B|0x80|0x40
|
||||
MOV SP, R0
|
||||
SUB R0, R0, #0x00000040
|
||||
|
||||
;
|
||||
|
||||
MSR CPSR_c, #0x17|0x80|0x40
|
||||
MOV SP, R0
|
||||
SUB R0, R0, #0x00000040
|
||||
|
||||
;
|
||||
|
||||
MSR CPSR_c, #0x11|0x80|0x40
|
||||
MOV SP, R0
|
||||
SUB R0, R0, #0x00000000
|
||||
|
||||
;
|
||||
|
||||
MSR CPSR_c, #0x12|0x80|0x40
|
||||
MOV SP, R0
|
||||
SUB R0, R0, #0x00000040
|
||||
|
||||
;
|
||||
|
||||
MSR CPSR_c, #0x13|0x80|0x40
|
||||
MOV SP, R0
|
||||
SUB R0, R0, #0x00000040
|
||||
|
||||
;
|
||||
|
||||
MSR CPSR_c, #0x10
|
||||
MOV SP, R0
|
||||
|
||||
/* Relocate .data section (Copy from ROM to RAM) */
|
||||
LDR R1, =__text_end__ /* _etext */
|
||||
LDR R2, =__data_start__ /* _data */
|
||||
LDR R3, =__data_end__ /* _edata */
|
||||
CMP R2, R3
|
||||
BEQ DataIsEmpty
|
||||
LoopRel: CMP R2, R3
|
||||
LDRLO R0, [R1], #4
|
||||
STRLO R0, [R2], #4
|
||||
BLO LoopRel
|
||||
DataIsEmpty:
|
||||
|
||||
;
|
||||
/* 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
|
||||
STRLO R0, [R1], #4
|
||||
BLO LoopZI
|
||||
BSSIsEmpty:
|
||||
|
||||
|
||||
/* Init realmonitor */
|
||||
LDR R0, =__mbed_init_realmonitor
|
||||
MOV LR, PC
|
||||
BX R0
|
||||
|
||||
;
|
||||
LDR R0, =__mbed_init
|
||||
|
||||
/* Go to Reset_Handler */
|
||||
LDR R0, =Reset_Handler
|
||||
BX R0
|
||||
|
|
|
|||
|
|
@ -18,7 +18,7 @@
|
|||
|
||||
|
||||
|
||||
.section VECTOR_TABLE, "ax"
|
||||
.section .vectors, "ax"
|
||||
.arm
|
||||
|
||||
|
||||
|
|
@ -34,7 +34,7 @@
|
|||
;
|
||||
|
||||
|
||||
__main:
|
||||
_start:
|
||||
LDR PC, =__mbed_reset
|
||||
LDR PC, =__mbed_undef
|
||||
LDR PC, =__mbed_swi
|
||||
|
|
|
|||
|
|
@ -13,7 +13,7 @@ void flip_1() {
|
|||
|
||||
Ticker flipper_2;
|
||||
|
||||
#if defined(TARGET_LPC1768) || defined(TARGET_LPC11U24) || defined(TARGET_LPC4088) || defined(TARGET_LPC1114)
|
||||
#if defined(TARGET_LPC1768) || defined(TARGET_LPC11U24) || defined(TARGET_LPC4088) || defined(TARGET_LPC1114) || defined(TARGET_LPC2368)
|
||||
# define LED_NAME LED2
|
||||
#elif defined(TARGET_KL05Z)
|
||||
# define LED_NAME LED2
|
||||
|
|
|
|||
|
|
@ -59,7 +59,7 @@ class LPC2368(Target):
|
|||
|
||||
self.extra_labels = ['NXP', 'LPC23XX']
|
||||
|
||||
self.supported_toolchains = ["ARM"]
|
||||
self.supported_toolchains = ["ARM","GCC_ARM","GCC_CR"]
|
||||
|
||||
|
||||
class LPC1768(Target):
|
||||
|
|
|
|||
Loading…
Reference in New Issue