コアレジスタ、割り込みと例外処理
Cortex-M7でもCortex-M3/M4と同じように、統合ネスト型ベクタ割り込みコントローラ(NVIC: Nested Vectored Interrupt Controller)を搭載しており、割り込み処理は少ないオーバーヘッドと割り込み性能の最適化が行われています。
Cortex-M7でもCortex-M3/M4と同じように、統合ネスト型ベクタ割り込みコントローラ(NVIC: Nested Vectored Interrupt Controller)を搭載しており、割り込み処理は少ないオーバーヘッドと割り込み性能の最適化が行われています。
デュアルのスーパースカラなので、ALUが2つあります。コードを64bitでフェッチしてきて、2命令を同時にデコードして、デコードした結果を、2つのALUに発行します。そして同時実行します。そのため、前述した様にCoreMarkもDMIPSもCortex-M4の2倍近い演算能力になっています。
Cortex-M7は性能が極端に向上され、パイプラインが6段になり、さらにデュアルのスーパースカラ構造です。CoreMark/MHz がCortex-M4では3.4だったものがCortex-M7では5.04に向上しています、また、DMIPS/MHzも1.25から2.14に向上しています。
リセット例外からmain()関数を呼び出すまでの初期化は、ユーザが作成する部分とArmコンパイラが実行する部分に分けることができます。コードのコピーや初期化変数/未初期化変数の初期化は、リンカのメモリ配置設定を処理系ライブラリが実行します。
PMUに関連するレジスタは、ユーザモードでのアクセスは禁止されていますので、PMUSERENR(ユーザイネーブルレジスタ)を特権モードでユーザモードアクセス許可を設定します。PMUSERENRについては、 後述の該当項目を参照ください。
TrustZoneはCortex-Aシリーズの拡張機能で、大規模OSやアプリケーションが動作するノーマルワールドとセキュリティ関連が動作するセキュアワールドを導入しています。TrustZoneでは、ノーマルワールドメモリ空間とセキュアワールドメモリ空間の分離が可能です。
NEONコプロセッサは、リセット時に無効化されるため、初期化処理でアクセス権設定と稼働設定が必要です。NEONコプロセッサが無効状態でNEON命令を実行した場合、「未定義命令例外」が発生します。
プロセッサ機能のキャッシュやMMUなどの設定はコプロセッサで行うため、コプロセッサレジスタを理解しなければなりません。コプロセッサは、メモリ空間に配置されていないため、専用命令を使用し、読み込みおよび書き込みを行います。
データキャッシュはMMUを有効にしないと使用できません。MMUを搭載するArmプロセッサを使用する場合、メモリタイプ・キャッシュ・アクセス権の設定はMMUで行いますので、設定を理解しなければなりません。