RL78/G13 Stickでリアルタイムクロックを使ってLチカ

最近、RL78/G13 Stick評価ボード(*)を購入した手始めに、定番のLチカを行ったので手順をメモ。

環境構築

ソフトウェアの方は、ルネサスのサイトからCS+ for CA,CXをダウンロード・インストール。また評価ボードのマニュアルに従って、評価ボードのデバイスドライバをインストール。
ハードウェアの方は、マニュアルに従ってデバッグツールが動作するようにジャンパ設定を行う。

プロジェクトの作成

R5F100LE(64KB)でプロジェクト作成。
次にツールプラグインの管理で、「コード生成プラグイン」を有効化する。
またデバッガはRL78 EZ Emulatorを選択。

コーディング

今回はリアルタイムクロックで2秒周期でLEDを点滅させるプログラムを書く。
レジスタ設定が煩雑なので、今回はCS+のコード生成プラグイン任せでレジスタ設定のコードを生成する。

コード生成プラグインでの生成

コード生成のメニューから、以下を設定する。

  • 端子割り当て設定はデフォルトで確定する。
  • 以下リアルタイムクロック設定
    • クロック設定で、動作モード設定とEVDD設定を「高速メインモード2.7~5.5(V)」、サブシステム・クロック設定を「動作」「XT1発振」にする。
    • リアルタイムクロック動作設定で、動作設定を「使用する」、リアルタイムクロック初期値設定をチェックして任意の日時を指定、アラーム検出機能をチェック、定周期割り込み機能をチェックして「1秒に1度」を選択
  • LED出力設定として、ポート設定で、ポート7のP77を出力に設定する。

設定が終わったら、「コード生成」でコードを生成する。

実装

煩雑なレジスタ設定や割り込み設定は自動生成されているので、あとはリアルタイムクロックの開始処理と、割り込み処理を記述する。
r_main.cのmain関数を以下のように記述

void main(void)
{
    R_MAIN_UserInit();
    /* Start user code. Do not edit comment generated here */
    R_RTC_Start();

    while (1U)
    {
        ;
    }
    /* End user code. Do not edit comment generated here */
}

次にr_cg_rtc_user.cの割り込み関数r_rtc_callback_constperiod()を以下のように記述。

static void r_rtc_callback_constperiod(void)
{
    /* Start user code. Do not edit comment generated here */
    static int flg = 0;
    
    if (flg) {
	    P7 = P7 & 0x7f;
	    flg = 0;
    } else {
	    P7 = P7 | 0x80;
	    flg = 1;
    }
    /* End user code. Do not edit comment generated here */
}

あとはこれをビルドし基板にダウンロード・実行すると、基板上のLEDが2秒周期で点滅するようになる。