Stellaris® LM3S9B96 Microcontroller 2 章 ARM Cortex-M3 プロセッサ・コア 。 JAJU144 SPMS182D 翻訳版(2 章) 最新の英語版: http://www.ti.com/lit/gpn/lm3s9b96 この資料は、Texas Instruments Incorporated(TI)が英文で記述した資料を、皆様のご理解の一助として頂くために日本テキサ ス・インスツルメンツ(日本 TI)が英文から和文へ翻訳して作成したものです。資料によっては正規英語版資料の更新に対応して いないものがあります。日本 TI による和文資料は、あくまでも TI 正規英語版をご理解頂くための補助的参考資料としてご使用下 さい。製品のご検討およびご採用にあたりましては必ず正規英語版の最新資料をご確認下さい。TI および日本 TI は、正規英語 版にて更新の情報を提供しているにもかかわらず、更新以前の情報に基づいて発生した問題や障害等につきましては如何なる 責任も負いません JAJU144 2 ARM Cortex-M3 プロセッサ・コア ARM Cortex-M3 プロセッサは、メモリ要求の低減、少ピン構成、低消費電力といったシステム要件に対適応する、 ハイパフォーマンスで低コストのプラットフォームを提供し、極めて優れた計算性能と、割り込みに対する並外れたシ ステム応答を実現します。機能には次のようなものがあります。 ■ 小スペースの組み込みアプリケーションに最適化された、32 ビット ARM® Cortex™-M3 v7M アーキテクチャ ■ 高速な割り込み応答と組み合わされた、極めて優れた処理性能 ■ 16 ビット/32 ビット命令を組み合わせた Thumb-2 命令セットにより、32 ビット ARM コアに期待されるハイパ フォーマンスを、通常は 8 ビットおよび 16 ビットのデバイスで使用されるコンパクトなメモリ・サイズ(マイクロコントロー ラ級のアプリケーションの場合の標準的な範囲は数キロバイト)で実現 – シングル・サイクルの乗算命令とハードウェア除算 – アトミックなビット操作処理(Bit-Banding)により、最大限にメモリを有効利用し、リフェラル制御の効率化 も実現 – アンアラインド・データ・アクセスにより、データのメモリへの効率的なパッキングを実現 ■ 高速なコード実行により、プロセッサ・クロックの低速化やスリープ・モードの時間の増加を可能に ■ 命令用とデータ用に分離したバスを特徴とするハーバード・アーキテクチャ ■ 効率的なプロセッサ・コア、システム、メモリ ■ ハードウェアによる除算と、高速の乗算器 ■ 実時間処理が要求されるアプリケーションに向けた、確定的で効高率な割り込み処理 ■ メモリ保護ユニット(MPU) により、保護されたオペレーティング・システム用の特権モードを提供 ■ 広範囲のブレークポイント機能とトレース機能を備えた、強化されたシステム・デバッグ ■ シリアル・ワイヤ・デバッグおよびシリアル・ワイヤ・トレースにより、デバッグとトレースに必要なピン数を削減 ■ ARM7™ プロセッサ・ファミリからの移行することにより、パフォーマンスと電力効率を向上 ■ シングル・サイクルでのフラッシュメモリ動作向けに最適化 ■ スリープ・モードを組み込むことにより、超低消費電力を実現 ■ 80MHz 動作 ■ 1.25 DMIPS/MHz Stellaris ®ファミリのマイクロコントローラはこのコアをベースにすることにより、工場のオートメーションや制御、産業 制御用パワー・デバイス、ビルディングや家庭のオートメーション、ステッピング・モーター等、コストが重視される組 み込みマイクロコントローラ・アプリケーションに対し、ハイパフォーマンスな 32 ビット演算性能を提供します。 ARM Cortex-M3 プロセッサ・コアの詳細については、ARM® Cortex™-M3 Technical Reference Manual を参照し てください。SWJ-DP に関する情報については、ARM® CoreSight Technical Reference Manual を参照してくだ さい。 Stellaris LM3S9B96 Microcontroller Data Sheet (Rev. D) 2 章 翻訳版 2.1 ブロック図 図 2-1. CPU のブロック図 2.2 機能の説明 重要: ARM® Cortex™-M3 Technical Reference Manual では、ARM Cortex-M3 の全機能を詳細に説明していま す。ただし、これらの機能は実装によって異なってきます。このセクションでは、Stellaris ®の実装を説明します。 Texas Instruments では、ARM Cortex-M3 のコアを page 72 の図 2-1 に示すように実装しています。Cortex-M3 は、全 16 ビット Thumb 命令セットと、基本的な Thumb-2 32 ビット命令セットを使用しています。さらに、ARM® Cortex™-M3 Technical Reference Manual で述べられているように、SW/JTAG-DP, ETM, TPIU, ROM テーブル、 MPU、ネスト型ベクタ割り込みコントローラ(NVIC)等のいくつかの Cortex-M3 コンポーネントを柔軟に実装すること が可能です。これらの各実装については、後続のセクションで言及します。 2.2.1 プログラミング・モデル このセクションでは、Cortex-M3 コア用のプログラミング・モデルの概要を簡単に説明します。詳細な情報については、 ARM® Cortex™-M3 Technical Reference Manual を参照してください。 ■ 特権アクセスとユーザー・アクセス – コードは特権または非特権の状態で実行できます。非特権実行ではアク セスが制限されたり、アクセスできないリソースもあります。特権実行では、すべてのリソースに対するアクセス権が あります。ハンドラ・モードには常に特権があります。スレッド・モードは、特権または非特権になる可能性がありま す。 スレッド・モードはリセット直後に特権になりますが、MSR 命令を使用して CONTROL[0]ビットをセットすることにより、 ユーザー、つまり非特権に変更することが可能です。ユーザー・アクセスでは、次のことができなくなります。 – FAULTMASK と PRIMASK をセットする CPS などの一部の命令の使用 – システム制御スペース(SCS:)内の大部分のレジスタへのアクセス スレッド・モードが特権からユーザーに変更された場合、それ自体が特権に戻すことはできません。スレッド・モードの 特権を変更できるのはハンドラのみです。ハンドラ・モードは常に特権です ■ レジスタ・セット - プロセッサは、次の 32 ビット・レジスタを備えています。 – 13 の汎用レジスタ: r0 ~ r12 – スタックポインタは、バンクになっているレジスタのエイリアスで、実体は SP_process および SP_main – リンク・レジスタ: r14 – プログラム・カウンタ: r15 – 1 つのプログラム・ステータス・レジスタ: xPSR ■ データ・タイプ - プロセッサでは、次のデータ・タイプをサポートしています。 – 32 ビット・ワード – 16 ビット・ハーフワード – 8 ビット・バイト ■ メモリフォーマット - プロセッサはメモリを、線形に配列されていて 0 から昇順に番号が付けられたバイトの集合 として参照します。例えば、バイト 0~3 では最初にストアされたワードを保持し、バイト 4~7 では 2 番目にストアされ たワードを保持します。プロセッサはリトル・エンディアン形式でコードとデータにアクセスします。これはワード内の最 も下のアドレスを持つバイトはそのワードの最下位のバイトという意味です。ワード内の最も上のアドレスを持つバイ トは最上位です。メモリ・システムのアドレス 0 のバイトは、データ・ライン 7~0 に接続されます。 ■ 命令セット - Cortex-M3 の命令セットには、16 ビット命令と 32 ビット命令の両方が入っています。これらの命令 は、page 73 の表 2-1 と、page 75 の表 2-2 にそれぞれまとめられています。 表 2-1. 16 ビット Cortex-M3 命令セットの概要 動作 アセンブラ レジスタの値と C フラグをレジスタの値に加算 ADC <Rd>, <Rm> 3 ビット即値をレジスタに加算 ADD <Rd>, <Rn>, #<immed_3> 8 ビット即値をレジスタに加算 ADD <Rd>, #<immed_8> 下位レジスタの値を下位レジスタの値に加算 ADD <Rd>, <Rn>, <Rm> 上位レジスタの値を下位または上位レジスタの値に加算 ADD <Rd>, <Rm> PC 相対 4 ×(8 ビット即値)でレジスタに加算 ADD <Rd>, PC, #<immed_8> * 4 SP 相対 4 ×(8 ビット即値)でレジスタに加算 ADD <Rd>, SP, #<immed_8> * 4 4 ×(7 ビット即値)を SP に加算 ADD SP, #<immed_7> * 4 レジスタの値をビット単位論理積 AND <Rd>, <Rm> 即値の数値により算術右シフト ASR <Rd>, <Rm>, #<immed_5> レジスタの数値により算術右シフト ASR <Rd>, <Rs> 条件付き分岐 B<cond> <target address> 無条件分岐 B <target_address> ビットクリア BIC <Rd>, <Rm> ソフトウェアブレークポイント BKPT <immed_8> リンク付き分岐 BL <Rm> リンク付き分岐と状態遷移 BLX <Rm> 分岐と状態遷移 BX <Rm> 比較して非 0 で分岐 CBNZ <Rn>,<label> 比較して 0 で分岐 CBZ <Rn>,<label> レジスタ値の 2 の補数(負数、negation)を別のレジスタの値と比較 CMN <Rn>, <Rm> 8 ビット即値と比較 CMP <Rn>, #<immed_8> レジスタと比較 CMP <Rn>, <Rm> 上位レジスタを下位または上位レジスタと比較 CMP <Rn>, <Rm> プロセッサ状態変更 CPS <effect>, <iflags> 上位または下位レジスタの値を別の上位または下位レジスタにコピー CPY <Rd> <Rm> レジスタの値をビット単位で排他的論理和 EOR <Rd>, <Rm> 次の命令を条件付け IT <cond> 次の 2 つの命令を条件付け IT<x> <cond> 次の 3 つの命令を条件付け IT<x><y> <cond> 次の 4 つの命令を条件付け IT<x><y><z> <cond> 複数ワードを連続するメモリからロード LDMIA <Rn>!, <registers> ベースレジスタのアドレス + 5 ビット即値オフセットのメモリからワードをロード LDR <Rd>, [<Rn>, #<immed_5> * 4] ベースレジスタのアドレス + レジスタオフセットのメモリからワードをロード LDR <Rd>, [<Rn>, <Rm>] PC アドレス + 8 ビット即値オフセットのメモリからワードをロード LDR <Rd>, [PC, #<immed_8> * 4] SP アドレス + 8 ビット即値オフセットのメモリからワードをロード LDR, <Rd>, [SP, #<immed_8> * 4] レジスタアドレス + 5 ビット即値オフセットのメモリからバイト[7:0] をロード LDRB <Rd>, [<Rn>, #<immed_5>] レジスタアドレス + レジスタオフセットのメモリからバイト[7:0] をロード LDRB <Rd>, [<Rn>, <Rm>] レジスタアドレス + 5 ビット即値オフセットのメモリからハーフワード[15:0] をロ ード LDRH <Rd>, [<Rn>, #<immed_5> * 2] レジスタアドレス + レジスタオフセットのメモリからハーフワード[15:0] をロード LDRH <Rd>, [<Rn>, <Rm>] レジスタアドレス + レジスタオフセットのメモリから符号付きバイト[7:0] をロード LDRSB <Rd>, [<Rn>, <Rm>] レジスタアドレス + レジスタオフセットのメモリから符号付きハーフワード[15:0] をロード LDRSH <Rd>, [<Rn>, <Rm>] 即値により論理左シフト LSL <Rd>, <Rm>, #<immed_5> レジスタの値により論理左シフト LSL <Rd>, <Rs> 即値により論理右シフト LSR <Rd>, <Rm>, #<immed_5> レジスタの値により論理右シフト LSR <Rd>, <Rs> 8 ビット即値をレジスタに移動 MOV <Rd>, #<immed_8> 下位レジスタの値を下位レジスタに移動 MOV <Rd>, <Rn> 上位または下位レジスタの値を上位または下位レジスタに移動 MOV <Rd>, <Rm> レジスタの値を乗算 MUL <Rd>, <Rm> レジスタの値の否定(1 の補数、complement)をレジスタに移動 MVN <Rd>, <Rm> レジスタの値を負(2 の補数、negative)にしてレジスタに保存 NEG <Rd>, <Rm> 無操作 NOP <c> レジスタの値をビット単位で論理和 ORR <Rd>, <Rm> スタックから複数レジスタをポップ POP <registers> スタックから複数レジスタおよび PC をポップ POP <registers, PC> 複数レジスタをスタックへプッシュ PUSH <registers> LR および複数レジスタをスタックへプッシュ PUSH <registers, LR> ワード中のバイト順を反転して、レジスタへコピー REV <Rd>, <Rn> 2 つのハーフワード中でそれぞれのバイト順を反転して、レジスタへコピー REV16 <Rd>, <Rn> 下位ハーフワード[15:0] でバイト順を反転、符号拡張して、レジスタへコピー REVSH <Rd>, <Rn> レジスタ内の量により、右ローテート ROR <Rd>, <Rs> レジスタの値と C フラグをレジスタの値から減算 SBC <Rd>, <Rm> イベント送信 SEV <c> 複数のレジスタからワードを連続するメモリ位置へストア STMIA <Rn>!, <registers> レジスタのアドレス + 5 ビット即値のオフセットへレジスタのワードをストア STR <Rd>, [<Rn>, #<immed_5> * 4] レジスタのアドレスへレジスタのワードをストア STR <Rd>, [<Rn>, <Rm>] SP アドレス + 8 ビット即値のオフセットへレジスタのワードをストア STR <Rd>, [SP, #<immed_8> * 4] レジスタのアドレス + 5 ビット即値のオフセットへレジスタのバイト[7:0] をストア STRB <Rd>, [<Rn>, #<immed_5>] レジスタのアドレスへレジスタのバイト[7:0] をストア STRB <Rd>, [<Rn>, <Rm>] レジスタのアドレス + 5 ビット即値のオフセットへレジスタのハーフワード[15:0] をストア STRH <Rd>, [<Rn>, #<immed_5> * 2] レジスタのアドレス + レジスタによるオフセットへレジスタのハーフワード[15:0] をストア STRH <Rd>, [<Rn>, <Rm>] 3 ビット即値をレジスタから減算 SUB <Rd>, <Rn>, #<immed_3> 8 ビット即値をレジスタの値から減算 SUB <Rd>, #<immed_8> レジスタの値を減算 SUB <Rd>, <Rn>, <Rm> 4 ×(7 ビット即値)を SP から減算 SUB SP, #<immed_7> * 4 8 ビット即値の呼び出しコードにより、オペレーティングシステムのサービス呼び 出し SVC <immed_8> レジスタからバイト[7:0] を抽出し、レジスタに移動して、32 ビットに符号拡張 SXTB <Rd>, <Rm> レジスタからハーフワード[15:0] を抽出し、レジスタに移動して、32 ビットに符号 拡張 SXTH <Rd>, <Rm> 別のレジスタの値と論理積を実行して、レジスタの設定されているビットをテスト TST <Rn>, <Rm> レジスタからバイト[7:0] を抽出し、レジスタに移動して、32 ビットにゼロ拡張 UXTB <Rd>, <Rm> レジスタからハーフワード[15:0] を抽出し、レジスタに移動して、32 ビットにゼロ 拡張 UXTH <Rd>, <Rm> イベント待ち WFE <c> 割り込み待ち WFI <c> 表 2-2. 32 ビット Cortex-M3 命令セットのまとめ 動作 アセンブラ レジスタの値、12 ビット即値、C ビットを加算 ADC{S}.W <Rd>, <Rn>, #<modify_constant(immed_12> ADC{S}.W <Rd>, <Rn>, <Rm>{, <shift>} レジスタの値、シフトしたレジスタの値、C ビットを加算 レジスタの値とシフトしたレジスタの値を加算 ADD{S}.W <Rd>, <Rn>, #<modify_constant(immed_12)> ADD{S}.W <Rd>, <Rm>{, <shift>} レジスタの値と 12 ビット即値を加算 ADDW.W <Rd>, <Rn>, #<immed_12> レジスタの値と 12 ビット即値をビット単位論理積 レジスタの値とシフトされたレジスタの値をビット単位論理積 AND{S}.W <Rd>, <Rn>, #<modify_constant(immed_12> AND{S}.W <Rd>, <Rn>, Rm>{, <shift>} レジスタの数値により算術右シフト ASR{S}.W <Rd>, <Rn>, <Rm> 条件分岐 B{cond}.W <label> ビットフィールドをクリア BFC.W <Rd>, #<lsb>, #<width> レジスタの値と 12 ビット即値を加算 ビットフィールドを 1 つのレジスタの値から別のレジスタの値に挿入 BFI.W <Rd>, <Rn>, #<lsb>, #<width> レジスタの値と 12 ビット即値の否定(1 の補数)とをビット単位の論理積 BIC{S}.W <Rd>, <Rn>, #<modify_constant(immed_12)> レジスタの値とシフトされたレジスタの値の否定(1 の補数)とをビット単位の論理 積 BIC{S}.W <Rd>, <Rn>, <Rm>{, <shift>} リンク付き分岐 BL <label> リンク付き分岐(即値) BL<c> <label> 無条件分岐 B.W <label> 排他クリアは、実行中のプロセッサのローカルレコードで、アドレスが排他アクセ スの要求を受けているものをクリアします。 CLREX <c> レジスタの値に含まれる先行ゼロの数を返す CLZ.W <Rd>, <Rn> レジスタの値と 12 ビット即値の 2 の補数とを比較 CMN.W <Rn>, #<modify_constant(immed_12)> CMN.W <Rn>, <Rm>{, <shift>} レジスタの値とシフトされたレジスタの値の 2 の補数とを比較 レジスタの値と 12 ビット即値とを比較 レジスタの値とシフトされたレジスタの値とを比較 CMP.W <Rn>, #<modify_constant(immed_12)> CMP.W <Rn>, <Rm>{, <shift>} データメモリ バリア DMB <c> データ同期化バリア DSB <c> レジスタの値と 12 ビット即値で排他的論理和 レジスタの値とシフトされたレジスタの値で排他的論理和 EOR{S}.W <Rd>, <Rn>, #<modify_constant(immed_12)> EOR{S}.W <Rd>, <Rn>, <Rm>{, <shift>} 命令同期化バリア ISB <c> ポストインクリメント(IA)またはプリデクリメント(DB)で、メモリからレジスタへ複数 ロード LDM{IA|DB}.W <Rn>{!}, <registers> ベースレジスタのアドレス + 12 ビット即値のオフセットのメモリからワードをロー ド LDR.W <Rxf>, [<Rn>, #<offset_12>] ベースレジスタのアドレス + 12 ビット即値のオフセットのメモリから PC へワード をロード(分岐) LDR.W PC, [<Rn>, #<offset_12>] ポストインデクスで、ベースレジスタのアドレスに 8 ビット即値をオフセットしたメモ リから PC へワードをロード(分岐) LDR.W PC, [Rn], #<+/-<offset_8> ポストインデクスで、ベースレジスタのアドレスに 8 ビット即値をオフセットしたメモ リからワードをロード LDR.W <Rxf>, [<Rn>], #+/–<offset_8> プレインデクスで、ベースレジスタのアドレスに 8 ビット即値をオフセットしたメモリ からワードをロード LDR.W <Rxf>, [<Rn>, #<+/–<offset_8>]! LDRT.W <Rxf>, [<Rn>, #<offset_8>] LDR.W PC, [<Rn>, #+/–<offset_8>]! ベース・レジスタ・アドレスの 8 ビット即値オフセットから PC へのメモリ・ワード(プ レインデックス) プレインデクスで、ベースレジスタのアドレスに 8 ビット即値をオフセットしたメモリ から PC へワードをロード(分岐) LDR.W <Rxf>, [<Rn>, <Rm>{, LSL #<shift>}] 位置が 0、1、2、または 3 つ左にシフトされたレジスタのアドレスのメモリからワー ドをロード LDR.W PC, [<Rn>, <Rm>{, LSL #<shift>}] 位置が 0、1、2、または 3 つ左にシフトされたレジスタのアドレスのメモリから PC へワードをロード(分岐) LDR.W <Rxf>, [PC, #+/–<offset_12>] PC アドレスに 12 ビット即値をオフセットしたメモリからワードをロード LDR.W PC, [PC, #+/–<offset_12>] PC アドレスに 12 ビット即値をオフセットしたメモリから PC へワードをロード(分 岐) LDRB.W <Rxf>, [<Rn>, #<offset_12>] ベースレジスタのアドレス + 12 ビット即値のオフセットのメモリからバイト[7:0] をロード LDRB.W <Rxf>. [<Rn>], #+/-<offset_8> ポストインデクスで、ベースレジスタのアドレスを 8 ビット即値でオフセットしたメモ リからバイト[7:0] をロード LDRB.W <Rxf>, [<Rn>, <Rm>{, LSL #<shift>}] 位置が 0、1、2、または 3 つ左にシフトされたレジスタのアドレスのメモリからバイ ト[7:0] をロード LDRB.W <Rxf>, [<Rn>, #<+/–<offset_8>]! プレインデクスで、ベースレジスタのアドレスに 8 ビット即値でオフセットしたメモリ からバイト[7:0] をロード LDRB.W <Rxf>, [PC, #+/–<offset_12>] PC アドレスに 12 ビット即値でオフセットしたメモリからバイトをロード プレインデクスで、レジスタのアドレスに、8 ビット即値 × 4 をオフセットしたメモ リからダブルワードをロード LDRD.W <Rxf>, <Rxf2>, [<Rn>, #+/– <offset_8> * 4]{!} LDRD.W <Rxf>, <Rxf2>, [<Rn>], #+/– <offset_8> * 4 ポストインデクスで、レジスタのアドレスに、8 ビット即値 × 4 をオフセットしたメ モリからダブルワードをロード LDREX<c> <Rt>,[<Rn>{,#<imm>}] 排他レジスタロードは、ベースレジスタの値と即値オフセットからアドレスを計算 し、ワードをメモリからロードして、レジスタに書き込み LDREXH<c> <Rt>,[<Rn>{,#<imm>}] 排他レジスタロード ハーフワードは、ベースレジスタの値と即値オフセットからア ドレスを計算し、ハーフワードをメモリからロードして、レジスタに書き込み LDREXB<c> <Rt>,[<Rn>{,#<imm>}] 排他レジスタロード バイトは、ベースレジスタの値と即値オフセットからアドレス を計算し、バイトをメモリからロードして、レジスタに書き込み LDRH.W <Rxf>, [<Rn>, #<offset_12>] ベースレジスタのアドレス + 12 ビット即値のオフセットのメモリからハーフワード [15:0] をロード LDRH.W <Rxf>, [<Rn>, #<+/–<offset_8>]! ポストインデクスで、ベースレジスタのアドレスに 8 ビット即値でオフセットしてハ ーフワード[15:0] をロード LDRH.W <Rxf>. [<Rn>], #+/-<offset_8> 位置が 0、1、2、または 3 つ左にシフトされたレジスタのアドレスのメモリからハー フワード[15:0] をロード LDRH.W <Rxf>, [<Rn>, <Rm>{, LSL #<shift>}] PC アドレスに 12 ビット即値をオフセットしたメモリからハーフワードをロード LDRH.W <Rxf>, [PC, #+/–<offset_12>] ベースレジスタのアドレス + 12 ビット即値のオフセットのメモリから符号付きバ イト[7:0] をロード LDRSB.W <Rxf>, [<Rn>, #<offset_12>] ポストインデクスで、ベースレジスタのアドレスに 8 ビット即値をオフセットしたメモ リから符号付きバイト[7:0] をロード LDRSB.W <Rxf>. [<Rn>], #+/-<offset_8> プレインデクスで、ベースレジスタのアドレスに 8 ビット即値をオフセットしたメモリ から符号付きバイト[7:0] をロード LDRSB.W <Rxf>, [<Rn>, #<+/– <offset_8>]! 位置が 0、1、2、または 3 つ左にシフトされたレジスタのアドレスのメモリから符 号付きバイト[7:0] をロード LDRSB.W <Rxf>, [<Rn>, <Rm>{, LSL #<shift>}] PC アドレスに 12 ビット即値をオフセットしたメモリから符号付きバイトをロード LDRSB.W <Rxf>, [PC, #+/–<offset_12>] ベースレジスタのアドレス + 12 ビット即値をオフセットしたメモリから符号付きハ ーフワード[15:0] をロード LDRSH.W <Rxf>, [<Rn>, #<offset_12>] ポストインデクスで、ベースレジスタのアドレスを 8 ビット即値でオフセットして、符 号付きハーフワード[15:0] をロード LDRSH.W <Rxf>. [<Rn>], #+/-<offset_8> プレインデクスで、ベースレジスタのアドレスに 8 ビット即値でオフセットして、符 号付きハーフワード[15:0] をロード LDRSH.W <Rxf>, [<Rn>, #<+/– <offset_8>]! 位置が 0、1、2、または 3 つ左にシフトされたレジスタのアドレスからメモリ符号 付きハーフワード[15:0] をロード LDRSH.W <Rxf>, [<Rn>, <Rm>{, LSL #<shift>}] PC アドレスを 12 ビット即値でオフセットしたメモリから符号付きハーフワードをロ ード LDRSH.W <Rxf>, [PC, #+/–<offset_12>] レジスタの数値によりレジスタ値を論理左シフト LSL{S}.W <Rd>, <Rn>, <Rm> レジスタの数値によりレジスタ値を論理右シフト LSR{S}.W <Rd>, <Rn>, <Rm> 2 つの符号付きまたは符号なしレジスタ値を乗算し、下位 32 ビットをレジスタの 値に加算(積和) MLA.W <Rd>, <Rn>, <Rm>, <Racc> 2 つの符号付きまたは符号なしレジスタ値を乗算し、下位 32 ビットをレジスタの 値から減算 MLS.W <Rd>, <Rn>, <Rm>, <Racc> シフトしたレジスタの値をレジスタに移動 MOV{S}.W <Rd>, #<modify_constant(immed_12)> MOV{S}.W <Rd>, <Rm>{, <shift>} 16 ビット即値をレジスタの上位ハーフワード[31:16] に移動 MOVT.W <Rd>, #<immed_16> 16 ビット即値をレジスタの下位ハーフワード[15:0] に移動し、上位ハーフワード [31:16] をクリア MOVW.W <Rd>, #<immed_16> 12 ビット即値をレジスタに移動 ステータスレジスタからレジスタに移動 MRS<c> <Rd>, <psr> ステータスレジスタに移動 MSR<c> <psr>_<fields>,<Rn> 2 つの符号付きまたは符号なしレジスタ値を乗算 MUL.W <Rd>, <Rn>, <Rm> 無操作 NOP.W レジスタの値と 12 ビット即値の NOT とを論理和 レジスタの値とシフトしたレジスタの値の NOT とを論理和 ORN{S}.W <Rd>, <Rn>, #<modify_constant(immed_12)> ORN[S}.W <Rd>, <Rn>, <Rm>{, <shift>} レジスタの値と 12 ビット即値を論理和 ORR{S}.W <Rd>, <Rn>, #<modify_constant(immed_12)> レジスタの値とシフトしたレジスタの値を論理和 ORR{S}.W <Rd>, <Rn>, <Rm>{, <shift>} ビットの順序を反転 RBIT.W <Rd>, <Rm> ワード中のバイト順を反転 REV.W <Rd>, <Rm> 各ハーフワード中のバイト順をそれぞれ反転 REV16.W <Rd>, <Rn> 下位ハーフワードのバイト順を反転して、符号拡張 REVSH.W <Rd>, <Rn> レジスタ内の数により、右ローテート ROR{S}.W <Rd>, <Rn>, <Rm> 拡張付き右ローテート RRX{S}.W <Rd>, <Rm> レジスタの値を 12 ビット即値から減算 RSB{S}.W <Rd>, <Rn>, #<modify_constant(immed_12)> RSB{S}.W <Rd>, <Rn>, <Rm>{, <shift>} レジスタの値をシフトしたレジスタの値から減算 シフトしたレジスタの値と C ビットをレジスタの値から減算 SBC{S}.W <Rd>, <Rn>, #<modify_constant(immed_12)> SBC{S}.W <Rd>, <Rn>, <Rm>{, <shift>} 選択されたビットをレジスタにコピーし、符号拡張 SBFX.W <Rd>, <Rn>, #<lsb>, #<width> 符号付き除算 SDIV<c> <Rd>,<Rn>,<Rm> イベント送信 SEV<c> 符号付きワードを乗算して、符号拡張された値を、一対のレジスタ値に累算 SMLAL.W <RdLo>, <RdHi>, <Rn>, <Rm> 2 つの符号付きレジスタ値を乗算 SMULL.W <RdLo>, <RdHi>, <Rn>, <Rm> 符号付き飽和 複数レジスタのワードを連続メモリ位置へストア SSAT.W <c> <Rd>, #<imm>, <Rn>{, <shift>} STM{IA|DB}.W <Rn>{!}, <registers> レジスタのアドレス + 12 ビット即値のオフセットに、レジスタのワードをストア STR.W <Rxf>, [<Rn>, #<offset_12>] ポストインデクスで、レジスタのアドレス + 8 ビット即値のオフセットに、レジスタ のワードをストア STR.W <Rxf>, [<Rn>], #+/–<offset_8> 位置が 0、1、2、または 3 つシフトされたレジスタのアドレスに、レジスタのワード をストア STR.W <Rxf>, [<Rn>, <Rm>{, LSL #<shift>}] プレインデクスまたはポストインデクスで、レジスタのアドレス + 8 ビット即値の オフセットに、レジスタのワードをストア STR.W <Rxf>, [<Rn>, #+/-<offset_8>]{!} STRT.W <Rxf>, [<Rn>, #<offset_8>] プレインデクスで、レジスタのアドレスを 8 ビット即値でオフセットして、レジスタの バイト[7:0] をストア STRB{T}.W <Rxf>, [<Rn>, #+/– <offset_8>]{!} レジスタのアドレス + 12 ビット即値のオフセットに、レジスタのバイト[7:0] をスト ア STRB.W <Rxf>, [<Rn>, #<offset_12>] ポストインデクスで、レジスタのアドレスを 8 ビット即値でオフセットして、レジスタ のバイト[7:0] をストア STRB.W <Rxf>, [<Rn>], #+/–<offset_8> 位置が 0、1、2、または 3 つシフトされたレジスタのアドレスに、レジスタのバイト [7:0] をストア STRB.W <Rxf>, [<Rn>, <Rm>{, LSL #<shift>}] 12 ビット即値と C ビットをレジスタの値から減算 ダブルワードをプレインデクスでストア ダブルワードをポストインデクスでストア 排他レジスタストアは、ベースレジスタの値と即値オフセットからアドレスを計算 し、実行中のプロセッサがアドレス指定されたメモリに対する排他アクセスを持っ ている場合、ワードをレジスタからメモリにストア STRD.W <Rxf>, <Rxf2>, [<Rn>, #+/– <offset_8> * 4]{!} STRD.W <Rxf>, <Rxf2>, [<Rn>, #+/– <offset_8> * 4] STREX <c> <Rd>,<Rt>,[<Rn>{,#<imm>}] 排他レジスタストア バイトは、ベースレジスタの値からアドレスを導出し、実行中 のプロセッサがアドレス指定されたメモリに対する排他アクセスを持っている場 合、バイトをレジスタからメモリにストア STREXB <c> <Rd>,<Rt>,[<Rn>] 排他レジスタストア ハーフワードは、ベースレジスタの値からアドレスを導出し、 実行中のプロセッサがアドレス指定されたメモリに対する排他アクセスを持って いる場合、ハーフワードをレジスタからメモリにストア STREXH <c> <Rd>,<Rt>,[<Rn>] レジスタのアドレス + 12 ビット即値のオフセットに、レジスタのハーフワード [15:0] をストア STRH.W <Rxf>, [<Rn>, #<offset_12>] 位置が 0、1、2、または 3 つシフトされたレジスタのアドレスに、レジスタのハーフ ワード[15:0] をストア STRH.W <Rxf>, [<Rn>, <Rm>{, LSL #<shift>}] プレインデクスで、レジスタのアドレスを 8 ビット即値でオフセットして、レジスタの ハーフワード[15:0] をストア STRH{T}.W <Rxf>, [<Rn>, #+/– <offset_8>]{!} ポストインデクスで、レジスタのアドレスを 8 ビット即値でオフセットして、レジスタ のハーフワード[15:0] をストア STRH.W <Rxf>, [<Rn>], #+/–<offset_8> シフトしたレジスタの値をレジスタの値から減算 SUB{S}.W <Rd>, <Rn>, #<modify_constant(immed_12)> SUB{S}.W <Rd>, <Rn>, <Rm>{, <shift>} 12 ビット即値をレジスタの値から減算 SUBW.W <Rd>, <Rn>, #<immed_12> バイトを 32 ビットに符号拡張 SXTB.W <Rd>, <Rm>{, <rotation>} ハーフワードを 32 ビットに符号拡張 SXTH.W <Rd>, <Rm>{, <rotation>} バイトでテーブル分岐 TBB [<Rn>, <Rm>] 12 ビット即値をレジスタの値から減算 ハーフワードでテーブル分岐 TBH [<Rn>, <Rm>, LSL #1] レジスタの値と 12 ビット即値で排他的論理和 TEQ.W <Rn>, #<modify_constant(immed_12)> TEQ.W <Rn>, <Rm>{, <shift} レジスタの値とシフトされたレジスタの値で排他的論理和 レジスタの値とシフトしたレジスタの値で論理積 TST.W <Rn>, #<modify_constant(immed_12)> TST.W <Rn>, <Rm>{, <shift>} レジスタの値のビットフィールドをレジスタにコピーし、32 ビットにゼロ拡張 UBFX.W <Rd>, <Rn>, #<lsb>, #<width> レジスタの値と 12 ビット即値で論理積 符号なし除算 UDIV<c> <Rd>,<Rn>,<Rm> 2 つの符号なしレジスタ値を乗算して、一対のレジスタ値に累算 UMLAL.W <RdLo>, <RdHi>, <Rn>, <Rm> 2 つの符号なしレジスタ値を乗算 UMULL.W <RdLo>, <RdHi>, <Rn>, <Rm> 符号なし飽和 USAT <c> <Rd>, #<imm>, <Rn>{, <shift>} 符号なしバイトをレジスタにコピーして、32 ビットにゼロ拡張 UXTB.W <Rd>, <Rm>{, <rotation>} 符号なしハーフワードをレジスタにコピーして、32 ビットにゼロ拡張 UXTH.W <Rd>, <Rm>{, <rotation>} イベント待ち WFE.W 割り込み待ち WFI.W 2.2.2 シリアル・ワイヤおよび JTAG デバッグ Texas Instruments では、ARM SW-DP と JTAG-DP を、ARM CoreSight™に準拠したシリアル・ワイヤ JTAG デバッ グ・ポート(SWJ-DP)インターフェイスを採用しています。SWJ-DP インターフェイスでは SWD デバッグ・ポートと JTAG デバッグ・ポートをひとつのモジュールとして統合します。SWJ-DP の詳細については、CoreSight™ Design Kit Technical Reference Manual を参照してください。 2.2.3 エンベデッド・トレース・マクロセル (ETM) ETMは、Stellaris®デバイスには実装されていません。そのため、ARM® Cortex™-M3 Technical Reference Manual の15章と16章は無視してもかまいません。 2.2.4 トレース・ポート・インターフェイス・ユニット(TPIU) TPIUは、ITMからCortex-M3のトレース・データと、オフチップのトレース・ポート・アナライザ間のブリッジとして機能 します。。Stellaris ®のデバイスでは、TPIUを図2-2に示すように実装しています。この実装は、 ARM® Cortex™-M3 Technical Reference Manualで説明されているETM以外のバージョンと似ていますが、SWJ-DP が 提供しているのはTPIU用のシリアル・ワイヤ・ビューア(SWV)出力形式のみです。 図 2-2. TPIU のブロック図 2.2.5 ROM テーブル デフォルトのROMテーブルが、ARM® Cortex™-M3 Technical Reference Manualで説明されている通りに実装さ れています。 2.2.6 メモリ保護ユニット(MPU) メモリ保護ユニット(MPU: Memory Protection Unit)は、LM3S9B96コントローラに組み込まれており、標準的な ARMv7 Protected Memory System Architecture (PMSA) モデルに対応しています。MPUでは、保護領域のオー バーラップ、アクセス許可、システムへのメモリ属性のエクスポートにより、保護領域の完全なサポートを提供してい ます。 2.2.7 ネスト型ベクタ割り込みコントローラ(NVIC) ネスト型ベクタ割り込みコントローラ(NVIC)は、 ■ 短いレイテンシで例外処理と割り込み処理 ■ 消費電力を制御 ■ システム制御レジスタの管理 NVICとプロセッサ・コアのインターフェイスは非常に密接に関連しているため、短いレイテンシでの割り込み処理や、 後着割り込みの効率的な処理が可能になっています。NVICでは割り込みのテールチェーンを実現するために、スタ ックされた(ネストされた)割り込みの情報を保持します。 NVICへの完全なアクセスは特権モードからのみ可能です、構成制御レジスタ(ARM® Cortex™-M3 Technical Reference Manualを参照)をイネーブルにすることにより、ユーザーモードで割り込みを保留にすることが可能です。 それ以外のユーザーモード・アクセスでは、バス障害が発生します。 すべてのNVICレジスタには指定のない限り、バイト、ハーフワード、ワードを使用してアクセスできます。 2.2.7.1 割り込み ARM® Cortex™-M3 Technical Reference Manual では、割り込みの最大数と優先度を説明しています。 LM3S9B96マイクロコントローラでは、8段階の優先度レベルを使用して、53の割り込みをサポートしています。 ペリフェラル割り込みに加え、システムはノンマスカブル割り込み(NMI)も提供しています。NMIは通常、割り込みハ ンドラを即時に実行することが必須要件となる、安全を最重視するアプリケーションで使用されます。NMIは、外部信 号として扱い、外部回路から生成する必要があります。NMIはメインオシレータの検証回路の一部として 内部的に も使用されます。 ノンマスカブル割り込みの詳細については、page 107の“Non-Maskable Interrupt”に記載されています。 2.2.8 システム・タイマ(SysTick) Cortex-M3には、組み込みシステム・タイマSysTickが含まれています。SysTickは、シンプルな24ビットの、書き込み でクリアされる、デクリメント方式のラップ・オン・ゼロ・カウンタで、柔軟な制御メカニズムとともに提供します。このカ ウンタは、次に例として記載する数種類の用途で利用できます。 ■ プログラム可能な周期(例: 100 Hz)でSysTick ルーチンを呼び出すRTOSのTick生成タイマ ■ システム・クロックを使用する高速アラーム・タイマ ■ 可変レートのアラームまたは信号タイマ — 持続時間は、使用される基準クロックとカウンタのダイナミック・レン ジに依存 ■ 終了時間や実行時間の測定に使用するシンプルなカウンタ ■ 時間内に処理を終了した/しないを基準とした内部クロック・ソースの制御。ダイナミック・クロック管理を制御する ループの一部として、制御ステータスレジスタのCOUNTFLAGビット・フィールドは、設定された持続時間以内にアク ションが完了したがどうかの判定に使用することができます。 2.2.8.1 機能の説明 タイマは次の3つのレジスタから構成されます。 ■ SysTick制御ステータスレジスタ - クロック設定、カウンタイネーブル、SysTick割り込みイネーブル、およびカウ ンタのステータスを判定するための、制御とステータスのカウンタです。 ■ SysTickリロード値レジスタ - カウンタのラップ値を提供するためのカウンタのリロード値です。 ■ SysTickカレント値レジスタ - カウンタの現在値です。 4番目のレジスタであるSysTick較正値 レジスタは、Stellaris®デバイスには実装されていません。 イネーブルにされると、タイマはリロードされた値からゼロまでのカウントダウンをクロックに基づいて行い、次のクロ ック・エッジでSysTickリロード値レジスタの値にリロード(ラップ)した後、後続のクロックでデクリメントします。SysTick リロード値レジスタの値をクリアにすると、次の一巡(ラップ)でカウンタがディセーブルになります。カウンタがゼロに 達すると、COUNTFLAG ステータスのビットがセットされます。COUNTFLAG ビットは、読み出しでクリアになりま す。 SysTickカレント値レジスタに書き込みを行うと、レジスタ値とCOUNTFLAGステータス・ビットはクリアされます。 書き込みでは、SysTick例外ロジックはトリガされません。レジスタ値の読み出しは、レジスタがアクセスされた時のレ ジスタ値(カレント値)です。 コアがデバッグ・ステート(停止)の場合は、カウンタはデクリメントしません。タイマは基準クロックに関連してクロッキ ングされますが、基準クロックのソースはコア・クロックか外部クロックのどちらかになります。 2.2.8.2 SysTick 制御ステータス・レジスタ SysTick機能をイネーブルにするには、SysTick制御およびステータスレジスタを使用します。リセット値は 0x0000.0000です。 ビット / フィールド 名称 タイプ リセット 説明 31:17 予約 RO 0x000 予約ビットはソフトウェアで使用しないでください。将来の製品 との互換性のため、予約ビットの値はリード・モディファイ・ライト 処理から保護する必要があります。 16 COUNTFLAG R/W 0 カウント・フラグ このレジスタを最後に読み出した後、タイマが 0 までカウントし たことを通知するために、タイマはこのビットをセットします。 このビットは、レジスタを読み出すことでクリアされます。 DAP を使用してデバッガに読み出された場合は、AHB-AP 制 御レジスタの MasterType ビットがクリアされた場合のみ、この ビットがクリアされます。それ以外の場合には、COUNTFLAG ビットがデバッガの読み出しにより変更されることはありま せん。 15:3 予約 RO 0x000 2 CLKSOURCE R/W 0 予約ビットはソフトウェアで使用しないでください。将来の製品 との互換性のため、予約ビットの値はリード・モディファイ・ライト 処理から保護する必要があります。 クロック・ソース 値 説明 0 外部基準クロック。(Stellaris ®マイクロコントローラ 用には実装されていません) 1 コア・クロック 外部基準クロックはサポートされていないため、このビットは SysTick を動作させるためにセットする必要があります。 1 TICKINT R/W 0 Tick 割り込み セットすると、SysTick が 0 までカウントを行った時点で、NVIC に対しての割り込みを発生させます。 クリアすると、割り込みの生成がディセーブルになります。 ソフ トウェアでは COUNTFLAG を使用して、カウンタが 0 に達した かどうかを判定できます。 0 ENABLE R/W 0 イネーブル セットすると、SysTick をイネーブルにして、マルチショット方式 で動作するようにします。つまり、カウンタがリロード値をロード してカウントダウンを開始するようにします。0 に達すると COUNTFLAG ビットがセットされ、TICKINT でイネーブルにさ れていれば割り込みが生成されます。次にカウンタではリロー ド値を再度ロードして、カウントを開始します。 このビットがクリアされると、カウンタはディセーブルになり ます。 2.2.8.3 SysTick リロード値レジスタ SysTickリロード値レジスタは、カウンタが0に達した時点でSysTick現在値レジスタにロードされる開始値を指定しま す。開始値の範囲は1~0x00FF.FFFFです。開始値を0にすることも可能ですが、SysTick割り込みとCOUNTFLAG は1から0までのカウントの時にアクティベートされるため、開始値を0にしても無効となります。 SysTickは、何度も反復され、N+1クロック・パルスごとに動作するマルチショット・タイマとして構成することも可能で す。ここで、Nは1~0x00FF.FFFFの任意の値です。例えば、100クロック・パルスごとにTick割り込みが要求される 場合は、99をRELOADフィールドに書き込む必要があります。 SysTickをシングルショット・タイマとして構成する場合は、Tick割り込みが発生するごとに新しい値が書き込まれます。 また、実際のカウントダウン値を書き込む必要があります。例えば、Tickが次に要求されるのが400クロック・パルス 後である場合は、RELOADフィールドに400を書き込む必要があります。 ビット / フィールド 名称 タイプ リセット 31:24 予約 RO 0x00 23:0 RELOAD R/W - 説明 予約ビットの値はソフトウェアで使用しないでください。将来の 製品との互換性のため、予約ビットの値はリード・モディファ イ・ライト処理から保護する必要があります。 リロード値 カウンタが 0 に達した時点で SysTick 現在値レジスタにロード される値です。 2.2.8.4 SysTick 現在値レジスタ SysTick現在値レジスタには、カウンタの現在値が入っています。 ビット / フィールド 名称 タイプ リセット 31:24 予約 RO 0x00 23:0 CURRENT W1C - 説明 予約ビットの値はソフトウェアで使用しないでください。将来の 製品との互換性のため、予約ビットの値はリード・モディファ イ・ライト処理から保護する必要があります。 現在値 このフィールドには、レジスタがアクセスされた時点の現在値 が入っています。リード・モディファイ・ライト保護が提供されて いないため、変更する場合は注意してください。 このレジスタは書き込みでクリアされます。任意の値をレジスタ に書き込むと、レジスタが 0 にクリアされます。このレジスタをク リアすると、SysTick 制御およびステータスレジスタの COUNTFLAG ビットもクリアされます。 2.2.8.5 SysTick 較正値レジスタ SysTick 較正値レジスタは実装されていません。 メモリ・マップ 3 表 3-1 は、LM3S9B96 コントローラのメモリ・マップです。 メモリ・マップに示されている通り、このマニュアルでは、モジュールのベース・アドレスに関連する 16 進インクリメント としてレジスタ・アドレスが記載されています。 ARM® Cortex™-M3 Technical Reference Manual の 4 章 “Memory Map”も参照してください。 メモリ・マップ内では、予約空間に対して読み出しや書き込みを行うと、すべての予約空間がバス障害を返すことに 注意してください。 表 3-1. メモリ・マップ 開始 終了 説明 詳細な情報の 参照先 0x0000.0000 0x0003.FFFF オンチップ Flash 211 0x0004.0000 0x00FF.FFFF 予約 - 0x0100.0000 0x1FFF.FFFF ROM 用に予約 211 0x2000.0000 0x2001.7FFF ビッドバンド・オンチップ SRAM 211 0x2001.8000 0x21FF.FFFF 予約 - 0x2200.0000 0x222F.FFFF 0x2000.0000~0x200F.FFFF のビットバンド・エイリアス 211 0x2230.0000 0x3FFF.FFFF 予約 - メモリ FiRM ペリフェラル 0x4000.0000 0x4000.0FFF ウォッチドッグ・タイマ 0 484 0x4000.1000 0x4000.1FFF ウォッチドッグ・タイマ 1 484 0x4000.2000 0x4000.3FFF 予約 - 0x4000.4000 0x4000.4FFF GPIO ポート A 317 0x4000.5000 0x4000.5FFF GPIO ポート B 317 0x4000.6000 0x4000.6FFF GPIO ポート C 317 0x4000.7000 0x4000.7FFF GPIO ポート D 317 0x4000.8000 0x4000.8FFF SSI0 660 0x4000.9000 0x4000.9FFF SSI1 660 0x4000.A000 0x4000.BFFF 予約 - 0x4000.C000 0x4000.CFFF UART0 597 0x4000.D000 0x4000.DFFF UART1 597 0x4000.E000 0x4000.EFFF UART2 597 0x4000.F000 0x4001.FFFF 予約 - 0x4002.07FF I2C マスタ 0 703 ペリフェラル 0x4002.0000 0x4002.0800 0x4002.0FFF I2C スレーブ 0 2 716 0x4002.1000 0x4002.17FF I C マスタ 1 703 0x4002.1800 0x4002.1FFF I2C スレーブ 1 716 0x4002.2000 0x4002.3FFF 予約 - 0x4002.4000 0x4002.4FFF GPIO ポート E 317 0x4002.5000 0x4002.5FFF GPIO ポート F 317 0x4002.6000 0x4002.6FFF GPIO ポート G 317 0x4002.7000 0x4002.7FFF GPIO ポート H 317 0x4002.8000 0x4002.8FFF PWM 1041 0x4002.9000 0x4002.BFFF 予約 - 0x4002.C000 0x4002.CFFF QEI0 1110 0x4002.D000 0x4002.DFFF QEI1 1110 0x4002.E000 0x4002.FFFF 予約 - 0x4003.0000 0x4003.0FFF タイマ 0 449 0x4003.1000 0x4003.1FFF タイマ 1 449 0x4003.2000 0x4003.2FFF タイマ 2 449 0x4003.3000 0x4003.3FFF タイマ 3 449 0x4003.4000 0x4003.7FFF 予約 - 0x4003.8000 0x4003.8FFF ADC0 526 0x4003.9000 0x4003.9FFF ADC1 526 0x4003.A000 0x4003.BFFF 予約 - 0x4003.C000 0x4003.CFFF アナログ・コンパレータ 1014 0x4003.D000 0x4003.DFFF GPIO ポート J 317 0x4003.E000 0x4003.FFFF 予約 - 0x4004.0000 0x4004.0FFF CAN0 コントローラ 782 0x4004.1000 0x4004.1FFF CAN1 コントローラ 782 0x4004.2000 0x4004.7FFF 予約 - 0x4004.8000 0x4004.8FFF Ethernet コントローラ 828 0x4004.9000 0x4004.FFFF 予約 - 0x4005.0000 0x4005.0FFF USB 902 0x4005.1000 0x4005.3FFF 予約 - 2 0x4005.4000 0x4005.4FFF I S0 737 0x4005.5000 0x4005.7FFF 予約 - 0x4005.8000 0x4005.8FFF GPIO ポート A (AHB アパーチャ) 317 0x4005.9000 0x4005.9FFF GPIO ポート B (AHB アパーチャ) 317 0x4005.A000 0x4005.AFFF GPIO ポート C (AHB アパーチャ) 317 0x4005.B000 0x4005.BFFF GPIO ポート D (AHB アパーチャ) 317 0x4005.C000 0x4005.CFFF GPIO ポート E (AHB アパーチャ) 317 0x4005.D000 0x4005.DFFF GPIO ポート F (AHB アパーチャ) 317 0x4005.E000 0x4005.EFFF GPIO ポート G (AHB アパーチャ) 317 0x4005.F000 0x4005.FFFF GPIO ポート H (AHB アパーチャ) 317 0x4006.0000 0x4006.0FFF GPIO ポート J (AHB アパーチャ) 317 0x4006.1000 0x400C.FFFF 予約 - 0x400D.0000 0x400D.0FFF EPI0 389 0x400D.1000 0x400F.CFFF 予約 - 0x400F.D000 0x400F.DFFF Flash メモリ制御 217 0x400F.E000 0x400F.EFFF システム制御 118 0x400F.F000 0x400F.FFFF μDMA 267 0x4010.0000 0x41FF.FFFF 予約 - 0x4200.0000 0x43FF.FFFF 0x4000.0000~0x400F.FFFF のビットバンド・エイリアス - 0x4400.0000 0x5FFF.FFFF 予約 - 0x6000.0000 0xCFFF.FFFF EPI0 にマッピングされたペリフェラルと RAM - 0xD000.0000 0xDFFF.FFFF 予約 - 計装トレース・マクロセル (ITM) ARM® プライベート・ペリフェラル・バス 0xE000.0000 0xE000.0FFF Cortex™-M3 Technical Reference Manual 0xE000.1000 0xE000.1FFF データ・ウォッチポイント・アンド・トレース (DWT) ARM® Cortex™-M3 Technical Reference Manual 0xE000.2000 0xE000.2FFF フラッシュ・パッチ・アンド・ブレークポイント (FPB) ARM® Cortex™-M3 Technical Reference Manual 0xE000.3000 0xE000.DFFF 予約 - 0xE000.E000 0xE000.EFFF ネスト型ベクタ割り込みコントローラ(NVIC) ARM® Cortex™-M3 Technical Reference Manual 0xE000.F000 0xE003.FFFF 予約 - 0xE004.0000 0xE004.0FFF トレース・ポート・インターフェイス・ユニット(TPIU) ARM® Cortex™-M3 Technical Manual 0xE004.1000 0xFFFF.FFFF 予約 - Reference
© Copyright 2024 Paperzz