Cortex-M3プロセッサの概要
Cortex-M3プロセッサの機能概要を簡単に説明します。その後、各特徴毎に詳しく説明していきたいと思います。
Cortex-M3コアの特徴
Cortex-M3コアは、少ないゲート数、短い割り込みのオーバーヘッド、低コストのデバッグを特徴とする低電力コアです。高速な割り込み応答機能を要求する組み込み用途に向いています。
Thumb-2 命令セット
Cortex-M3コアではThumb-2 命令セット(16ビット長と32ビット長の混在命令)を採用しています。これは命令セット・アーキテクチャ(ISA)のサブセットで、16ビットおよび32ビットの基本Thumb-2ハーバードアーキテクチャ命令がすべて含まれますが、メディア、単一命令複数データ処理(SIMD)、デジタル信号処理(DSP)命令(Eバリアント)、Armシステムアクセスの部分は含まれていません(Cortex-M4では搭載)。そして、32ビットコードの性能と16ビットの高いコード密度の両方を提供します。(Arm7等のArm命令は使えません。)
ハーバードアーキテクチャ
ハーバードアーキテクチャを採用することにより、命令バスとデータバスが独立した構成になり、メモリのアクセスが効率的に行えます。たとえば、命令フェッチとデータ保存が同時に実行可能です。
ベクタテーブル
ベクタテーブルは命令方式ではなくアドレス方式です。ジャンプ先アドレスを格納すれば良いだけの簡単な方式です。
完全C言語対応
完全C言語対応しています。例外処理のリセット、割り込みもC言語で記述可能です。
3段パイプライン
フェッチ、デコード、実行の3段パイプラインです。
統合システムタイマ (SysTick)
リアルタイムOS、スケジュールタスクの為の統合システムタイマ(SysTick)を搭載しています。タイムベース管理が容易にできます。
ハードウエア除算(割り算器)
ハードウェア除算命令のSDIVおよびUDIV(Thumb-2 命令、符号付、符号なし除算)があります。2から12サイクルで実行されます。サイクル数は、被除数と除数に依存し、被除数と除数がほぼ同じサイズの場合、除算は少ないサイクル数で終了します。また、除算は割り込み等により中断されます。その場合、演算結果は一旦破棄され、再計算されます。
統合バスマトリック・バスインタフェース
統合バスマトリックを採用したため、バスアービター、ビット操作が容易なビットバンディング、書き込みデータをバッファするためのライトバッファ等の特徴があります。
シングルサイクル乗算
結果が32ビットの掛け算は1サイクルで実行されますが、64ビットの結果の掛け算は3~7サイクルかかります。ソースの値に依存して演算を早く終わらせる仕組みが採用されています。また、割り算と同じように掛け算も 実行中に割り込みが発生した場合、中断されます。
Source | Destination | Cycles |
---|---|---|
16b x 16b | 32b | 1 |
32b x 16b | 32b | 1 |
32b x 32b | 32b | 1 |
32b x 32b | 64b | 3-7 |
ネスト型ベクタ割り込みコントローラ(NVIC)
ネスト型ベクタ割り込みコントローラ(NVIC)が密接にプロセッサに統合されているので、短いオーバーヘッドの割り込み処理を実現しています。
外部割り込み(マイコンの外部割り込みではなくCPUコアとして)は、1~239要因が可能です。優先度は、3~8ビット(最大256レベル)の間で選択可能です。割り込みの優先度をダイナミックに設定可能ですので、割り込みサービスルーチンの中でも、優先順位を変更して、割り込みの実行順序を制御することができます。
さらに、優先度のグループ化が可能です。これにより、優先して実行される割り込みレベルと実行されない割り込みのレベルを選択できるようになります。割り込み処理では、割り込みと割り込みの間における状態の保存と復元(PUSH&POP)のオーバヘッド無しで、連続した割り込み処理が可能になります。自動的にプロセッサ状態が割り込みエントリ時に保存され、割り込み復帰時に復元されるため、命令のオーバーヘッドがありません。割り込みのオーバーヘッドを削減するために、中断可能で、割り込みから復帰後に継続可能な複数転送命令(LDM/STM)、PUSH/POPを持っています。
メモリ保護ユニット(MPU)
メモリ保護に使用されるオプションのMPUです。8つのメモリ領域をサポートします。サブ領域無効化(SRD)(Sub Region Disable)によるメモリ領域の効率的な利用が可能です。バックグラウンド領域の許可により、デフォルトでのメモリマップ属性を与えることが可能です。
低コストのデバッグソリューション
Cortex-M3のデバッキング・ハードウエアは、CoreSightに基づいて、下表の機能が搭載されています。CoreSightの詳細についてはArmのWebサイトをご参照ください
機能 | CoreSightコンポーネント | Cortex-M0(参考) | Cortex-M3 |
---|---|---|---|
デバッグ | デバッグ インタフェース テクノロジ 少ない配線で高機能なデバッグを可能にしたシリアルワイヤ デバッグポート(SW-DP)(Serial Wire Debug Port)および、シリアルワイヤJTAGデバッグポート(SWJ-DP)(Serial Wire JTAG Debug Port)の、一方または両方によるデバッグアクセスが可能です。 | JTAGまたはシリアル ワイヤ デバッグ(Cortex-M0 DAPを使用)デュアル モードには完全なCoreSight DAPが必要 | デュアルJTAG & SWDのサポート(CoreSight SWJ-DPを使用) |
コード実行中のメモリ アクセス デバッグアクセスは、システムのすべてのメモリとレジスタへアクセス可能です。アクセスは、コアの実行中、ホールト中、またはリセット中のすべての場合に可能です。レジスタの中にはCortex-M3のレジスタ バンクも含みます。 | 有り | 有り | |
ブレークポイント フラッシュパッチおよびブレークポイント(FPB)(Flash Patch and Breakpoint)ユニットにより、ブレークポイントおよびコードへのパッチを実現しました。 | 4 | 6個の命令アドレス + 2個のリテラル アドレス | |
ウォッチポイント データウォッチポイントおよびトレース(DWT)(Data Watchpoint and Trace)ユニットにより、ウォッチポイント、データトレース、およびシステムプロファイリングを実現しました。 | 2 | 4 | |
BKPT命令 | 有り | 有り | |
トレース | ETM命令トレース エンベデッドトレース マクロセル(ETM)によるリアルタイムな命令トレースが可能です。 | — | ○(オプション) |
データ ウォッチポイント & トレース(DWT) | — | ○(オプション) | |
計装トレース マクロセル(ITM) ITM(Instrumentation Trace Macrocell)により、printf方式のデバッグをサポートしています。 | — | ○(オプション) | |
AHBトレース マクロセルへのインタフェース | — | ○(オプション) | |
シリアル ワイヤ ビューア | — | ○(トレースがあるとき) | |
トレース ポート トレースポート インタフェースユニット(TPIU)が、トレースポート アナライザ(TPA)(Trace Port Analyzer)へのブリッジとなります。 | — | M3 TPIUの場合、1~4ビット。 より大型のトレース ポートにはCoreSight TPIUを使用可能 |
その他の特徴
- レジスタのうち、スタックポインタ(SP)のみがバンク切替え方式
- ハンドラモードとスレッドモード
- Thumb状態とデバッグ状態
- エンディアンは、Armv6アーキテクチャ方式のBE8/LE をサポートしています
- メモリアクセスは、Armv6のアンアラインドアクセスをサポートしています
こちらも是非
“もっと見る” Cortex-M編
SysTick、電力管理
SysTick機能を有効にするには、SysTick制御およびステータスレジスタを使用します。このレジスタのENABLEビットを1にすると、カウンタは動作をはじめます。つまり、カウンタにリロード値がロードされてから、カウントダウンが開始されます。
メモリマップ
Cortex-M3のメモリマップには、一般的なマイコンのメモリマップと若干異なる特徴があります。一般的なマイコンでは、メモリ領域を変更できるものもあります。しかし、Cortex-M3のメモリマップは定義されたメモリマップになっており、アドレス領域のマッピングは固定です。
ベクタテーブル
Cortex-M3のベクタテーブルは0番地から始まります。一般的なマイコンは、ベクタテーブルの最小アドレス部(0番地)にはリセットベクタが割り当てられていますが、Cortex-M3ではメインスタック(SP_main)の初期値が割り当てられています。