[ARM奮闘記 AT91R40807]

★メモリマップ

秋月 ARMボードのメモリマップは次の図のようになっています。



電源投入直後は、左側のマップになっています。AT91シリーズの機能の書き込み保護機能で 128KB のSecondaryRAM は保護されているため、ここに書き込みを行うと例外が発生してフリーズしてしまいます。
JTAGからは書き込めるようで、NJARM7 で、ここにソフトウェアを書き込んで実行することはできます。
しかし、秋月 ARMボード標準添付の wingcc に入っているスタートアップルーチンでは、書き込み保護機能を解除して いる状態を想定しているために、BSS領域の初期化などでいきなり書き込みに行きハングアップしてしまいます。

標準添付のスタートアップコードを使う場合は、NJARM7 の機能の WriteProtect解除を実施することで回避できま すが、毎度それを選択するのも面倒なので、NJARM7 でいきなり RAMに転送して実行することを考慮した、書き込み 保護解除機能付きのスタートアップルーチンを作成してみました。

★書き込み解除
SecondaryRAM の書き込み保護を解除するには SF_MMR レジスタ(0xFFF0000C番地) に 1 を書き込みます。
逆に 0 を書き込むと書き込み禁止状態に戻ります。

ボード添付の開発環境のスタートアップルーチン(RAM起動用) は、 C:\wingcc\app\ram_armcrt0.S (デフォルトイン ストールの場合) です。これを下記のように修正すれば、書き込み解除してから書き込みを行うようになります。

_start:
  mov r0, #0
  ldr r1, =_bss_start
  ldr r2, =_end

↓ 修正

_start:
@@@@ SecondaryRAM is writable @@@@
  ldr r0, =0xfff00000
  mov r1, #1
  str r1, [r0, #0x0c]

  mov r0, #0
  ldr r1, =_bss_start
  ldr r2, =_end


[前へ][▲上へ][次へ]