RXマイコンを使ってプログラムを書いています。
ブートローダのプログラムを書いています。
アドレス空間↓
RAM
アドレス サイズ 機能
0x08000000 0x100000(1MB) ブートローダ ①
0x08100000 0x700000(7MB) アプリケーション ②
内蔵ROM(コードフラッシュメモリ)
アドレス サイズ 機能
0xFFC00000 0x200000(2MB) アプリケーション ③
0xFFF00000 0x100000(1MB) ブートローダ ④
動作↓
④のアドレスでブートローダーを起動する。
(A)ブートローダーを①にコピーして①にジャンプします。(A)
③に、ここでアプリケーションを書き込みます。
ここまでは動いています。
今度は、リセット後に、④のアドレスでブートローダーを起動し、
基板のディップSWの状態をみて、(A)を実行するか。
③を②にコピーして②にジャンプするかの2パターンにしたいと考えています。
スタートアップルーチンは以下のような形です。
.section P
.glb _reset
_reset:
; 割り込み用スタック、ユーザースタックポインタの初期化
; プロセッサステータスワードの初期化
bsr _mcu_ini ; Cの関数。CPUのRMA,クロック、端子の初期化、RAMへコピー ; 0x08000000の初期化ルーチンへジャンプ
アセンブリ言語をほとんどしらず、個人的には、mcu_iniでDSWの状態をよみ
その戻り値などが使えると仮定して、
; 0x08000000の初期化ルーチンへいくか
; 0x08100000の初期化ルーチンへいくか切り分けができないかと考えています。
何かよい方法はないでしょうか。。
アセンブリで書きたいと思っています。
コンパイラ:CCRX
環境:e2studio
以下を考えました。↓
SWのポートの値を取得して比較するところをどうやればいいのか。。
SWの値を読む(P01の値) (ポート入力データレジスタ(PIDR)、PORT1.PIDR 0008 C041h) cmp DSWの値, 1 jle .L2 mov.l #__INIT, r1 ; RAMへジャンプ準備 and #000FFFFFh, r1 ; or #08000000h, r1 ; jmp r1 ;
.L2:
mov.l #__INIT, r1 ;
and #000FFFFFh, r1 ;
or #08100000h, r1 ;
jmp r1 ;

回答2件
あなたの回答
tips
プレビュー