サブコアでプログラム実行

前回はe2 studioのインストールからサンプルプログラムをビルドするところまで説明しました。今回はビルドしたファイルをRZ/G2Lのボードにダウンロードして実行確認を行います。ボードにプログラムをダウンロードするにはデバッガが必要ですが、ここではコンピューテックスのPALMiCE4を使用します。

ボードとPALMiCE4の接続

RZ/G2L Evaluation Board KitとPALMiCE4を接続します。PALMiCE4のケーブルをボードに用意されているJTAGコネクタに接続します。すべて接続するとこんな感じになります。

Workbench

ボードに接続されているUSBケーブルは、白い方が電源で、もう一つの黒い方がシリアルターミナルです。

CSIDEを起動する

次にデバッガソフトCSIDEを起動します。ここからはCSIDEがインストールされている前提で話を進めますのでご了承ください。詳しくは以下のURLより「RZ/G2L Evaluation Board Kitセットアップ説明書」がダウンロードできますので、そちらも合わせてご覧ください。

https://www.computex.co.jp/products/palmice4/p4_check_board.htm

CSIDEを起動し、[設定]メニューの[ターゲットシステムの設定]を選択すると、CPUの選択画面が表示されます。ここで、メーカ名は[Renesas]、CPUは[RZ/G2L]を選択し、[起動する]ボタンを押します。

Workbench

次にターゲットシステムの設定ウィンドウが表示されますので、[更新]ボタンを押してください。

Workbench

これで起動しました。起動後はすべてのコアが実行状態になっています。CSIDEではCortex-A55の2つがCore0、Core1、Cortex-M33はCore2という名前に割り当てられます。画面の左下で風車のようにぐるぐる回っているのは各コアの実行状態を表しています。

この状態ではまだデバッグできませんので、CSIDEがコアの制御を取得するためのアタッチという操作を行います。今回はCortex-M33がデバッグ対象ですので、以下のメニューからアタッチします。

Workbench

アタッチした後はデバッグ対象コアを選択します。画面下のバーの3つ目をクリックするとCore2がデバッグ対象に切り替わります。

Workbench

この時、Cortex-A55×2は何をしているのか疑問に思われるかもしれませんが、彼らはフリーラン状態ですので、前回作ったSDカードのLinuxを動かしていると思われます。

プログラムのダウンロード

では、Cortex-M33にプログラムをダウンロードします。ファイルロードのボタンを押してDebugのフォルダに移動し、「test.elf」を選択します。

Workbench

プロジェクトに保存する場合は、[プロジェクトから起動したときにロードする]のチェックは外しておきます。

次に[詳細設定]ボタンを押してデバッグ情報の管理をCore2のみにチェックします。

Workbench

OKボタンを押せば設定完了です。

ダウンロードボタンを押してファイルをダウンロードします。

Workbench

ロード完了後、コードウィンドウとコマンドウィンドウを開いた状態です。

Workbench

ここでコマンドウィンドウに以下のコマンドを入力します。

@SetSYS_CM33_CFG __Secure_Vectors,__Vectors

これはSYS_CM33_CFG2とSYS_CM33_CFG3 のレジスタの設定を行います。このレジスタはベクタのアドレスを設定するもので、セキュアベクタと非セキュアベクタの2つを設定する必要があります。__Secure_Vectorsと__Vectorsはプログラム側で用意したセキュアと非セキュアのベクタ配列です。この2つを@SetSYS_CM33_CFGコマンドに渡すことで、ベクタのアドレスが設定されます。

ここまでの手順は「RZ/G2L Evaluation Board Kitセットアップ説明書」に書かれている内容を手動でやってみたものです。説明書通りに設定すれば、ツールバーの再ロードボタンをクリックするだけの操作にまで自動化できます。

プログラムの実行確認

とりあえず、main関数まで実行できることを確認します。Ctrl+uを押して、「main」と入力すればmain関数まで実行して停止します。

Workbench

ここからhal_entry関数が呼ばれてますので、トレース実行して確認してみましょう。

Workbench

ざっと見たところ割込みハンドラを登録しているみたいです。おそらくタイマ割り込みでLチカを実現しているのでしょう。ではその先のタイマ割込みハンドラ「timer_isr」を見てみましょう。先頭にブレークポイントを設定するとすぐに止まりますので、ステップ実行で数行進めます。

Workbench

なるほど、R_BSP_PinWrite関数でLEDポートに出力を反転させて点滅をおこなっているようです。それでは、実行させてLチカを確認してみましょう。ツールバーの実行ボタンを押します。

Workbench

ん・・・変化しません。そもそも、どのLED?

Getting Startedマニュアルの「4.2 What Does Blinky Do?」を確認してみますと、なんと「注意:SRMAC EVKボードにはLEDがありません。」と書かれています。Lチカがやりたければ拡張LEDボードが必要だそうです。こんな高輝度のLEDが搭載されているのにLチカできないとは・・・。

とりあえず今回の目的はサブコアでプログラムが実行できることですので、目的は達成されたということでお茶を濁しておきます。