.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 |