リマップ無しで実行プログラムを切り替えよう

通常デフォルトの vector table は address 0 ですが、例えばCortexM3では、VTOR(0xE000ED08) レジスタでそれを変える事ができます。

- 通常の切り替え

// Update stack pointer from remapped code vector table.
movs r0, #0
ldr r1, [r0]
mov sp, r1
// Load remapped reset handler and jump to the remapped code.
ldr r0, [r0, #4]
bx r0


- VTORを使った切り替え

// Set the vector table address to user code address.
ldr r0, =USER_CODE_ADDRESS
ldr r1, =0xe000ed08
str r0, [r1]
// Update stack pointer from user code vector table.
ldr r1, [r0]
mov sp, r1
// Load user code reset handler and jump to the user code.
ldr r0, [r0, #4]
bx r0


参照:
http://markdingst.blogspot.jp/2012/06/make-own-bootloader-for-arm-cortex-m3.html
2016-07-29 : Work-Product-Verification : コメント : 0 : トラックバック : 0
Pagetop
コメントの投稿
非公開コメント

Pagetop
« next  ホーム  prev »

プロフィール

zive

Author:zive
大阪在住、男

ブログ検索

月別アーカイブ

FC2カウンター