Cortex-A9の概要
Cortex-A9プロセッサはArmv7-Aアーキテクチャで、1コアから4コアまでのマルチコア構成が可能なプロセッサです。Cortex-A9でのプログラムフロートレース(PTM:Program Trace Macrocell)やパフォーマンス監視ユニットを使用して、プログラムの挙動を確認することができます。
Cortex-A9プロセッサはArmv7-Aアーキテクチャで、1コアから4コアまでのマルチコア構成が可能なプロセッサです。Cortex-A9でのプログラムフロートレース(PTM:Program Trace Macrocell)やパフォーマンス監視ユニットを使用して、プログラムの挙動を確認することができます。
SysTick機能を有効にするには、SysTick制御およびステータスレジスタを使用します。このレジスタのENABLEビットを1にすると、カウンタは動作をはじめます。つまり、カウンタにリロード値がロードされてから、カウントダウンが開始されます。
当初はArmプロセッサではない他のプロセッサを使用して組み込みシステムの開発をしていましたが、2002年頃に、Armプロセッサを初めて知りました。評価キットに搭載されているArm7TDMIにてプログラミングを始めた時です。Armプロセッサで驚いたのはアーキテクチャの違いでした。
Cortex-M3のメモリマップには、一般的なマイコンのメモリマップと若干異なる特徴があります。一般的なマイコンでは、メモリ領域を変更できるものもあります。しかし、Cortex-M3のメモリマップは定義されたメモリマップになっており、アドレス領域のマッピングは固定です。
Cortex-M3のベクタテーブルは0番地から始まります。一般的なマイコンは、ベクタテーブルの最小アドレス部(0番地)にはリセットベクタが割り当てられていますが、Cortex-M3ではメインスタック(SP_main)の初期値が割り当てられています。
割り込みは、タスクとは独立して実行される処理です。そこで、T-Kernelにおける割り込みの利用方法に加えて、実行時のコンテキストの違いから生じる動作の違い、割り込みハンドラの作成方法や動作の詳細を説明します。
NVIC(統合ネスト型ベクタ割り込みコントローラ)が持っている制御用レジスタを説明します。SysTick関係のレジスタもNVICレジスタに含まれますが、それらはSysTickの章で詳しく説明します。
今回は、タスク例外コード0のタスク例外の利用例を示します。例外コードが0以外のタスク例外については longjmp() などを用いて復帰処理なども行うことができ、これをあわせて利用することで柔軟な例外処理が可能となりますが、複雑なので本記事では省略します。
Cortex-M3では、各割り込みの優先順位をユーザーが変更することができます。それも8段階や16段階ではなく256段階で設定することが可能です。設定には、割り込み優先度レジスタを使います。