手書きブートローダ(手書き* _ *)

考え
1.ウォッチドッグオフ
セット時計2.
3.初期化SDRAM
4.リロケーション
5.実行メイン
表すの.textセグメントコード
.GLOBAL _startを(グローバル符号は、グローバルを表します。)

ウォッチドッグがオフ
に調整することができるC disable_watch_dag完全なアドレスが決定されたウォッチドッグ.... 0X
のLDR R0、= 0X ... LDR違反アセンブラ命令
MOV R1、#0
STR R1、〔のR0]
使用Clock_InitをCとすることができるクロックを設定します()
CLKDIVNは、基板の位置を定義
、= 0x4c00001のLDR R0
HCLK:= PCLK 1:2 :. 4、HDIVN = 1、PDIVN 1 = MOV R1、FCLKの#0x03の0x03の分割係数//
STR R1、[R0の】ASMもしCをそれはチップの特定の状況に応じて、アセンブリ手動調整非同期モードに埋め込まれたリードチップの符号である
コプロセッサのレジスタへの転送データのMRC命令レジスタARMプロセッサ。コプロセッサが正常にこの操作を実行しない場合は、未定義命令例外割り込み
MCRを{ } P15、0、 { }
動作は、コプロセッサ命令コードによって実行されます。CP15コプロセッサの場合、 フォーエバー0b000、とき ないときは0b000、命令動作は予測できない結果
値が転送されたレジスタの要素、<などのARMレジスタ
Rdが>、PCではない、それはコプロセッサレジスタ得予測できない結果にPC、あなたの指示操作であれば
C0、C1 .... C15と番号付けされてもよいデスティネーション・レジスタとしてレジスタコプロセッサ。 追加のまたは異なる物理レジスタの同じ数を区別するために使用された元のデスティネーションレジスタオペランドレジスタ。命令は、追加情報を提供する必要はありません場合は、C0と指定されます それ以外の場合は、指示予測できない結果を操作します。 物理レジスタの数が異なる区別するために、追加情報を提供します。追加情報を指定するための命令を省略した場合 または0、そうでなければ操作指示予期しない結果として指定することが
ORR {条件} {S}デスティネーションレジスタオペランド1、オペランド2:ORR ORR命令フォーマット
二つのオペランドに対して論理リングを行うためのORR命令動作は、デスティネーションレジスタに結果を確定する
オペランドレジスタは1であるべきで、オペランド2は、レジスタ、シフトレジスタまたは即値定数であってもよいです。
オペランド1の特定のビットで使用される命令セット。

コプロセッサレジスタ値のMRC命令は、ARMプロセッサのレジスタに転送されます。コプロセッサが正常にこの操作を実行しない場合は、未定義命令例外割り込み

命令例:ORR R0、R0、#3 、
命令セットは、R0のビット0は、残りのビットは変更されないままです。
ORR R0、R0、#0xD3
0xD3 = 1101 0111
R0算術または操作のために0xD3であり、その結果は、すなわち「R0 [7:6]ビット、R0に戻され、ビット[4]、ビット[2:0]に設定します1

おすすめ

転載: www.cnblogs.com/DemonMaster/p/11869435.html