mirror of
https://github.com/RIOT-OS/RIOT.git
synced 2025-01-18 12:52:44 +01:00
31 lines
1.2 KiB
Plaintext
31 lines
1.2 KiB
Plaintext
/* ARM code to run user code */
|
|
/* on the LPC23xx chips, the bootloader defaults to using the RC */
|
|
/* osciallator and it activates the PLL to create 14.78 MHz, even */
|
|
/* if there is no crystal. However, when we use try to jump to */
|
|
/* the user's code, their startup routine may (incorrectly) assume */
|
|
/* the PLL is not enabled and crash if it is. So in addition to */
|
|
/* remapping the reset vector to flash, we have to shut off the */
|
|
/* PLL so the user's startup code sees the same conditions as it */
|
|
/* would following a hard reset */
|
|
begin:
|
|
adr r0, const
|
|
ldr r1, [r0] /* r1 points to MEMMAP register */
|
|
ldr r2, [r0,#4] /* r2 points to PLLCON */
|
|
ldr r3, [r0,#8] /* r3 points to PLLFEED */
|
|
mov r0, #1
|
|
str r0, [r1] /* remap interrupt vectors to flash */
|
|
mov r4, #0xAA
|
|
mov r5, #0x55
|
|
str r0, [r2] /* disconnect the PLL, PLLCON = 1 */
|
|
str r4, [r3]
|
|
str r5, [r3]
|
|
mov r0, #0
|
|
str r0, [r2] /* disable the PLL, PLLCON = 0 */
|
|
str r4, [r3]
|
|
str r5, [r3]
|
|
mov pc, #0 /* and then jump to the user's code */
|
|
const:
|
|
.int 0xE01FC040 /* MEMMAP register */
|
|
.int 0xE01FC080 /* PLLCON */
|
|
.int 0xE01FC08C /* PLLFEED */
|