k-ogawa2025’s ブログ

メカトロ制御回路設計に関する情報発信ブログ

2.2 動作確認用プログラムLED1の説明

本項では動作の確認に使用するプログラムLED1を説明します。ターゲットのCPUはArm製Cortex-M33で、プログラム全体をアセンブリ言語で記述して簡単な構造にしています。

動作はマイコン開発ボード:NUCLEO-H503RBのLD2を1秒周期で点滅(0.5秒点灯、0.5秒消灯)します(いわゆるLチカです)。アセンブリ言語ソースコードは「4.3 ソースファイル作成」に記載しています。

下図のフローチャートを使って、プログラムの内容を簡単に書きます。

リセットが解除されると、リセットハンドラーを実行します。

リセットハンドラーは、スタックリミットレジスタにスタックの下限アドレスを設定します。スタックリミットチェック機能をCPUが持っているので[1]、下限を超えてスタックを使う可能性はないですが一応設定しています。その後、メイン処理へ分岐します。

メイン処理は、まず周辺機能初期設定サブルーチンを呼びます。周辺機能初期設定サブルーチンではLD2を制御しているPA5ポートが属しているGPIOAモジュールへのクロック供給を有効に設定し、PA5ポートのモードを汎用出力に設定します。設定が終わるとメイン処理に戻ります。

周辺機能初期設定サブルーチンから戻ってきたメイン処理は、「LD2点灯 → 500ms遅延サブルーチンを呼ぶ → LD2消灯 → 500ms遅延サブルーチンを呼ぶ」を繰り返します。

500ms遅延サブルーチンは、カウンタ値を1減算する命令を5,333,333回繰り返して戻ります。この繰り返しに500msかかり、LD2を点滅させる周期(0.5秒点灯、0.5秒消灯)になります。

ダミーハンドラーは、リセットと割り込みを除いた例外が発生したときに実行して、無限ループになります。万が一、ハードやソフトの異常をCPUが検知した場合に備えて用意しています。

図 2.2-1 動作確認用プログラムLED1 フローチャート1/2

図 2.2-2 動作確認用プログラムLED1 フローチャート2/2

Arm製Cortex-M33におけるベクターテーブルでの例外ベクターの仕様と[2]、動作確認用プログラムLED1での値を下表に示します。

Arm製Cortex-M33の例外ベクターの仕様と値
Cortex-M33の仕様 動作確認用プログラムLED1での
例外ベクターの値、
スタックポインター初期値の値
例外
番号
IRQ
番号
ベクター
オフセット
例外ベクター
- - 0x000 スタックポインター初期値 0x2000 8000(SRAM2の最上位アドレス+1)
1 - 0x004 リセット リセットハンドラーの先頭番地
2 -14 0x008 NMI ダミーハンドラーの先頭番地
3 -13 0x00C HardFault ダミーハンドラーの先頭番地
4 -12 0x010 MemManage ダミーハンドラーの先頭番地
5 -11 0x014 BusFault ダミーハンドラーの先頭番地
6 -10 0x018 UsageFault ダミーハンドラーの先頭番地
予約 設定なし
11 -5 0x02C SVCall ダミーハンドラーの先頭番地
12 -4 0x030 DebugMonitor ダミーハンドラーの先頭番地
予約 設定なし
14 -2 0x038 PendSV ダミーハンドラーの先頭番地
15 -1 0x03C SysTick ダミーハンドラーの先頭番地
各種割り込み 設定なし
プログラムLED1の補足

スタックポインター(SP)の初期値設定はリセットハンドラーで行うことが多いと思うのですが、プログラムLED1では命令を使った初期値設定をしていません。Arm製Cortex-M33ではスタックポインター(SP)のリセット後の初期値としてベクターテーブルのベクターオフセット0x000の値がセットされます[3]。ですからベクターオフセット0x000に0x2000 8000(SRAM2の最上位アドレス+1)を置いています。他のCPUのように命令を使って設定する必要はありません。

次項よりプログラムLED1を使ってCPUの動作を確認します。


[1] Arm Limited.Arm® Cortex®-M33 Devices Generic User Guide.Issue 0100-06.1 August 2024,2.1.3.3 Stack limit registers.p.22.

[2] Arm Limited.Arm® Cortex®-M33 Devices Generic User Guide.Issue 0100-06.1 August 2024,2.3.4 Vector table.p.51-52.

[3] Arm Limited.Arm®v8-M Architecture Reference Manual.Version B.y.2024/Aug/09,B3.30 Vector tables.p.141.

メカトロ制御向け CPUの構造と動作