#define SystemControlBase 0xe01fc000 .section .text .arm .align 0 .global board_setup board_setup: mov r0, #0 mov r1, #1 memmap_init: // ベクタエリアをLPC23xx内蔵ブートローダからFlashROMに切替 ldr r4, =SystemControlBase str r1, [r4, #0x040] // MEMMAP pll_init: // PLLの設定 mov r5, #0x55 mov r6, #0xaa ldr r2, [r4, #0x088] // PLLSTAT tst r2, #(1 << 25) // PLLが接続されている場合は切り離す strne r1, [r4, #0x080] // PLLCON=1 (PLL enable/disconnect) strne r6, [r4, #0x08c] // PLLFEED=0xaa strne r5, [r4, #0x08c] // PLLFEED=0x55 str r0, [r4, #0x080] // PLLCON=0 (PLL disable/disconnect) str r6, [r4, #0x08c] // PLLFEED=0xaa str r5, [r4, #0x08c] // PLLFEED=0x55 str r0, [r4, #0x10c] // CLKSRCSEL // 内蔵RC発振器/4MHzをクロック源とする // USBを使用する場合、より精度の高い // クロック源を使用すること mov r2, #((2 - 1) << 16) // Fcco = (2 x M x Fin) / N orr r2, r2, #(72 - 1) // 288MHz = (2 x 72 x 4MHz) / 2 str r2, [r4, #0x084] // PLLCFG str r6, [r4, #0x08c] // PLLFEED=0xaa str r5, [r4, #0x08c] // PLLFEED=0x55 str r1, [r4, #0x080] // PLLCON=1 (PLL enable/disconnect) str r6, [r4, #0x08c] // PLLFEED=0xaa str r5, [r4, #0x08c] // PLLFEED=0x55 pll_wait: ldr r2, [r4, #0x088] // PLLSTAT tst r2, #(1 << 26) beq pll_wait // PLLのロック待ち mov r3, #(4 - 1) str r3, [r4, #0x104] // CCLKCFG mov r3, #3 str r3, [r4, #0x080] // PLLCON=3 (PLL enable/connect) str r6, [r4, #0x08c] // PLLFEED=0xaa str r5, [r4, #0x08c] // PLLFEED=0x55 pclk_init: // setup PCLK str r0, [r4, #0x1a8] // PCLKSEL0 str r0, [r4, #0x1ac] // PCLKSEL1 bx lr