.ustack (NOLOAD) : /* a user stack pseudo-section that only defines the user stack length */
{
. = ALIGN(4);
_sustack = ABSOLUTE(.);
*(.ustack .ustack.*)
. = ALIGN(4);
_eustack = ABSOLUTE(.);
}
_lustack = (_eustack - _sustack); |
_stack = ORIGIN(sram) + LENGTH(sram); |
_stack = ORIGIN(sram) + LENGTH(sram) - _liap_reserved; |
.stackarea _ebss (NOLOAD) :
{
. = ALIGN(8);
_sstack = .; /* _sstack is located immediately after the BSS */
*(.stackarea .stackarea.*)
. = ALIGN(8);
_estack = .; /* _estack points at _sstack + your_stack_size */
. = ALIGN(4);
_end = .; /* this symbol marks the end of application RAM */
PROVIDE(end = .);
} >sram
_stack = ORIGIN(sram) + LENGTH(sram); /* _stack is placed at ram-top and grows towards the BSS */ |
.section .stackarea,"",%nobits .space 4*64 /* size of stack */ |
.macroSECTION name/* normal section (eg. executable) */ .section.\name,"ax",%progbits .endm .macroDSECTION name/* Data section */ .section.\name,"a",%progbits .endm |
.section .after_vectors
ResetISR:
.thumb_func
.type ResetISR,%function
.global ResetISR
ResetHandler: LDR R3,=__data_section_table
LDR R0,[R3]/* load address of .data section */
LDR R1,[R3,#4]/* start address of .data section */
LDR R2,[R3,#8]/* length of .data section */
copy_data:LDMIA R0!,{R3}
STMIA R1!,{R3}
SUBS R2,R2,#4
BNE copy_data
LDR R3,=__bss_section_table
LDR R0,[R3]/* start address of .bss section */
LDR R1,[R3,#4]/* length of .bss section */
MOVS R2,#0
zero_bss:STMIA R0!,{R2}
SUBS R1,R1,#4
BNE zero_bss
/*Set48MHzClock FUNCTION */
LDR R3,=LPC_SYSCON_BASE+PDRUNCFG
LDR R1,[R3]
MOVS R2,#0b10110000
BICS R1,R1,R2
STR R1,[R3]
/* Select PLL source as internal oscillator */
LDR R3,=LPC_SYSCON_BASE
MOVS R2,#0
STR R2,[R3,SYSPLLCLKSEL]
/* Update SYSPLL setting (0->1 sequence) */
MOVS R2,#0
STR R2,[R3,SYSPLLCLKUEN]
MOVS R2,#1
STR R2,[R3,SYSPLLCLKUEN]
.equ clockspeed, 48000000
/* Set PLL to 48MHz generate from 12MHz */
MOVS R2,#0x23
STR R2,[R3,SYSPLLCTRL]
/* wait until PLL is locked */
Set48MHzClock: LDR R2,[R3,SYSPLLSTAT]
CMP R2,#0
BEQ Set48MHzClock
/* Switch main clock to PLL clock */
MOVS R2,#3
STR R2,[R3, MAINCLKSEL]
/* Update Main Clock Select setting (0->1 sequence) */
MOVS R2,#0
STR R2,[R3,MAINCLKUEN]
MOVS R2,#1
STR R2,[R3,MAINCLKUEN]
B main |
.section .isr_vector .word _vStackTop - 4 /* 0 Top of Stack */ .word ResetISR /* 1 Reset Handler */ |