2013年9月6日金曜日

flash_lpc11u24.pyを調べる(1/3)

pyOCDのflash_lpc11u24.py のFlashアルゴリズムの初期化ルーチンを逆アセンブルしてみた。
/keil/arm/flash/LPC_IAP/FlagPrg.c とほぼ同じでした。

pc_init
0x1000003C 494F      LDR      r1,[pc,#316]  ; @0x1000017C =4
0x1000003E 484E      LDR      r0,[pc,#312]  ; @0x10000178 =0x2ee0 =12000
0x10000040 4449      ADD      r1,r1,r9
0x10000042 6008      STR      r0,[r1,#0x00] ; CCLK in kHz
0x10000044 484E      LDR      r0,[pc,#312]  ; @0x10000180 =0x40048040
0x10000046 2100      MOVS     r1,#0x00
0x10000048 6301      STR      r1,[r0,#0x30] ; MAINCLKSEL(0x40048070)=0 Select Internal RC Oscillator
0x1000004A 2201      MOVS     r2,#0x01
0x1000004C 6342      STR      r2,[r0,#0x34] ; MAINCLKUEN(0x40048074)=1 Update Main Clock Source
0x1000004E 6341      STR      r1,[r0,#0x34] ; MAINCLKUEN = 0           Toggle Update Register
0x10000050 6342      STR      r2,[r0,#0x34] ; MAINCLKUEN = 1
0x10000052 6B41      LDR      r1,[r0,#0x34] ; read MAINCLKUEN
0x10000054 07C9      LSLS     r1,r1,#31
0x10000056 D0FC      BEQ      0x10000052
0x10000058 6382      STR      r2,[r0,#0x38] ; SYSAHBCLKDIV(0x40048078)=1 Set Main Clock divider to 1
0x1000005A 4949      LDR      r1,[pc,#292]  ; @0x10000180 =0x40048040
0x1000005C 2002      MOVS     r0,#0x02
0x1000005E 3940      SUBS     r1,r1,#0x40
0x10000060 7008      STRB     r0,[r1,#0x00] ; SYSMEMREMAP(0x40048000)=2 User Flash Mode
0x10000062 2000      MOVS     r0,#0x00
0x10000064 4770      BX       lr


(2013/9/6)
---

0 件のコメント: