プロセッサについて
一般的に、プロセッサと言うと、演算部と制御部が一つにまとめられているものを指します。(人によって、プロセッサの定義は異なる場合がありますが…)
Cortex-M3も制御部と演算部を含んで、Cortex-M3プロセッサと呼んでいます。 Cortex-M3プロセッサの中に、演算部であるCortex-M3コアが含まれていますので、Cortex-M3プロセッサとCortex-M3コアの2層構造になっていると言えます。
Cortex-M3コア
Cortex-M3コアはいわゆるCPU部分になります。メイン回路は32ビットのALU(Arithmetic Logical Unit)です。この中にハードウエアの割り算回路と掛け算回路も含まれています。
下図には記載されていませんが、バレルシフタも搭載されていて、一度に多ビットのシフトもできるようになっています。演算回路の他には命令デコーダが含まれていて、命令インターフェースから取り込んだ命令を解読します。そして、これらを制御する制御回路があります。
割り込み回路NVICはCortex-M3コアには含まれていません。インターフェース回路だけを搭載していて、NVICの本体はCortex-M3コアの外側にあります。また、デバッグ用回路のETMもCortex-M3コアには含まれていません。これもインターフェース回路だけでCortex-M3コアの外に搭載されています。
その他の回路としては、データを出し入れするためのデータインタフェースがあります。
Cortex-M3プロセッサ
Cortex-M3プロセッサのメインはCortex-M3コアです。Cortex-M3コアと密接に関係しているのは統合ネスト型ベクタ割り込みコントローラ(NVIC)です。例外(割り込み、フォールト)処理を一手に引き受けています。
デバッグ用の回路は命令トレース用のETMとデータトレース用のシリアルワイヤビューア(SWV)が搭載されています。ETMはオプションですがSWVは標準装備です。
デバッグ回路に関してですが、Cortex-M3プロセッサ自身にはJTAG(Joint Test Action Group)は搭載されていません。Cortex-M3の外部に置かれていて、そのインターフェースはDAP(Debug Access Port)が担っています。
メモリプロテクトユニット(MPU)もオプションです。ユーザーが保護設定したメモリのエリアをアクセスするとフォールト処理を行います。MPUに関連したハードはデータウォッチポイントとFlashパッチです。
Cortex-M3プロセッサの中にバスマトリックスがあり、データのアクセスを容易にかつ高速に処理することができます。ビット単位のデータ処理を簡単に行えるのも、バスマトリックスのおかげです。バスマトリックスに付随した回路は、コードインターフェースとSRAM & 周辺インターフェースです。いずれもメモリアクセスの管理と制御を行います。
バレルシフタ
バレルシフタとは、一度に多ビットをシフトするハードウエアのことです。論理回路が大きくなりコストアップの原因になるので、昔のマイコンにはあまり搭載されていませんでしたが、プロセスが微細化された最近のマイコンには標準で搭載されているものが多くなってきました。英語の辞書を引くと、バレル(Barrel)は「樽」という意味が出てきますが、その他に「多量の」という意味があります。
こちらも是非
“もっと見る” Cortex-M編
SysTick、電力管理
SysTick機能を有効にするには、SysTick制御およびステータスレジスタを使用します。このレジスタのENABLEビットを1にすると、カウンタは動作をはじめます。つまり、カウンタにリロード値がロードされてから、カウントダウンが開始されます。
メモリマップ
Cortex-M3のメモリマップには、一般的なマイコンのメモリマップと若干異なる特徴があります。一般的なマイコンでは、メモリ領域を変更できるものもあります。しかし、Cortex-M3のメモリマップは定義されたメモリマップになっており、アドレス領域のマッピングは固定です。
ベクタテーブル
Cortex-M3のベクタテーブルは0番地から始まります。一般的なマイコンは、ベクタテーブルの最小アドレス部(0番地)にはリセットベクタが割り当てられていますが、Cortex-M3ではメインスタック(SP_main)の初期値が割り当てられています。